Skip to content

Latest commit

 

History

History
141 lines (101 loc) · 5.85 KB

File metadata and controls

141 lines (101 loc) · 5.85 KB

🎵 Android Audio Skills

让 AI 像音频架构师一样理解 Android 音频系统 —— 从 App 到 HAL,从 Java 到 DSP。

一套专为 AI 编程助手打造的 Android 音频子系统知识库,帮你快速定位音频初始化失败、卡顿、路由异常等疑难问题。每篇技能都经过 AOSP 源码验证,提供完整的调用链、架构图和调试命令。


📦 技能列表

AudioFlinger 全景架构 —— 音频系统的"心脏"

  • 四层音频栈:应用 → Framework → Native → HAL
  • 四种 PlaybackThread:MixerThread / DirectOutputThread / OffloadThread / DuplicatingThread
  • 双混音策略:普通 Mixer vs FastMixer(SCHED_FIFO + Lock-free)
  • 完整数据流:播放路径 & 录音路径 & Ring Buffer 机制
  • 延迟分级:~5ms 极低延迟 → >100ms 省电模式
  • 调试速查:dumpsys / logcat / Perfetto 一键命令

AudioRecord 调用链追踪 —— 从一行 new AudioRecord() 到 HAL 的每一步

  • 10+ 层完整调用时序:Java → JNI → Native → AudioFlinger → AudioPolicy → HAL
  • 错误码 -22(BAD_VALUE)产生与传递路径
  • Engine 设备选择逻辑:蓝牙 → 有线 → USB → 内置 Mic 的优先级
  • QCOM HAL 加载机制:dlopenadev_openopen_input_stream
  • 电源状态影响:WAIT_FOR_VHAL 如何导致录音初始化失败

Android 15 车载音频焦点管理 —— 多音源协调的"交通指挥系统"

  • 四种焦点类型 + 四种通知类型,车载场景最佳响应策略
  • MediaFocusControl 仲裁机制:FocusStack LIFO 栈管理
  • 延迟焦点机制:通话中媒体请求挂起,通话结束自动恢复
  • Android 15 新特性:系统级自动 Duck(-12dBFS)、targetSdk 35+ 后台限制
  • 车载特有:多音区管理、CarAudioService 协同、安全告警最高优先级
  • 调试速查:dumpsys / logcat 一键诊断焦点冲突

Android 15 车载 AudioPolicyService 策略管理 —— 音频路由的"决策大脑"

  • 策略与执行分离架构:APS(决策) ↔ AudioFlinger(执行)
  • 三层配置体系:拓扑 XML + 策略规则 XML + 车载独立配置
  • 完整路由决策链:AudioAttributes → Strategy → DevicePriority → FinalDevice
  • 设备管理:连接/断开通知、Failover 机制、蓝牙 A2DP 特殊处理
  • ForceUse 强制路由 + 四种音频模式切换
  • Android 15 新特性:AIDL HAL 迁移、音量组路由绑定、CAP Engine 可配置引擎
  • 车载特有:多音区策略路由、CarAudioService 协同、car_audio_configuration.xml

✨ 为什么值得关注

特点 说明
📖 源码级精度 每处引用都标注了文件路径和行号,可直接跳转验证
🔍 问题驱动 从真实调试场景出发,而非教科书式罗列
🧩 AI 原生 为 AI 编程助手量身定制的结构化知识,触发即用
🎯 实战导向 每个技能都包含调试命令、常见问题诊断和排查思路

🚧 持续更新

本仓库会持续完善,计划覆盖的方向包括:

  • AudioTrack 播放流程详解
  • AudioPolicyService 路由策略分析
  • AAudio MMAP 低延迟路径
  • 蓝牙音频(A2DP / LE Audio)调用链
  • 音频焦点(AudioFocus)管理机制
  • 车载音频场景(CarAudioService)专题

💡 欢迎提 Issue 建议你关心的音频话题,或直接 PR 贡献!


📂 使用方式

将这些技能目录放入项目的 .trae/skills/ 下:

your-project/
└── .trae/
    └── skills/
        ├── android-audio-call-chain/
        │   └── SKILL.md
        ├── android-audioflinger-architecture/
        │   └── SKILL.md
        ├── android-car-audio-focus/
        │   └── SKILL.md
        └── android-car-audio-policy/
            └── SKILL.md

AI 助手会在分析音频相关问题时自动调用对应技能。


📚 源码基础

基于 Android 15(API Level 35) AOSP 源码分析,关键路径:

# === AudioFlinger 架构(Native 执行层)===
frameworks/av/services/audioflinger/     # AudioFlinger 服务(混音、线程、Track)
frameworks/av/media/libaudioclient/      # 客户端 Native 库(AudioTrack/AudioRecord)
frameworks/av/media/audioserver/         # audioserver 启动入口

# === AudioPolicyService 策略管理(Native 决策层)===
frameworks/av/services/audiopolicy/      # 音频策略服务(APM、Engine、路由)
frameworks/av/services/audiopolicy/enginedefault/src/  # 默认 Engine 实现

# === 音频焦点 & 系统服务(Java 层)===
frameworks/base/services/core/java/com/android/server/audio/  # AudioService、MediaFocusControl
frameworks/base/media/java/android/media/                     # AudioManager 客户端 API

# === 车载音频服务 ===
packages/services/Car/service/src/com/android/car/audio/      # CarAudioService(多音区、车载焦点)
packages/services/Car/service/src/com/android/car/power/      # CarPowerManagementService(电源状态)

# === HAL 接口与实现 ===
hardware/interfaces/audio/               # Audio HAL 接口定义(AIDL)
hardware/qcom/audio/hal/                 # QCOM HAL 实现

# === 策略配置文件 ===
/vendor/etc/audio_policy_configuration.xml        # 音频拓扑配置(mixPort/devicePort/route)
/system/etc/audio_policy_engine_configuration.xml # 引擎策略规则(ProductStrategy)
/vendor/etc/car_audio_configuration.xml           # 车载音频配置(音区/音量组/CAP Engine)

Made with ❤️ for Android audio developers