Низкая задержка аудио API для Android?

Какие есть варианты воспроизведения одновременного звука на устройстве Android с наименьшей задержкой? Собираюсь ли я получить что-нибудь наполовину приличное из консервированного SDK, или это слишком много? В документации утверждается, что класс SoundPool способен воспроизводить несколько звуков одновременно с относительно хорошей производительностью, но после запуска некоторых тестов в эмуляторе и на физическом устройстве он кажется довольно слабым. Может быть, есть хитрость, или мне нужно перейти на API более низкого уровня для такого рода вещей? Я пробовал использовать один пул звуков с несколькими загруженными семплами, и я пробовал несколько пулов звуков, каждый из которых управлял одним семплом. Я предварительно загружаю все, поэтому при попытке воспроизведения у меня не выполняется дополнительный код, кроме вызова SoundPool.play().

4 ответа

Android 2.3 теперь поддерживает собственный доступ к аудио API (через OpenSL) для приложений с низкой задержкой.

Однако не все аппаратные устройства будут иметь профиль аудио-функции с низкой задержкой. Таким образом, приложения, которым требуются устройства фильтрации звука с малой задержкой, не поддерживают его на рынке Android, указав в манифесте следующее:

<uses-feature android:name="android.hardware.audio.low_latency"/>

Многие люди интересуются аудио с низкой задержкой на Андриоде. Вот темы, за которыми я следую по теме:

  • Волна, охватывающая темы, связанные со звуком, с конференции I/O этого года.
  • Проблема с Android о поддержке аудио с низкой задержкой в ​​NDK.

В этом посте предполагается, что на устройствах Android есть драйверы ALSA (способные воспроизводить звук с низкой задержкой), но кажется, что функциональность с низкой задержкой не предоставляется приложениям через NDK.

У меня нет прямого опыта работы с Android, но из того, что я прочитал, низкая задержка (менее 10 мс или около того) пока не реальность. Пожалуйста, оставьте любой опыт наоборот!

У меня нет опыта работы с Android, но я написал похожие вещи для Windows Mobile. Сами устройства, безусловно, способны смешивать несколько звуков в режиме реального времени с низкой задержкой (менее 25 мс), хотя под "множественными" я подразумеваю, возможно, 4 или 5 (а не 30–40). Тем не менее, я смог достичь этого удовлетворительно только путем написания собственного кода, который выполнял микширование внутри и обращался к низкоуровневому API воспроизведения звука только для воспроизведения окончательного микшированного вывода. Высокоуровневые способы воспроизведения звуков в.Net Compact Framework теоретически способны к полифонии, но на практике они работают ужасно (много глюков, заиканий и искажений).

Я подозреваю, что Android Audio SDK имеет ту же проблему, поэтому вам, возможно, придется написать свой собственный.

Пожалуйста, смотрите мой ответ на Android: звуковой API (детерминированный, низкая задержка).

Задержка устройства Android меньше зависит от API и больше зависит от оборудования и драйверов для этого конкретного устройства. Включение воспроизведения с малой задержкой потребляет больше энергии и увеличивает вероятность возникновения глюков, поэтому многие OEM-производители намеренно увеличивают свои буферы воспроизведения.

Другие вопросы по тегам