IPhone simulator audio работает только для 44100 Гц, 22050 Гц и 11025 Гц


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

IPhone simulator audio работает только для 44100 Гц, 22050 Гц и 11025 Гц. Как ни странно, в противном случае он терпит неудачу.

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

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

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

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

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

UPDATE: если я попрошу 11024, он даст мне 8000, но обратный вызов рендеринга продолжает доставлять ioData, запрашивая только один кадр (1 байт). То же самое поведение, когда я прошу 8000 Гц.

UPDATE2: симулятор также работает fin, когда я программирую в AudioQueue API уровень. Он обрабатывает 8 кГц там. Это просто кажется, что он облажался на уровне API AudioUnit.

3 4

3 ответа:

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

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

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

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

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

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

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