Для наименьшей возможной задержки звука мы рекомендуем использовать собственный звук Android на основе OpenSL ES 1.0.1.
Контрольный список реализации
Чтобы использовать собственный звук Android:
- Загрузите и установите Android NDK . В остальной части этого документа мы будем предполагать, что
NDKroot
— это каталог, в который вы установили NDK. - Прочтите сопроводительную документацию.
- Проверьте уровень API 9 или выше.
- Проверьте наличие функции android.hardware.audio.low_latency.
- Используйте рекомендуемый собственный размер буфера и частоту дискретизации, возвращаемые android.media.AudioManager.getProperty(java.lang.String)
Примечание : тот же размер буфера и частота дискретизации также должны использоваться для ввода.
- Обычно счетчика буферов OpenSL ES, равного 1, достаточно.
- Держите свои обработчики обратных вызовов короткими, без пикового использования ЦП или неограниченной блокировки. Избегайте инверсии приоритетов.
- Рассмотрите возможность использования неблокирующих алгоритмов для связи между входными и выходными обработчиками обратного вызова, а также между обработчиками обратного вызова и остальной частью вашего приложения.
Сопутствующая документация
OpenSLES 1.0.1
Используйте программу просмотра PDF для просмотра спецификации OpenSL 1.0.1. Это довольно длинная ссылка, и не вся она будет вам актуальна; но вам нужно будет проконсультироваться с ним для получения подробной информации об API.
Примечание . В этом документе описывается полная версия OpenSL ES 1.0.1, но собственный звук Android на самом деле основан на подмножестве OpenSL ES 1.0.1 с некоторыми специфичными для Android расширениями.
Документы, описывающие более поздние версии OpenSL ES, такие как 1.1, не относятся к Android.
OpenSL ES для Android
Документ «OpenSL ES для Android» входит в состав установки NDK и в настоящее время недоступен в Интернете. Откройте эту ссылку в браузере:
NDKroot/docs/Additional_library_docs/opensles/index.html
Вы захотите просмотреть весь документ, но обратите особое внимание на подраздел «Производительность» раздела «Примечания по программированию».
В разделе «Поддерживаемые функции OpenSL ES 1.0.1» описывается подмножество поддерживаемых Android.
В разделе «Расширения Android» описаны расширения для Android, которые не включены в базовую версию OpenSL ES 1.0.1.
Связь с OpenSL ES 1.0.1
На этой диаграмме Венна показана взаимосвязь между собственным звуком Android и OpenSL ES 1.0.1.
Другие источники
источник.android.com
Сайт source.android.com в первую очередь предназначен для OEM-производителей устройств Android и поставщиков SoC, поставляющих компоненты этим OEM-производителям.
Однако на этом сайте есть много полезной информации о задержке, поэтому вы можете просмотреть ее. См. статьи в Audio Latency.
android-ndk
Если у вас есть вопросы о том, как использовать собственный звук Android, вы можете задать их в группе обсуждения android-ndk.
Видео
- Высококачественный звук на Android (Google I/O 2013)
- Все видео посвящено задержке.
- Создание отличных мультимедийных приложений на Android (Google I/O, 2014 г.)
- Первые 14 минут посвящены звуку в целом и задержке ввода в частности.
- Задержка звука: размеры буфера (100 Days of Google Dev)
- Описывает взаимосвязь между задержкой звука, размерами буфера и планированием задач.