Микрофон и динамик Обратная связь - PullRequest
1 голос
/ 20 сентября 2011

У меня есть приложение для iPad (тюнер), которое использует Core Audio Audio Units. Он читает сигнал с микрофона и обрабатывает его. Он НЕ передает звук в динамик.

К сожалению, в разное время сигнал на самом деле вызывает обратную связь и выходит из динамика - громко и как бы поэтапно. Я не подключал микрофон к динамику, но это создает иллюзию, что микрофон как-то включен. Это не прямой сигнал - он рублен и требует, чтобы вы издавали громкие звуки, прежде чем это произойдет.

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

Как ни странно, это происходит не каждый раз и с каждым тестером, но это происходит достаточно часто, чтобы вызвать волнение.

1 Ответ

3 голосов
/ 20 сентября 2011

Если ваши обратные вызовы RemoteIO слишком медленные и / или ваше приложение аварийно завершает работу и перестает обрабатывать звуковые обратные вызовы, аудио буферы RemoteIO могут быть переработаны, что может привести к тому, что некоторые из ваших старых буферов воспроизведения или, возможно, даже буферы записи, завершатсяповторяется или повторяется в недостаточном звуковом канале.Один из способов проверить это - закомментировать весь ваш код обработки (и отладочные отпечатки, которые также могут быть слишком медленными) внутри ваших обратных вызовов и посмотреть, устраняет ли это вашу проблему с «обратной связью».

Попробуйте сделать только простоеБуферные копии и / или другая быстрая обработка с минимальными накладными расходами как в вашей записи RemoteIO, так и в обратных вызовах воспроизведения.Не обрабатывайте данные внутри удаленного обратного вызова, вместо этого выполняйте рукопожатие, планируйте или ставьте в очередь работу, которая будет выполняться позже вне обратного вызова.

Если ваше приложение может каким-либо образом обнаружить, что оно не может поддерживать, оно должно остановить RemoteIOаудиоустройство (AudioOutputUnitStop).

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

...