声音的

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 代理促进跨进程边界的通信。代理位于frameworks/av/media/libmedia并以字母“I”开头。
媒体服务器
媒体服务器包含音频服务,它们是与您的 HAL 实现交互的实际代码。媒体服务器位于frameworks/av/services/audioflinger中。
哈尔
HAL 定义了音频服务调用的标准接口,您必须实现该接口才能使您的音频硬件正常运行。更多详情请参考对应HAL版本目录下的*.hal文件中的音频HAL接口和注释。
内核驱动程序
音频驱动程序与您的硬件和 HAL 实现进行交互。您可以使用高级 Linux 声音架构 (ALSA)、开放声音系统 (OSS) 或自定义驱动程序(HAL 与驱动程序无关)。

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

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