AAudio или OpenSL

Я начинаю реализовывать часть своего игрового звука на C++, и я видел, что есть 2 звуковых фреймворка AAudio (https://developer.android.com/ndk/guides/audio/aaudio/aaudio.html) и OpenSL (https://developer.android.com/ndk/guides/audio/opensl/index.html).

Каковы различия между этими двумя?


person Hug    schedule 03.05.2017    source источник


Ответы (2)


OpenSL ES

OpenSL поддерживается устройствами, начиная с Android 2.3 (Gingerbread). Однако быстрый микшер для OpenSL (высокопроизводительный звук) доступен, начиная с Android 4.2 (или 4.3?), и изначально поддерживается не всеми устройствами.

Что это значит? По моим наблюдениям, когда быстрый микшер не используется, Java AudioTrack быстрее (имеет меньшую задержку), чем OpenSL.

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

Еще одна проблема, которую следует учитывать, — «треск» на GearVR, вероятно, из-за изменения приоритетов потоков.

Чтобы реализовать звук с помощью OpenSL, вы можете обратиться к примерам NDK или, что еще лучше, сюда https://github.com/Over17/AndroidAudioFastPathSample — исправлено, чтобы фактически использовать быстрый путь.

Аудио

Будет поддерживаться Android 8 Oreo, который выйдет в этом году. Если вы не хотите, чтобы ваша игра была совместима только с Android O, вы, вероятно, не захотите идти по этому пути.

У меня пока нет большого практического опыта.

Гобой

Oboe — это библиотека, разработанная Google, которая использует AAudio или OpenSL в качестве серверной части, в зависимости от того, что поддерживается устройством, и имеет интерфейс C++, обертывающий API. Имеет смысл использовать его вместо прямого использования AAudio.

Мотивация

Почему вам действительно нужна нативная звуковая часть для вашей игры? Если это не синтезатор, профессиональное звуковое приложение или VR-игра, я бы не стал заморачиваться с нативным звуком C++ и выбрал бы JavaAudioTrack. Он надежен, совместим со всеми устройствами и имеет приемлемую задержку для непрофессиональных приложений.

person Over17    schedule 09.06.2017
comment
I/O 2017 сообщает, что AAudio будет динамически переключаться на использование OpenSL ES в предыдущих версиях Android: youtu.be /C0BPXZIvG-Q?t=1856 - person paul-2011; 18.08.2017

Если вам нужен нативный аудиоинтерфейс для Android, в настоящее время мы рекомендуем использовать Oboe. Oboe вызывает AAudio на новых устройствах и OpenSL ES на старых устройствах. Oboe API — это прямое отображение интерфейса C AAudio на C++.

Oboe включает обходные пути для различных проблем Open SL ES на разных платформах Android.

Исходный код доступен на GitHub и активно развивается.

https://github.com/google/oboe

person philburk    schedule 02.11.2018