⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jma_audio_recorder.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 3 页
字号:
 *  This function submit Record request to media task.
 * PARAMETERS
 *  mma_type            [IN]        Int recorder
 *  java_recorder       [IN]        
 * RETURNS
 *  int - 0
 *****************************************************************************/
kal_bool jma_audio_recorder_start_record(kal_int32 java_recorder)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    mdi_result ret = MDI_AUDIO_FAIL;
    
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_START_RECORD, java_recorder, audio_recorder.state);
    JMA_CS_ENTER(KAL_FALSE);

    if (audio_recorder.id != java_recorder)
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, audio_recorder.id);
        JMA_CS_LEAVE(KAL_FALSE);
    }

    if (audio_recorder.state == JAVA_MEDIA_STATE_READY)
    {
        ret = mdi_audio_start_record(audio_recorder.filename, audio_recorder.format, 0, NULL, 
            jma_audio_recorder_record_result_hdlr);                
    }
    else if (audio_recorder.state == JAVA_MEDIA_STATE_PAUSED)
    {
        ret = mdi_audio_resume(NULL, jma_audio_recorder_record_result_hdlr);
    }

    /* Handle result */
    if (ret == MDI_AUDIO_SUCCESS)
    {
        kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, audio_recorder.state, JAVA_MEDIA_STATE_RECORDING);
        audio_recorder.state = JAVA_MEDIA_STATE_RECORDING;
        JMA_CS_LEAVE(KAL_TRUE);
    }
    else
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, ret);
        JMA_CS_LEAVE(KAL_FALSE);
    }
}


/*****************************************************************************
 * FUNCTION
 *  jma_audio_recorder_stop_record
 * DESCRIPTION
 *  This function submit stop request to media task.
 * PARAMETERS
 *  mma_type            [IN]        Int recorder
 *  java_recorder       [IN]        
 * RETURNS
 *  int - 0
 *****************************************************************************/
kal_bool jma_audio_recorder_pause_record(kal_int32 java_recorder)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    mdi_result ret;
  
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_PAUSE_RECORD, java_recorder, audio_recorder.state);
    JMA_CS_ENTER(KAL_FALSE);

    if (audio_recorder.id != java_recorder)
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, audio_recorder.id);
        JMA_CS_LEAVE(KAL_FALSE);
    }

    if (audio_recorder.state == JAVA_MEDIA_STATE_RECORDING)
    {
        ret = mdi_audio_pause(NULL, jma_audio_recorder_record_result_hdlr);

        if (ret == MDI_AUDIO_SUCCESS)
        {
            kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, audio_recorder.state, JAVA_MEDIA_STATE_PAUSED);
            audio_recorder.state = JAVA_MEDIA_STATE_PAUSED;

        #ifdef __MTK_TARGET__
            audio_recorder.current_time = (long)Media_GetRecordedTime();
            kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, audio_recorder.current_time);
        #endif
        }
        else
        {
            kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
            kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, ret);
        }
        JMA_CS_LEAVE(KAL_TRUE);
    }

    JMA_CS_LEAVE(KAL_TRUE);
}


/*****************************************************************************
 * FUNCTION
 *  jma_audio_recorder_set_record_location
 * DESCRIPTION
 *  The function sets record location
 * PARAMETERS
 *  mma_type          [IN]        
 *  java_recorder       [IN]
 *  path          [?] 
 * RETURNS
 *  int - 0
 *****************************************************************************/
