2017-07-10 40 views
0

我按照audio i/o tutorial構建實時音頻錄製應用程序。但是,回放在錄製整個聲音時很少被調用。例如,當我開始錄製5秒鐘時,回調實際上只給出2秒的剪輯(而不是5)。Tizen無法實時錄製音頻

這裏是一個虛設測試代碼僅轉儲多少字節已被記錄:

int _audio_read_total; 
static void _audio_io_stream_read_cb(audio_in_h handle, size_t nbytes, void *userdata) 
{ 
    const void *buffer = NULL; 
    if (nbytes > 0) { 
     int error_code = audio_in_peek(handle, &buffer, &nbytes); 
     _audio_read_total += nbytes; 
     dlog_print(DLOG_DEBUG, LOG_TAG, "nbytes = %d,_audio_read_total = %d", nbytes, _audio_read_total); 
     error_code = audio_in_drop(handle); // remove audio data from internal buffer 
    } 
} 
static void start_audio_recording(appdata_s *ad) 
{ 
    int error_code = audio_in_create(48000, AUDIO_CHANNEL_MONO, AUDIO_SAMPLE_TYPE_S16_LE, &ad->input);  
    error_code = audio_in_set_stream_cb(ad->input, _audio_io_stream_read_cb, ad); 
    error_code = audio_in_prepare(ad->input); 
} 

start end (5 seconds later) 附加圖像包括上運行銀河齒輪S3此代碼的結果。正如您在圖像中看到的,錄製回調從時間32.3到時間37.7(超過5秒)被調用,但只接收到224250字節(應該是(37.7-32.3)* 48000 * sizeof(short)= 518400) 。這意味着只有不到40%的音頻被錄製。

任何人都可以給我一些建議來解決這個問題嗎?

玉芷

+0

您可以在此鏈接中查看解決方案(https://developer.tizen.org/forums/native-application-development/recording-audio-io-callback-very-slow-only-pick-up-less -45-音頻)。 –

回答

0

你可以嘗試使用

int audio_in_set_interrupted_cb ( audio_in_h input, 
audio_io_interrupted_cb  callback, 
void * user_data 
) 

註冊一個回調函數被調用時,音頻輸入手柄被中斷或中斷完成。我會進一步探索並嘗試重現這一點。