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

Рисунок 1. Архитектура звука Android
- Рамка приложения
- Каркас приложения включает код приложения, который использует API android.media для взаимодействия с аудиооборудованием. Внутри этот код вызывает соответствующие классы JNI Glue для доступа к собственному коду, который взаимодействует с аудиооборудованием.
- JNI
- Код JNI, связанный с android.media, вызывает низкоуровневый собственный код для доступа к аудиооборудованию. JNI находится в
frameworks/base/core/jni/
иframeworks/base/media/jni
. - Собственный фреймворк
- Собственный фреймворк предоставляет собственный эквивалент пакета android.media , вызывая прокси Binder IPC для доступа к аудиоспецифичным службам медиасервера. Собственный код фреймворка находится в
frameworks/av/media/libmedia
. - Связующее IPC
- Прокси Binder IPC облегчают коммуникацию через границы процессов. Прокси находятся в
frameworks/av/media/libmedia
и начинаются с буквы "I". - Медиа сервер
- Медиасервер содержит аудиосервисы, которые являются фактическим кодом, взаимодействующим с вашими реализациями HAL. Медиасервер находится в
frameworks/av/services/audioflinger
. - ХЭЛ
- 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 .