我正在使用音频队列来录制来自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");}
但是如何删除这些数据包?或者有更好的选择吗?
答案 0 :(得分:2)
您可以通过先将缓冲区写入缓冲区来延迟写入,而不是从AudioQueue中删除数据包。可以通过将其放在inUserData中来轻松定义缓冲区。
完成录制后,如果最后10秒未静音,则将其写回您要写入的任何文件。否则只需释放缓冲区。
答案 1 :(得分:0)
记录并关闭文件后,只需打开并截断您不感兴趣的示例数据(注意:您可以使用AudioFile / ExtAudioFile API正确更新任何相关的块/标头大小)。