
Уровень аппаратной абстракции аудио в 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 расположены в
hardware/libhardware/include/hardware
. Подробнее см. Audio.h . - Драйвер ядра
- Аудиодрайвер взаимодействует с вашим оборудованием и реализацией HAL. Вы можете использовать Advanced Linux Sound Architecture (ALSA), Open Sound System (OSS) или специальный драйвер (HAL не зависит от драйвера).
Примечание . Если вы используете ALSA, мы рекомендуем
external/tinyalsa
для пользовательской части драйвера из-за его совместимости с лицензированием (стандартная библиотека пользовательского режима находится под лицензией GPL). - Собственный звук Android на основе Open SL ES (не показан)
- Этот API предоставляется как часть Android NDK и находится на том же уровне архитектуры, что и android.media .