Подтвердить что ты не робот

Низкая латентность аудио api для Android?

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

4b9b3361

Ответ 1

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

  • A wave, охватывающий темы, связанные с аудио, начиная с конференции ввода/вывода этого года.
  • Android issue о поддержке звука с низкой задержкой в ​​NDK.

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

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