news 2026/9/13 12:03:53

Android-Audio-代码路径说明

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android-Audio-代码路径说明

Android Audio 代码路径详解

整体架构图

┌─────────────────────────────────────────────────────────────┐ │ 应用层 (Applications) │ ├─────────────────────────────────────────────────────────────┤ │ Java Media Framework (android.media.*) │ ├─────────────────────────────────────────────────────────────┤ │ JNI 桥接层 (android_media_*) │ ├─────────────────────────────────────────────────────────────┤ │ C++ Media Framework (libmedia, libaudioclient) │ ├─────────────────────────────────────────────────────────────┤ │ 音频服务层 (AudioFlinger, AudioPolicyService) │ ├─────────────────────────────────────────────────────────────┤ │ Audio HAL (Hardware Abstraction Layer) │ ├─────────────────────────────────────────────────────────────┤ │ Linux 内核 (ALSA, tinyalsa, sound driver) │ └─────────────────────────────────────────────────────────────┘

详细代码路径说明

1.Java Framework 层 (应用API)

路径:frameworks/base/media/java/android/media/

文件/目录说明
AudioTrack.java音频播放主类,管理PCM数据播放
AudioRecord.java音频录制主类,管理PCM数据采集
AudioManager.java音频系统管理,音量、设备、焦点控制
AudioSystem.java音频系统属性设置和查询
AudioAttributes.java音频属性定义(用途、内容类型等)
AudioDeviceInfo.java音频设备信息
AudioFormat.java音频格式定义(编码、采样率等)
AudioPlaybackConfiguration.java播放配置管理
AudioRecordingConfiguration.java录制配置管理

示例调用:

// 应用层代码AudioTracktrack=newAudioTrack.Builder().setAudioAttributes(newAudioAttributes.Builder().setUsage(AudioAttributes.USAGE_MEDIA).build()).setAudioFormat(newAudioFormat.Builder().setEncoding(AudioFormat.ENCODING_PCM_16BIT).setSampleRate(44100).setChannelMask(AudioFormat.CHANNEL_OUT_STEREO).build()).build();track.play();

2.JNI 桥接层

路径:frameworks/base/core/jni/

文件对应的Java类功能
android_media_AudioTrack.cppAudioTrack连接Java AudioTrack和C++ AudioTrack
android_media_AudioRecord.cppAudioRecord连接Java AudioRecord和C++ AudioRecord
android_media_AudioSystem.cppAudioSystem系统音频属性JNI
android_media_AudioManager.cppAudioManager音频管理JNI
android_media_AudioDeviceAttributes.cppAudioDeviceInfo设备信息JNI

关键代码流:

Java AudioTrack.write() → android_media_AudioTrack.cpp 的 write() → C++ AudioTrack::write()

3.Native Client 层 (C++ API)

路径:frameworks/av/media/libaudioclient/

文件功能
AudioTrack.cppC++ AudioTrack实现,应用直接调用
AudioRecord.cppC++ AudioRecord实现
AudioSystem.cppC++ AudioSystem实现
AudioEffect.cpp音频效果处理
MonoPipe.cpp/Pipe.cpp音频管道工具

特点:

  • 提供C++接口给Native应用
  • 通过Binder与AudioFlinger通信
  • 实现音频数据缓冲和传输

4.核心服务层 (AudioFlinger)

路径:frameworks/av/services/audioflinger/

audioflinger/ ├── AudioFlinger.h/cpp # 主服务入口,管理所有音频线程 ├── Threads.h/cpp # 音频线程基类和派生类 │ ├── PlaybackThread # 播放线程基类 │ ├── MixerThread # 混音播放线程 │ ├── DirectOutputThread # 直接输出线程 │ ├── OffloadThread # 硬件解码线程 │ ├── DuplicatingThread # 复制线程(录音/A2DP) │ └── RecordThread # 录制线程 ├── Tracks.h/cpp # 音频轨道管理 ├── AudioMixer.h/cpp # 混音器实现 ├── Effects.h/cpp # 音频效果框架 ├── StateQueue.h/cpp # 状态队列 ├── FastCapture.h/cpp # 快速录制 ├── FastMixer.h/cpp # 快速混音 └── AudioHwDevice.h/cpp # 音频硬件设备封装

线程类型对比:

线程类型用途延迟特性
MixerThread普通音频混音标准延迟 (~50ms)
FastMixer低延迟音频低延迟 (<20ms)
DirectOutputThread独占输出(如通话)低延迟
OffloadThread硬件解码输出低功耗
DuplicatingThread多路输出(录音)标准延迟

