Аудио симулятора iPhone работает только для частот 44100 Гц, 22050 Гц и 11025 Гц. - PullRequest
4 голосов
/ 05 апреля 2011

Кто-нибудь использует симулятор для обработки звука 8 кГц на уровне AudioUnit?

Аудио симулятора iPhone работает только для частот 44100 Гц, 22050 Гц и 11025 Гц.В противном случае это не получается.

У меня проблемы с записью звука на симуляторе iPhone.Код отлично работает на устройстве с жестким диском, но странно дает сбой в симуляторе.

Я работаю на уровне AudioUnit, и я установил частоту дискретизации (через свойства аудио сеанса) на 8000 Гц.На оборудовании работает нормально, но на симуляторе обратный вызов рендеринга запрашивает один кусок данных соответствующего размера, а затем перезванивает каждые 11,6 мс с запросом одного байта.

Я попытался установить частоту дискретизации на 44100/4 (11025Hz) и все работало нормально.Поэтому я попытался установить частоту дискретизации аудио сеанса 11024, и она сломалась.То же самое с 11026. Работает 11025.

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

Может кто-нибудь попробовать это в своем собственном коде в симуляторе?Попробуйте частоты дискретизации 11024, 11025 и 11026 и посмотрите, работает ли только 11025?

ОБНОВЛЕНИЕ: Если я запрашиваю 11024, это дает мне 8000, но обратный вызов рендеринга продолжает доставлять ioData, запрашивая только один кадр (1 байт).То же самое происходит, когда я запрашиваю 8000 Гц.

ОБНОВЛЕНИЕ2: Симулятор также работает плавно, когда я программирую на уровне AudioQueue API.Он обрабатывает 8 кГц там.Похоже, что он облажался на уровне AudioUnit API.

Ответы [ 3 ]

4 голосов
/ 06 апреля 2011

Насколько я могу судить, симулятор переходит в нерабочий режим, когда вы просите его модуль удаленного ввода / вывода работать в режиме 8 кГц. Или в любом режиме, отличном от 44100/4.

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

Если я установил подтип устройства на VoiceProcessingIO, 8 кГц работает нормально, хотя сторона микрофона становится немного суетливой после каждого чтения.

Таким образом, проблема заключается в том, что модуль удаленного ввода / вывода симулятора утверждает, что поддерживает 8 кГц, но он работает только в том случае, если вы настроили его как подтип VoiceProcessing.

1 голос
/ 05 апреля 2011

Симулятор назван так, потому что это не эмулятор.

0 голосов
/ 05 апреля 2011

Прежде всего, есть несколько «канонических» частот выборки. Я знаю 8000, 11025, 22050, 41000, 48000 и 96000 Гц. Я не ожидал бы, что какая-либо аудиосистема будет работать с произвольным значением, кроме этих канонических.

При этом известно, что симулятор не ведет себя точно так же, как настоящий iDevice, особенно аудиоподсистема. Например, IIRC симулятор не может воспроизводить все аудиоформаты, которые может воспроизводить устройство iOS. Как сказал @JustSid, это симулятор, а не эмулятор. Ничто не заменит тестирования на реальном устройстве.

...