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

从音频队列会话中删除静音在ios中录制的音频,ios,ios5,audioqueueservices,Ios,Ios5,Audioqueueservices,我正在使用音频队列从iphone的麦克风录制音频,并在检测到静音时停止录制(10秒钟内没有音频输入),但我想放弃音频文件中的静音 在AudioInputCallback函数中,我使用以下代码检测静音: AudioQueueLevelMeterState meters[1]; UInt32 dlen = sizeof(meters); OSStatus Status AudioQueueGetProperty(inAQ,kAudioQueueProperty_CurrentLevelMeterDB

我正在使用音频队列从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");}
audioqueuelevelmeters状态表[1];
UInt32 dlen=尺寸(米);
OSStatus状态AudioQueueGetProperty(inAQ、kAudioQueueProperty_CurrentLevelMeterDB、meters和dlen);
中频(米[0]。mPeakPower<\u阈值)
{//NSLog(@“检测到静音”);}

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

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


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

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