Я начинаю реализовывать свою игровую звуковую часть на C ++, и я видел, что есть 2 звуковые платформы, доступные AAudio (https://developer.android.com/ndk/guides/audio/aaudio/aaudio.html) и OpenSL (https://developer.android.com/ndk/guides/audio/opensl/index.html).
Каковы различия между этими двумя?
OpenSL ES
OpenSL поддерживается устройствами, начиная с Android 2.3 (Gingerbread). Тем не менее, быстрый микшер для OpenSL (высокопроизводительный звук) доступен начиная с Android 4.2 (или 4.3?) И не поддерживается изначально всеми устройствами.
Что это значит? Исходя из моих наблюдений, когда быстрый микшер не используется, Java AudioTrack Быстрее (имеет более низкую задержку), чем OpenSL.
Когда используется быстрый микшер, задержка звука на самом деле хорошая и низкая. Чтобы это произошло, ваше устройство должно поддерживать быстрый микшер, а параметры конфигурации должны совпадать.
Другая проблема, которую следует рассмотреть, — это «треск» на GearVR, возможно, из-за изменения приоритетов потоков.
Для реализации вашего аудио с OpenSL, вы можете обратиться к образцам NDK, или даже лучше здесь https://github.com/Over17/AndroidAudioFastPathSample — это исправлено, чтобы фактически использовать быстрый путь.
AAudio
Будет поддерживаться на Android O, который выйдет некоторое время в этом году. Если вы не хотите, чтобы ваша игра была совместима только с Android O, вы, вероятно, не хотите идти по этому пути.
У меня пока мало опыта.
мотивация
Почему вы действительно хотите нативную аудио часть для своей игры? Если бы это не был синтезатор, профессиональное аудиоприложение или игра для виртуальной реальности, я бы на самом деле не стал возиться с родным звуком C ++ и пошел бы на JavaAudioTrack. Он надежен, совместим со всеми устройствами и имеет приемлемую задержку для непрофессиональных приложений.
Если вам нужен собственный аудиоинтерфейс для Android, мы рекомендуем использовать Oboe. Гобой вызывает AAudio на новых устройствах и OpenSL ES на старых устройствах. Oboe API — это прямое отображение интерфейса C AAudio в C ++.
В Oboe есть обходные пути для решения различных проблем Open SL ES на разных платформах Android.
Источник доступен на GitHub и активно развивается.