Удаление тишины из записанного аудио сеанса Audio Queue в ios

Я использую Audio Queue для записи звука с микрофона 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");}

Но как удалить эти пакеты? Или есть лучший вариант?


person user1495653    schedule 19.08.2012    source источник


Ответы (2)


Вместо того, чтобы удалять пакеты из AudioQueue, вы можете отложить запись, сначала записав ее в буфер. Буфер можно легко определить, разместив его внутри inUserData.

Когда вы закончите запись, если последние 10 секунд не было тишины, вы записываете ее обратно в любой файл, который собираетесь записать. В противном случае просто освободите буфер.

person vgrimmer    schedule 20.09.2012

после того, как файл будет записан и закрыт, просто откройте и усеките образцы данных, которые вам не интересны (примечание: вы можете использовать API-интерфейсы AudioFile/ExtAudioFile для правильного обновления любых зависимых размеров блоков/заголовков).

person justin    schedule 20.09.2012