5.策略服务层 (AudioPolicyService)

路径:frameworks/av/services/audiopolicy/

audiopolicy/ ├── AudioPolicyService.h/cpp # 策略服务入口 ├── managerdefault/ # 默认策略实现 │ ├── AudioPolicyManager.h/cpp │ └── AudioPolicyManagerDefault.cpp ├── engine/ # 策略引擎 │ ├── Interface/ # 引擎接口 │ ├── common/ # 公共组件 │ ├── config/ # 配置管理 │ └── default/ # 默认引擎 ├── common/ # 公共工具 ├── service/ # 服务管理 └── Engine.h/cpp # 策略引擎基类

主要功能:

  • 设备选择策略
  • 音量曲线管理
  • 音频焦点管理
  • 策略配置文件解析
  • 动态策略切换

6.Audio HAL 接口定义

路径:hardware/libhardware/include/hardware/

文件功能
audio.h主音频HAL接口定义
audio_policy.h音频策略HAL接口
audio_effects.h音频效果HAL接口

关键结构体:

// 音频HAL主要接口structaudio_hw_device{structhw_device_tcommon;// 必须实现的函数int(*open_output_stream)(...);int(*close_output_stream)(...);int(*open_input_stream)(...);int(*close_input_stream)(...);// 音频控制函数int(*set_parameters)(...);char*(*get_parameters)(...);// 更多功能...};

7.厂商HAL实现路径

路径示例:

# Qualcomm平台 hardware/qcom/audio/ ├── hal/ # HAL实现 ├── legacy/ # 旧版HAL └── post_proc/ # 后处理 # 设备特定 device/<vendor>/<device>/audio/ ├── hal/ # 设备特定HAL └── configs/ # 音频配置文件

8.系统定义和配置文件

路径:system/media/audio/include/system/

文件内容
audio.h音频系统核心定义(C API)
audio-base.h基础音频类型定义
audio_effect.h音频效果定义
audio_policy.h音频策略定义

路径:system/media/audio_utils/include/

文件功能
audio_utils/音频工具库
fifo/FIFO缓冲区实现
format/格式转换工具

9.音频效果框架

路径:frameworks/av/media/libeffects/

libeffects/ ├── factory/ # 效果工厂 │ └── EffectsFactory.c ├── lvm/ # Loudness Maximizer │ ├── lib/ # 库文件 │ └── bundle/ # 效果包 ├── preprocessing/ # 预处理效果 │ ├── Include/ # 头文件 │ └── src/ # 源码 └── libs/ # 效果库 └── reverb/ # 混响效果

10.音频工具和测试

路径:frameworks/av/media/libaudioclient/tests/

测试文件测试内容
AudioTrackTests.cppAudioTrack功能测试
AudioRecordTests.cppAudioRecord功能测试
AudioEffectTests.cpp音频效果测试

路径:frameworks/av/media/mtp/

工具功能
audioserver音频服务进程
media.log音频日志工具

关键配置文件路径

1.音频策略配置

# 通用配置 /system/etc/audio_policy_configuration.xml /system/etc/audio_policy_volumes.xml /system/etc/audio_policy_volumes_drc.xml # 设备特定配置 /vendor/etc/audio_policy_configuration.xml /vendor/etc/audio_effects.xml

2.效果配置文件

/system/etc/audio_effects.conf /vendor/etc/audio_effects.conf /data/misc/audio_effects/ # 用户效果配置

编译系统配置

路径:frameworks/av/services/audioflinger/Android.bp