kal_bool jma_audio_recorder_set_record_location(kal_int32 java_recorder, kal_char *path)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_int32 file_handle;
    kal_int32 result, length;
    kal_wchar *ext_name;
    kal_char *file_name;
    
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_SET_RECORD_LOCATION, java_recorder, audio_recorder.state);
    JMA_CS_ENTER(KAL_FALSE);

    if (audio_recorder.id != java_recorder)
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, audio_recorder.id);
        JMA_CS_LEAVE(KAL_FALSE);
    }
    
    mmi_ucs2ncpy((PS8) audio_recorder.filename, (PS8) path, J2ME_PATH_BUFFER_SIZE);
    
    length = mmi_ucs2strlen((S8*) audio_recorder.filename);
    if (length < 4)
    {
        JMA_CS_LEAVE(KAL_FALSE);
    }

    /* assign format */
    ext_name = &audio_recorder.filename[length - 4];
    if (kal_wstrcmp(ext_name, L".amr") == 0 || kal_wstrcmp(ext_name, L".AMR") == 0)
    {
        audio_recorder.format = MED_TYPE_AMR;
    }
    else if (kal_wstrcmp(ext_name, L".wav") == 0 || kal_wstrcmp(ext_name, L".WAV") == 0)
    {
        audio_recorder.format = MED_TYPE_WAV;
    }
#if defined (AMRWB_ENCODE)   
    else if (kal_wstrcmp(ext_name, L".awb") == 0 || kal_wstrcmp(ext_name, L".AWB") == 0)
    {
        audio_recorder.format = MED_TYPE_AMR_WB;
    }
#endif    
    else
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
        JMA_CS_LEAVE(KAL_FALSE);
    }

    kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, audio_recorder.format);
    /* Check if valid file path and delete the file */
    result = FS_GetDevStatus(audio_recorder.filename[0], FS_MOUNT_STATE_ENUM);
    if (result == FS_NO_ERROR) 
    {
        /* Check if valid file name */
        file_name = kal_dchar_strrchr((S8*) audio_recorder.filename, '\\');

        if (file_name)
        {
            file_name += 2;
            if (!mmi_fmgr_is_filename_valid(file_name))
            {
                kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
                JMA_CS_LEAVE(KAL_FALSE);
            }               
        }
        else /* Do not file '\\' */
        {
            kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
            JMA_CS_LEAVE(KAL_FALSE);
        }        

        /* Check if dir exist or if valid dir */
        *file_name = '\0';
        file_handle = FS_Open(audio_recorder.filename, FS_OPEN_DIR | FS_READ_ONLY);            
        if (file_handle > 0)
        {
           FS_Close(file_handle);
        }
        else
        {
           kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
           JMA_CS_LEAVE(KAL_FALSE);
        }
 
        /* Copy again to repair audio_recorder.filename */
        mmi_ucs2ncpy((PS8) audio_recorder.filename, (PS8) path, J2ME_PATH_BUFFER_SIZE);
        
        /* Check if file exist */
        file_handle = FS_Open(audio_recorder.filename, FS_READ_ONLY);
        if (file_handle > 0) 
        {
            result = FS_Close(file_handle); /* need to close file before delete */
            result = FS_Delete(audio_recorder.filename);
            if (result != FS_NO_ERROR)
            {
                kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, result);
                JMA_CS_LEAVE(KAL_FALSE);
            }
        }

        JMA_CS_LEAVE(KAL_TRUE);
    }
    else
    {
       kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
       kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, result);
       JMA_CS_LEAVE(KAL_FALSE);
    }

}


/*****************************************************************************
 * FUNCTION
 *  jma_audio_recorder_set_record_size_limit
 * DESCRIPTION
 *  This function set the size limit of recorded data
 * PARAMETERS
 *  mma_type            [IN]        Int recorder
 *  java_recorder       [IN]        
 *  limit_size          [IN]        
 * RETURNS
 *  int - limit_size set
 *****************************************************************************/
