IOS AVAudioRecorder, как записывать только при наличии аудиовхода (без тишины)

Я использую AVAudioRecorder для записи звука с микрофона iphone, но я хочу отказаться от периодов молчания: начните запись при обнаружении звука и прекратите запись при следующей тишине.

Не могу понять, как это сделать

Любые советы?

Thanx!

Ответы

Ответ 1

Я нашел способ, основанный на Audio Queue Services. Это намного сложнее, но гораздо интереснее, так как вы определяете буферы очередей для входящих пакетов аудио.

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

Позже было больше времени, чем сообщение. Если кто-то убеждал, что просто не могу подождать, напишите мне письмо и я буду рад помочь.

Проверьте пример здесь: http://developer.apple.com/library/ios/#samplecode/SpeakHere/Introduction/Intro.html

Ответ 2

Возможно, вы можете использовать поддержку AVAudioRecorder для измерения уровня звука для отслеживания уровней звука и включения записи, когда уровни превышают заданный порог. Вам необходимо включить измерение:

[anAVAudioRecorder setMeteringEnabled:YES];

а затем вы можете периодически звонить:

[anAVAudioRecorder updateMeters];
power = [anAVAudioRecorder averagePowerForChannel:0];
if (power > threshold && anAVAudioRecorder.recording==NO) {
    [anAVAudioRecorder record];
} else if (power < threshold && anAVAudioRecorder.recording==YES) {
    [anAVAudioRecorder stop];
}

Или что-то в этом роде.