Аудио

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

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

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