Android音频学习(二)——Android音频简介
先从Android整体结构了解音频的框架,有个大致的概念,后面再针对每一层进行详细说明
Android系统可以分为应用层、Framework层、系统运行库层、HAL层、Linux内核层,Audio子系统也是一样的。

1.应用层
1.1 职责
处理用户交互,直接调用 Android SDK 提供的音频 API 实现播放、录音、音效控制等功能,应用层是整个音频体系的最上层,厂商可以根据特定需求调用系统接口自己开发音乐播放器软件。
1.2 调用API
播放场景:
|
API |
适用场景 |
特点 |
|
MediaPlayer |
播放压缩文件(MP3/AAC) |
自动解码,高内存占用 |
|
AudioTrack |
播放 PCM 数据(如实时生成音频) |
低层级控制,支持流模式和静态模式 |
|
AAudio |
低延迟播放(Android O+) |
直接与 HAL 交互,延迟 <10ms |
|
SoundPool |
短音效(游戏按键音) |
预加载,低延迟触发 |
录音场景:
|
API |
适用场景 |
特点 |
|
MediaRecorder |
录制压缩文件(AMR/MP4) |
自动编码,简单易用 |
|
AudioRecord |
录制 PCM 数据(如语音处理) |
支持实时处理原始数据 |
1.3示例流程
1.3.1播放音乐
应用调用 MediaPlayer → 解码音频文件 → 通过 AudioTrack 提交 PCM 数据到框架层。
1.3.2录音
应用调用 AudioRecord → 从框架层获取麦克风采集的 PCM 数据。
2.框架层
2.1 职责
框架层包括两部分,一部分是提供音频数据采集(录音)和输出(播放)的接口,另一部分是协调应用层的音频请求,管理策略(如路由、音量、焦点),连接应用层与 Native 层。
2.2 关键组件
2.2.1音频数据采集和输出
- MediaPlayer/MediaRecorder:用于播放/录制媒体文件(如 MP3、AAC),封装了编解码和流管理。
- AudioTrack/AudioRecord:直接操作 PCM 数据的低级 API,适合实时音频流(如 VoIP、音乐合成)。
- SoundPool:短音频播放(如游戏音效),支持预加载和低延迟触发。
- AAudio(Android O+):高性能、低延迟的 API,绕过复杂框架层,直接与 HAL 交互。
- AudioManager:管理音频焦点、音量模式(静音/振动)、设备状态(如耳机插入)。
2.2.2音频策略管理
AudioService:系统服务,管理全局音频策略:
- 处理音频焦点冲突(如电话打断音乐播放)。
- 控制音量曲线(不同流类型独立调节)。
- 监听设备状态(耳机插拔、蓝牙连接)。
AudioSystem:Java 层与 Native 层(如 AudioFlinger)的桥梁,传递音频参数和控制命令。
2.3交互流程
当应用调用 AudioTrack.write() 时,数据通过 JNI 传递到 Native 层的 AudioFlinger。
2.4代码路径
2.4.1音频采集与输出
- frameworks/base/media/java/android/media/AudioTrack.java、AudioRecord.java、AudioManager.java
- frameworks/base/media/java/android/media/audiofx/音效相关类(如均衡器 Equalizer.java)
2.4.2音频策略
- frameworks/base/services/core/java/com/android/server/audio/
AudioService.java:音频策略和系统服务管理
- frameworks/base/media/java/android/media/AudioSystem.java
与 Native 层 AudioSystem 交互的桥梁
3.native层
3.1 职责
实现音频数据的混合(Mix)、路由、音效处理,管理硬件资源。
3.2 关键组件
3.2.1AudioFlinger
核心功能:
- 混音(Mix):将多个音频流(如音乐、系统提示音)混合为单个输出流。
- 音频效果链:应用全局或流级别的音效(如均衡器、混响)。
- 资源分配:管理音频缓冲区(DMA 内存)、线程调度(如实时播放线程)。
- FastMixer:低延迟路径(如 AAudio 使用),绕过部分处理逻辑。
3.2.2AudioPolicyManager
核心功能:
- 设备路由:根据设备优先级(如耳机 > 扬声器)选择输入/输出设备。
- 策略决策:例如蓝牙连接时自动切换音频输出,或通话时禁用媒体播放。
- 音量策略:为不同音频流类型(如音乐、通话)定义独立的音量控制规则
3.3 示例流程
插入耳机 → AudioPolicyManager 检测到设备变化 → 通知 AudioFlinger 将输出路由到耳机。
3.4 代码路径
- AudioFlinger(音频混合与处理核心)
frameworks/av/services/audioflinger/
AudioFlinger.cpp:音频流的创建、混音逻辑
Threads.cpp:音频线程管理(MixerThread、PlaybackThread)
Effects.cpp:音效处理模块
- AudioPolicy(音频策略管理)
frameworks/av/services/audiopolicy/
managerdefault/:默认策略实现
Engine/:音频策略引擎(设备路由、音量规则)
common/:通用接口定义
- AAudio 实现
frameworks/av/media/libaaudio/
AAudioService.cpp:AAudio 服务的 Native 实现
4.HAL层
4.1 职责
抽象硬件差异,提供统一的接口供 Android 系统调用,由芯片厂商实现具体驱动逻辑。
4.2 关键组件
- Audio HAL 接口:定义在 audio.h 中(如 open_output_stream(), write())。
厂商实现:
高通:hardware/qcom/audio/hal/(实现 PCM 数据传输、音量控制、编解码)。
其他厂商:如 MTK、华为提供各自的 HAL 实现。
- HAL 扩展:
Effects HAL:硬件加速的音效处理(如杜比全景声)。
Sound Trigger HAL:低功耗语音唤醒(如 "Hey Google")。
4.3示例流程
AudioFlinger 调用 HAL 的 write() → 数据通过 ALSA 驱动写入硬件缓冲区。
4.4代码路径
- Audio HAL 接口定义
- hardware/libhardware/include/hardware/audio.h
HAL 核心接口(如 audio_hw_device、audio_stream_out)
- HAL 实现示例(参考设计)
- hardware/qcom/audio/(高通平台示例)
hal/:HAL 实现代码(如 audio_hw.c)
device/generic/car/emulator/audio/(模拟器参考实现)
- HIDL 接口(Android 8.0+)
- hardware/interfaces/audio/
core/:Audio HAL 的 HIDL 接口定义(如 IDevicesFactory.hal)
5.驱动/内核层
5.1 职责
管理音频硬件设备(如 DAC/ADC),提供底层驱动支持。
5.2关键组件
- ALSA 框架(Advanced Linux Sound Architecture):
- PCM 接口:传输原始音频数据(如 snd_pcm_writei())。
- Mixer 控制:调节硬件参数(增益、声道平衡)。
- 平台专用驱动:
- 高通:kernel/techpack/audio/(处理 DSP 交互、低延迟优化)。
- 联发科:基于 TinyALSA 的定制驱动
5.3代码路径
ALSA 驱动(通用音频驱动):
- kernel/sound/
ALSA 核心驱动代码(如 PCM、Mixer 模块)
平台特定驱动(如高通):
- kernel/techpack/audio/
高通平台的音频驱动实现(如 DSP 交互)
TinyALSA 工具:
- external/tinyalsa/
tinymix、tinyplay、tinycap 命令行工具源码
5.4调试工具
- tinymix:查看和修改 Mixer 控件。
- tinyplay/tinycap:直接播放或录制 PCM 数据,绕过上层框架。
6.硬件层
6.1 职责
物理设备处理音频信号的输入和输出。
6.2 关键组件
输入设备:麦克风、Line-in 接口。
输出设备:扬声器、耳机、蓝牙音频(A2DP)、HDMI。
专用芯片:
- DSP:处理降噪、回声消除(如 Qualcomm Hexagon)。
- Codec 芯片:数模转换(DAC)和模数转换(ADC)。
6.3数据交互示例
- 播放音乐:应用 → MediaPlayer → AudioTrack → AudioFlinger(混音) → Audio HAL → ALSA驱动 → DAC → 扬声器
- 语音通话:麦克风 → ADC → ALSA驱动 → Audio HAL → AudioFlinger → AudioRecord → 电话应用 → 网络传输
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)