2013-06-14 3 views
3

У меня есть концепция приложения, требующая обработки аудиосигнала в реальном времени, которая может быть в целом описана как: а) выборка входящего звука (из микрофона), б) выполнение функций обработки сигналов как фильтрация, преобразование Фурье, фильтрация и манипуляция, обратное преобразование Фурье) c) воспроизведение (через гнездо громкоговорителя)Обработка аудио в реальном времени - проверка возможности задержек

Я считаю, что время от времени (а) до (в) в порядке от 2 до 5 мс для приложения для работы в реальном мире.

Итак, мой вопрос возможен на сегодняшнем поколении телефонов iphones и android?

+1

5 мс, скажем, 44,1 кГц, ограничивает максимальную длину FFT в 220 выборок. –

+0

Я считаю, что только I/O на этом заказе для iOS (очень грубо говоря). Android был намного выше, но более новые версии должны быть лучше. –

+0

@ Oli Charlesworth - Это правда, если только работа в конвейере обработки аудио в конце концов заканчивается FFT. Но будет A/D, тогда есть некоторая другая обработка сигнала, как упоминается OP, а затем, наконец, есть D/A. Таким образом, практическая длина FFT может составлять менее 220 выборок для бюджета на 5 мс, упомянутого в OP. – goldenmean

ответ

1

На iOS можно, но не гарантируется. Мне удалось получить ~ 6 мс (размер выборки 22050, размер буфера 128 выборок) в моем приложении iOS, которое выполняет обработку речи в реальном времени. Взгляните на Novocaine (https://github.com/alexbw/novocaine) - который обеспечивает приятную инкапсуляцию аудио единиц и упрощает программирование.

Однако имейте в виду, что даже если вы запрашиваете определенный размер буфера, во время выполнения iOS может решить отправить более крупные буферы с более длинными интервалами (=> более высокая латентность) на основе ограничений ресурсов. Например, если вы запросили размер буфера 128 (~ 6 мс), вы МОЖЕТЕ получить 256 буферов размера в 12 м вместо. Ваше приложение должно учитывать это и обрабатывать буфер соответственно.

На Android, к сожалению, звук с обратной задержкой с малой задержкой - гораздо большая проблема. Это связано с тем, что задержка зависит от множества факторов, зависящих от устройства/производителя, таких как аппаратные/драйверные буферы, и они различаются от устройства к устройству. Вы можете найти дискуссию об этом давнем Android-гандикапе здесь: https://code.google.com/p/android/issues/detail?id=3434

Мое предложение было бы игнорировать Android на данный момент и реализовать/проверить алгоритмы обработки сигналов на устройстве iOS. Позже вы можете портировать их на Android.