Путаница со счетчиками в AVAudioRecorder - PullRequest
4 голосов
/ 17 апреля 2011

Проще говоря, я пытаюсь синхронизировать что-то на основе чтения децибела из входного потока микрофона iPhone, и значения, которые я получаю, не совсем то, чего я добиваюсь. Я использую AVPudioRecorder's peakPowerForChannel и averagePowerForChannel. (Я знаю, что это довольно упрощенный метод синхронизации губ, но качество не является главной проблемой).

Когда количество децибел увеличивается, измерители реагируют так, как мне бы хотелось (более высокое значение, когда я громче, поэтому я могу сопоставить это с открытостью рта), но когда звук быстро прекращается, значения уменьшаются медленно, как будто звук затихал (т. е. затихал за секунду или две) - не то, что я хотел бы.

Есть ли способ настроить AVAudioRecorder так, чтобы у него не было этого эффекта 'исчезновения', или я могу что-то сделать со значениями, которые он мне дает, чтобы получить желаемый результат? Или есть другой инструмент, который я могу использовать?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 28 июня 2013

Вы можете сбросить свойство meteringEnabled на YES, например:

yourRecorderName.meteringEnabled = YES

Вызывайте это каждый раз, когда вы хотите, чтобы уровни сбрасывались до уровней окружающей среды.Это займет около 0,02 секунды, и за это время уровни кратковременно упадут до 0 или -120 дБ перед сбросом до окружающего.

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

[yourRecorderName stop]
[yourRecorderName record]

Этозанимает около 0,05 секунды, но уровни не упадут до 0 во время ожидания.Фактически, ничего не произойдет, потому что в этом случае объекту записи фактически требуется 0,05 секунды, чтобы остановить и снова начать запись.

2 голосов
/ 17 апреля 2011

Баллистика счетчиков на AVAudioPlayer - это то, что вы ожидаете от отображения традиционных измерителей звука: мгновенный для увеличения амплитуды, но с низкой частотой для уменьшений.

Для вещи типа Говорящего Карла, в которой вы анимируете персонажа на основе записанного звука, вам нужно будет получить необработанный звук и при необходимости настроить собственный ответ измерения. Если вы анимируете персонажа вживую (то есть, когда пользователь говорит в микрофон устройства), вы, вероятно, захотите использовать AudioQueue или RemoteIO для получения аудиоданных. В противном случае, если вы просто обрабатываете аудиофайл после его записи, вы можете получить необходимые данные, используя ExtAudioFile.

...