blob: 3bcbb3343ea1ce567ce45bf6eb8f80f4e6fa8e92 [file] [log] [blame]
<html devsite><head>
<title>音频</title>
<meta name="project_path" value="/_project.yaml"/>
<meta name="book_path" value="/_book.yaml"/>
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<img style="float: right; margin: 0px 15px 15px 15px;" src="images/ape_fwk_hal_audio.png" alt="Android 音频 HAL 图标"/>
<p>
Android 的音频硬件抽象层 (HAL) 可将 <a href="http://developer.android.com/reference/android/media/package-summary.html">android.media</a> 中特定于音频的较高级别的框架 API 连接到底层音频驱动程序和硬件。本部分介绍了有关提升性能的实现说明和提示。
</p>
<p>
Android 音频架构定义了音频功能的实现方式,并指出实现中所涉及的相关源代码。
</p>
<img src="images/ape_fwk_audio.png" alt="音频架构" id="figure1"/>
<p class="img-caption">
<strong>图 1. </strong> Android 音频架构</p>
<dl>
<dt>
应用框架
</dt>
<dd>
应用框架包含应用代码,该代码可使用 <a href="http://developer.android.com/reference/android/media/package-summary.html">android.media</a> API 与音频硬件进行互动。在内部,此代码会调用相应的 JNI 粘合类,以访问与音频硬件互动的原生代码。
</dd>
<dt>
JNI
</dt>
<dd>
<a href="http://developer.android.com/reference/android/media/package-summary.html">android.media</a> 关联的 JNI 代码可调用较低级别的原生代码,以访问音频硬件。JNI 位于 <code>frameworks/base/core/jni/</code><code>frameworks/base/media/jni</code> 中。
</dd>
<dt>
原生框架
</dt>
<dd>
原生框架可提供相当于 <a href="http://developer.android.com/reference/android/media/package-summary.html">android.media</a> 软件包的原生软件包,从而调用 Binder IPC 代理以访问媒体服务器的特定于音频的服务。原生框架代码位于 <code>frameworks/av/media/libmedia</code> 中。
</dd>
<dt>
Binder IPC
</dt>
<dd>Binder IPC 代理用于促进跨越进程边界的通信。代理位于 <code>frameworks/av/media/libmedia</code> 中,并以字母“I”开头。
</dd>
<dt>
媒体服务器
</dt>
<dd>
媒体服务器包含音频服务,这些音频服务是与您的 HAL 实现进行互动的实际代码。媒体服务器位于 <code>frameworks/av/services/audioflinger</code> 中。
</dd>
<dt>
HAL
</dt>
<dd>
HAL 定义了由音频服务调用且您必须实现以确保音频硬件功能正常运行的标准接口。音频 HAL 接口位于 <code>hardware/libhardware/include/hardware</code> 中。如需了解详情,请参阅 <a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/audio.h">audio.h</a>
</dd>
<dt>
内核驱动程序
</dt>
<dd>
音频驱动程序可与您的硬件和 HAL 实现进行互动。您可以使用高级 Linux 声音体系 (ALSA)、开放声音系统 (OSS) 或自定义驱动程序(HAL 与驱动程序无关)。
<p class="note"><strong>注意</strong>:如果您使用 ALSA,我们建议将 <code>external/tinyalsa</code> 用于驱动程序的用户部分,因为它具有兼容的许可(标准的用户模式库已获得 GPL 许可)。</p>
</dd>
<dt>
基于 Open SL ES 的 Android 原生音频(未显示)<em></em>
</dt>
<dd>
此 API 作为 <a href="https://developer.android.com/tools/sdk/ndk/index.html">Android NDK</a> 的一部分提供,且与 <a href="http://developer.android.com/reference/android/media/package-summary.html">android.media</a> 位于同一架构层级。
</dd>
</dl>
</body></html>