音频

Android 音频 HAL 图标

Android 的音频硬件抽象层 (HAL) 可将 android.media 中特定于音频的较高级别的框架 API 连接到底层音频驱动程序和硬件。本部分介绍了有关提升性能的实现说明和提示。

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

音频架构

图 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 位于同一架构层级。