Аудио

Значок Android Audio HAL

Уровень аппаратной абстракции аудио в Android (HAL) соединяет высокоуровневые 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 упрощают обмен данными через границы процессов. Прокси расположены в frameworks/av/media/libmedia и начинаются с буквы «I».
Медиа-сервер
Медиа-сервер содержит аудиоуслуги, которые представляют собой фактический код, взаимодействующий с вашими реализациями HAL. Медиа-сервер находится в frameworks/av/services/audioflinger .
HAL
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 .