Аудио

Значок 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 , вызывая IPC-прокси Binder для доступа к аудиосервисам медиасервера. Код нативного фреймворка находится в frameworks/av/media/libmedia .
Binder 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 на основе OpenSL ES (не показана)
Этот API предоставляется в составе Android NDK и находится на том же архитектурном уровне, что и android.media .