音频

Android Audio HAL icon

Android 的音频硬件抽象层 (HAL) 将 android.media 中更高级别的特定于音频的框架 API 连接到下层音频驱动程序和硬件。本节包含有关改进性能的实现说明和技巧。

Android 音频架构定义了音频功能是如何实现的,并指出了实现中涉及的相关源代码。

Audio architecture

图 1. Android 音频架构

应用框架
应用框架包括应用代码,该代码使用 android.media API 与音频硬件交互。在内部,此代码调用相应的 JNI 粘合类以访问与音频硬件交互的本地代码。
JNI
android.media 关联的 JNI 代码调用较低级别的本地代码以访问音频硬件。JNI 位于 frameworks/base/core/jni/frameworks/base/media/jni 中。
原生框架
原生框架提供了与 android.media 软件包等效的原生组件,调用 Binder IPC 代理以访问媒体服务器的特定于音频的服务。原生框架代码位于 frameworks/av/media/libmedia 中。
Binder IPC
Binder IPC 代理有助于跨进程边界进行通信。代理位于 frameworks/av/media/libmedia 中,并以字母“I”开头。
媒体服务器
媒体服务器包含音频服务,这些服务是与您的 HAL 实现交互的实际代码。媒体服务器位于 frameworks/av/services/audioflinger 中。
HAL
HAL 定义了音频服务调用的标准接口,您必须实现该接口才能使您的音频硬件正常工作。有关更多详细信息,请参阅 音频 HAL 接口 以及相应 HAL 版本目录的 *.hal 文件中的注释。
内核驱动程序
音频驱动程序与您的硬件和 HAL 实现交互。您可以使用高级 Linux 声音架构 (ALSA)、开放声音系统 (OSS) 或自定义驱动程序(HAL 与驱动程序无关)。

注意:如果您使用 ALSA,我们建议使用 external/tinyalsa 作为驱动程序的用户部分,因为它具有兼容的许可(标准用户模式库是 GPL 许可的)。

基于 Open SL ES 的 Android 原生音频(未显示)
此 API 作为 Android NDK 的一部分公开,并且与 android.media 处于相同的架构级别。