共 14 篇文章
从 adev_create_audio_patch 到双线程 + 环形缓冲:讲清 HDMI-IN 建 patch、MS12 退出连续模式、 输入读 ALSA / 输出 out_write_new,以及 usecase 与 mixer 主辅缓冲如何切换。
从 ALSA loopback 采集多通道 Mic 原始声与播放参考信号(Ref),讲清数据来源、采集参数、通道布局、tinycap 抓取与拆分 / downmixer / 算法处理整条链路。
Google 远场占住 Built-In Mic 后,自研数字人/语音助手录不了音。通过新增 FM Tuner 输入设备、 放宽 mic mixPort 双开,并改 AudioPolicy 路由,实现两路同时取麦、各自唤醒。
做语音唤醒前,用标准测试音经喇叭播放、tinycap 录 Mic,再算 THD/% 与 dB。讲清环境、命令、拉数与 Sengpielaudio 换算表,以及和唤醒链路的关系。
以 Soundbar 为主机、Speaker 为从机,讲清 Multi-Room 场景、与 Multichannel 的边界、Snapcast 传输路径、蓝牙+Wi-Fi 配网,以及从 Aetheryal 验证到自研替换的路线。
自播自录 1_15kHz 查抗混叠:折痕判据、异常频谱长什么样、驱动加载顺序 pdm→loopback→resample,以及 loopbacka / loopbackb 与 16k/48k、resample 怎么配。
拆清 tvuiapp / tvbackground 如何经 IAetheryalAudio AIDL、MS12 stereo_pcm_output、libaetheryalaudiohal 拿到系统播放 PCM;重点写清 ConnectToSink 门控与调试属性。
LoopbackA 已被 DSPC 占用时,如何在 DTS 增加 LoopbackB,从 TDM-A(tdmoutA)回采 48 kHz / 2ch / 16bit 参考声,并完成编译烧录与 tinyplay/tinycap 验证。
从音量键到喇叭:Java 记 index 与刷 UI,Native 用 AudioPolicy 算 dB、AudioFlinger 做软音量, HAL 再落到芯片增益。讲清软音量 / 硬件音量,以及 TV 适配时常踩的点。
TV/Android 上用 benchmark 脚本记录机况,atrace 异步抓 sched/gfx/audio 等类别, 复现问题后导出 trace.bin,在 ui.perfetto.dev 里看各线程 CPU 占用。
Soundbar HDMI ARC 断开后本机喇叭突然最大声:从误判面板 Gain=1,到 APM 看到 index=100, 最终定位 AudioService.isFullVolumeDevice 误 OR 了 mHdmiSystemAudioSupported。
拆清 Soundbar 无线环绕 / 低音炮从硬件连上,到 App Bridge 定身份,再到 Dolby Calibration 加载 JSON、初始化 FlexConnect 的整条路径;回答 modelName、setDevices、连接状态三件事分别由谁负责。
双屏 TV 开 ACR 后 audio 服务崩溃:消融实验锁定 ENABLE_ACR_APP, 从 Scudo/ASan 踩内存追到 in_read 把 16→32 转换的字节数写成了 bytes 而非 bytes/2。
用一张分层图串起 Application → Framework → AudioFlinger/Policy → HAL → TinyALSA → Kernel: AndroidRuntime 注册、audioserver 启动、AudioPatch 与 port 结构。