kal_int32 jma_audio_recorder_set_record_size_limit(kal_int32 java_recorder, kal_int32 limit_size)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    /* Use timer to limit record size */
    /* For example, 8K, 16bits, mono channel means record size == 8000*16*1/sizeof(char) bytes */
    kal_int32 samplesize_per_ms = 8000 * 16 * 1 / sizeof(kal_uint8) / 1000;
    kal_int32 limit_ms = limit_size / samplesize_per_ms;
    kal_int32 limit_ticks = kal_milli_secs_to_ticks(limit_ms);
    kal_int32 saved_size;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_SET_RECORD_SIZE_LIMIT, java_recorder, limit_size);
    JMA_CS_ENTER(0);

    if (audio_recorder.id != java_recorder)
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, audio_recorder.id);
        JMA_CS_LEAVE(0);
    }


    saved_size = aud_context_p->offset;

    kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, saved_size);


    if (limit_ticks && (limit_size > saved_size))
    {
        stack_stop_timer(audio_recorder.record_timer);
        stack_start_timer(
            audio_recorder.record_timer,
            JAVA_MEDIA_TIMER_AUDIO_RECORDER,
            (kal_uint32) limit_ticks);
    }
    else
    {
        jma_audio_recorder_commit(java_recorder);
        jvm_post_mma_event(MMA_EVENT_RECORD_STOPPED, 
            (kal_int16) audio_recorder.id, audio_recorder.current_time);
    } 
    
    JMA_CS_LEAVE(limit_size);
}


/*****************************************************************************
 * FUNCTION
 *  jma_audio_recorder_get_record_time
 * DESCRIPTION
 *  This function invoke AudioGetRecordTime request to media task.
 * PARAMETERS
 *  mma_type        [IN]        
 *  java_recorder     [IN]        
 * RETURNS
 *  long - current_time
 *****************************************************************************/
kal_uint64 jma_audio_recorder_get_record_time(kal_int32 java_recorder)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_uint64 current_time = 0;
  
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_AUDIO_RECORDER_GET_RECORD_TIME, java_recorder, audio_recorder.state); 
    JMA_CS_ENTER(0);

    if (audio_recorder.id != java_recorder)
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, audio_recorder.id);
        JMA_CS_LEAVE(0);
    }


    if (audio_recorder.state == JAVA_MEDIA_STATE_RECORDING ||
        audio_recorder.state == JAVA_MEDIA_STATE_PAUSED)
    {
    #ifdef __MTK_TARGET__
        current_time = (kal_uint64)Media_GetRecordedTime();
    #endif
        audio_recorder.current_time = current_time;
    }
    else
    {        
        audio_recorder.current_time = current_time;
    }
 
    kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, current_time);
    JMA_CS_LEAVE(current_time);
}
#else
kal_bool jma_audio_recorder_open(kal_int32 java_recorder){return KAL_FALSE;}
kal_bool jma_audio_recorder_close(kal_int32 java_recorder){return KAL_FALSE;}
kal_bool jma_audio_recorder_start_record(kal_int32 java_recorder){return KAL_FALSE;}
kal_bool jma_audio_recorder_pause_record(kal_int32 java_recorder){return KAL_FALSE;}
kal_bool jma_audio_recorder_commit(kal_int32 java_recorder){return KAL_FALSE;}
kal_bool jma_audio_recorder_reset(kal_int32 java_recorder){return KAL_FALSE;}
kal_bool jma_audio_recorder_set_record_location(kal_int32 java_recorder, kal_char *path){return KAL_FALSE;}
kal_int32 jma_audio_recorder_set_record_size_limit(kal_int32 java_recorder, kal_int32 limit_size){return 0;}
kal_uint64 jma_audio_recorder_get_record_time(kal_int32 java_recorder){return 0;}


#endif

/*****************************************************************************
 * FUNCTION
 *  jma_audio_recorder_is_active
 * DESCRIPTION
 *  This function return if any recorder is active
 * PARAMETERS
 *  void
 * RETURNS
 *  kal_bool - true or false
 *****************************************************************************/
kal_bool jma_audio_recorder_is_active(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
   

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
#ifdef SUPPORT_MMAPI
    if (audio_recorder.id != INVALID_JPLAYER_ID)
    {
        return KAL_TRUE;
    }
    else
    {
        return KAL_FALSE;
    }
#else /* SUPPORT_MMAPI */ 
    return KAL_FALSE;
#endif /* SUPPORT_MMAPI */ 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -