从音频队列会话中删除静音在ios中录制的音频

时间:2012-08-19 15:02:34

标签: ios ios5 audioqueueservices

我正在使用音频队列来录制来自iphone麦克风的音频,并在检测到静音时停止录音(没有音频输入10秒),但我想放弃音频文件中的静音。

AudioInputCallback函数中,我使用以下代码来检测静默:

AudioQueueLevelMeterState meters[1];
UInt32 dlen = sizeof(meters);
OSStatus Status AudioQueueGetProperty(inAQ,kAudioQueueProperty_CurrentLevelMeterDB,meters,&dlen);
if(meters[0].mPeakPower < _threshold)
{ // NSLog(@"Silence detected");}

但是如何删除这些数据包?或者有更好的选择吗?

2 个答案:

答案 0 :(得分:2)

您可以通过先将缓冲区写入缓冲区来延迟写入,而不是从AudioQueue中删除数据包。可以通过将其放在inUserData中来轻松定义缓冲区。

完成录制后,如果最后10秒未静音,则将其写回您要写入的任何文件。否则只需释放缓冲区。

答案 1 :(得分:0)

记录并关闭文件后,只需打开并截断您不感兴趣的示例数据(注意:您可以使用AudioFile / ExtAudioFile API正确更新任何相关的块/标头大小)。