cc_library_shared{name:"libaudioflinger",srcs:["AudioFlinger.cpp","Threads.cpp","Tracks.cpp",// ...],shared_libs:["libaudioclient","libmedia","libcutils",// ...],// ...}

调试和日志

1.日志标签

# 常用日志过滤adb logcat -s AudioFlinger adb logcat -s AudioPolicyManager adb logcat -s AudioTrack adb logcat -s AudioRecord adb logcat -s audio_hw_primary adb logcat -s audio_policy

2.调试工具

# 音频调试工具tinymix# 混音器控制tinyplay# 音频播放tinycap# 音频录制alsa_amixer# ALSA混音器alsa_aplay# ALSA播放alsa_arecord# ALSA录制# 系统工具dumpsys media.audio_flinger# AudioFlinger状态dumpsys media.audio_policy# AudioPolicy状态dumpsys audio# 音频系统状态

代码流程示例

音频播放完整流程:

1. App → AudioTrack.java (Java) 2. AudioTrack.write() → android_media_AudioTrack.cpp (JNI) 3. android_media_AudioTrack_write() → AudioTrack.cpp (C++) 4. AudioTrack::obtainBuffer() → AudioTrack::write() (libaudioclient) 5. AudioTrack::createTrackI() → IAudioFlinger.createTrack() (Binder IPC) 6. AudioFlinger.createTrack() (services/audioflinger) 7. AudioFlinger::PlaybackThread::createTrack_l() 8. AudioFlinger::MixerThread::prepareTracks_l() 9. AudioFlinger::AudioMixer::process() 10. PlaybackThread::threadLoop_write() 11. AudioStreamOut::write() (HAL) 12. audio_hw_device::out_write() (厂商HAL) 13. tinyalsa/ALSA驱动写入

常见问题定位路径

问题类型建议查看路径
无声/杂音AudioFlinger Threads.cpp, HAL实现
音频延迟FastMixer.cpp, audio_hw.cpp
设备切换失败AudioPolicyManager.cpp, 策略配置
音量问题AudioPolicyManager音量曲线, audio_policy_volumes.xml
录音问题RecordThread.cpp, 输入设备配置
音效失效Effects.cpp, audio_effects.conf

这个代码路径结构反映了Android音频系统的模块化设计,每个层级都有明确的职责边界,便于维护和扩展。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 6:36:02

AutoGPT如何识别任务优先级?重要紧急四象限法应用

AutoGPT如何识别任务优先级&#xff1f;重要紧急四象限法应用 在当前AI技术快速演进的背景下&#xff0c;我们正见证一个关键转变&#xff1a;智能体从“听令行事”的工具&#xff0c;逐步成长为能够自主思考、规划并执行复杂目标的数字代理。以AutoGPT为代表的自主智能体&…

作者头像 李华
网站建设 2026/9/13 6:42:26

收藏这篇就够了!RAG技术详解:让大模型告别幻觉的终极方案

本文介绍RAG技术如何解决大模型"幻觉"问题&#xff0c;详细阐述其核心组件&#xff08;知识嵌入、检索器、生成器&#xff09;及工作原理。系统介绍《大模型应用开发&#xff1a;RAG实战课》一书内容框架&#xff0c;包括系统构建、优化、评估和复杂范式。该书以实战…

作者头像 李华
网站建设 2026/9/11 16:25:52

25、深入理解 Java 中的严格性与惰性

深入理解 Java 中的严格性与惰性 1. 严格性与惰性的基本概念 在编程中,严格性和惰性不仅仅适用于方法参数,而是涉及到编程的方方面面。以 Java 为例,Java 是一种严格的语言,这意味着表达式会立即求值。 例如下面的代码: int x = 2 + 3;这里, x 会立即被求值为 5,…

作者头像 李华
网站建设 2026/9/13 3:20:24

26、深入理解惰性流:操作与应用

深入理解惰性流:操作与应用 1. 流的基本操作 在处理流时,我们常常需要对其进行各种操作,比如将流转换为列表、获取流的前几个元素、移除前几个元素等。 1.1 将流转换为列表 为了将流转换为列表,我们可以在 Stream 类中实现 toList 方法。该方法可以采用递归方式,但…

作者头像 李华
网站建设 2026/9/12 18:06:14

如何在服务器上运行LobeChat镜像并对接GPU加速推理?

如何在服务器上运行 LobeChat 镜像并对接 GPU 加速推理&#xff1f; 在企业级 AI 应用快速落地的今天&#xff0c;一个常见但棘手的问题浮现出来&#xff1a;如何让非技术用户也能顺畅地与本地部署的大模型交互&#xff1f;很多团队已经成功跑通了 Qwen、Llama-3 或 ChatGLM 的…

作者头像 李华
网站建设 2026/9/12 6:46:14

【编号2551】从代码逻辑到实用体验:一款小红书笔记下载工具的技术实现与使用感悟

作为一名长期与数据采集打交道的开发者&#xff0c;我发现很多内容创作者在收集小红书素材时都面临着相同的困境&#xff1a;想要批量保存笔记却只能逐篇操作&#xff0c;下载的图片要么带水印要么画质压缩&#xff0c;好不容易找到的优质文案还得手动复制…… 这些问题看似小事…

作者头像 李华