Tizen无法实时录制音频

时间:2017-07-10 06:25:26

标签: audio tizen tizen-wearable-sdk tizen-native-app

我按照audio i/o tutorial建立一个实时录音应用程序。但是,为了记录整个声音,很少会调用回调。例如,当我开始录制5秒钟时,回调实际上只给出了2秒的剪辑(而不是5)。

这是一个虚拟测试代码,仅转储已记录的字节数:

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) 附加图像包括在Galaxy Gear S3上运行此代码的结果。正如您在图像中看到的那样,从时间32.3到时间37.7(超过5秒)调用记录回调,但只接收224250个字节(应该是(37.7-32.3)* 48000 * sizeof(短)= 518400) 。这意味着只录制了不到40%的音频。

有人能给我一些解决这个问题的建议吗?

Yu-Chih

1 个答案:

答案 0 :(得分:0)

您可以尝试使用

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

当音频输入句柄中断或中断完成时,注册要调用的回调函数。我将进一步探索并尝试重现这一点。