Искаженный звук при использовании удаленного ввода-вывода AudioUnit - PullRequest
1 голос
/ 06 февраля 2010

Рассмотрим пример aurioTouch , предоставленный Apple. Я хотел смоделировать длительную обработку записанного аудио и изменил семпл, введя задержку в 0,1 секунды в методе обратного вызова рендеринга: PerformThru. Это приводит к искажению звука и статического шума, воспроизводимого через динамик или наушники iPhone. Шум слышен даже тогда, когда в приложении включена кнопка отключения звука, которая, по сути, выводит тишину на выходную шину AudioUnit.

Кто-нибудь может дать подробное объяснение того, что происходит на низком уровне, когда функция обратного вызова хоста (в нашем примере это PerformThru) не возвращается своевременно?

Почему функция обратного вызова, которая работает плохо, заставляет iPhone воспроизводить шум? Я понимаю, что код в функции обратного вызова должен быть высоко оптимизирован. Тем не менее, я хотел бы знать, возможно ли предотвратить шум.

Можно ли изменить сэмпл aurioTouch, чтобы AudioUnit выполнял только запись и полностью выключал воспроизведение?

1 Ответ

2 голосов
/ 06 февраля 2010

Если вы хотите ввести задержку, вам нужно сделать это с помощью буферизации, а не просто с помощью задержки обратного вызова. Например. для 0,1 с и частоты дискретизации 44,1 кГц вам потребуется буферизовать дополнительные 4410 выборок. Сначала вы должны пройти 4410 0 с, а затем начать передавать буферизованные (отложенные) выборки.

...