Аудио

Значок Android Audio HAL

Аппаратно-зависимый уровень (HAL) для аудио в Android соединяет API фреймворка более высокого уровня, предназначенные для работы со звуком, в android.media с базовым аудиодрайвером и аппаратным обеспечением. В этом разделе приведены инструкции по реализации и советы по повышению эффективности.

В архитектуре аудиосистемы Android описано, как реализованы функции аудио и где находится соответствующий исходный код.

Архитектура аудио

Рисунок 1. Архитектура аудио в Android

Фреймворк приложений
Фреймворк приложения включает код приложения, который использует API android.media для взаимодействия с аудиооборудованием. Внутренне этот код вызывает соответствующие классы JNI для доступа к нативному коду, который взаимодействует с аудиооборудованием.
JNI
Код JNI, связанный с android.media, вызывает нативный код более низкого уровня для доступа к аудиооборудованию. JNI находится в frameworks/base/core/jni/ и frameworks/base/media/jni.
Нативный фреймворк
Нативный фреймворк предоставляет нативный эквивалент пакета android.media, вызывая прокси-серверы Binder IPC для доступа к аудиосервисам медиасервера. Код встроенного фреймворка находится в frameworks/av/media/libmedia.
Binder IPC
Прокси-серверы Binder IPC упрощают обмен данными между процессами. Прокси-серверы расположены в frameworks/av/media/libmedia и начинаются с буквы "I".
Медиасервер
Медиасервер содержит аудиосервисы, которые представляют собой код, взаимодействующий с реализациями HAL. Медиасервер находится в регионе frameworks/av/services/audioflinger.
HAL
HAL определяет стандартный интерфейс, который используют аудиосервисы и который необходимо реализовать для правильной работы аудиооборудования. Подробную информацию можно найти в интерфейсе HAL аудио и комментариях в файлах *.hal каталога соответствующей версии HAL.
Драйвер ядра
Аудиодрайвер взаимодействует с вашим оборудованием и реализацией HAL. Вы можете использовать Advanced Linux Sound Architecture (ALSA), Open Sound System (OSS) или собственный драйвер (HAL не зависит от драйвера).

Примечание. Если вы используете ALSA, мы рекомендуем external/tinyalsa для пользовательской части драйвера, поскольку у него совместимая лицензия (стандартная библиотека пользовательского режима лицензируется по GPL).

Встроенный звук Android на основе Open SL ES (не показано)
Этот API является частью Android NDK и находится на том же уровне архитектуры, что и android.media.