简介:CSDN博客专家、《Android系统多媒体进阶实战》作者博主新书推荐:《Android系统多媒体进阶实战》🚀Android Audio工程师专栏地址:Audio工程师进阶系列【原创干货持续更新中……】🚀Android多媒体专栏地址:多媒体系统工程师系列【原创干货持续更新中……】🚀专题一 二:AAOS车载系统+AOSP14系统攻城狮入门视频实战课🚀专题三:Android14 Binder之HIDL与AIDL通信实战课🚀专题四:Android15快速自定义与集成音效实战课🚀专题五:Android15音频策略实战课🚀专题六:Android15音频性能实战课(无声/杂音/断音/爆音实战案例)🚀人生格言:人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.更多原创,欢迎关注:Android系统攻城狮🍉🍉🍉文章目录🍉🍉🍉🌻1.前言🌻2.开发需求🌻3.解决方案3.1 module-alsa-sink加载方式3.2 module-alsa-sink在播放流程中的位置🐓4.实战案例4.1 创建一个最基本的ALSA sink4.2 使用sink_name自定义播放设备名称4.3 hw和plughw的区别4.4 指定采样率4.5 指定采样格式、声道和channel map4.6 设置fragment Buffer4.7 tsched调度模式4.8 调整tsched Buffer4.9 mmap模式4.10 设置为默认sink4.11 把已有播放流迁移到ALSA sink4.12 同时创建多个ALSA sink4.13 动态加载和卸载module-alsa-sink4.14 查看sink详细状态4.15 查看ALSA设备是否真正被打开4.16 查看真实播放链路4.17 查看module-alsa-sink日志4.18 嵌入式固定播放链路配置🌻5.常见问题定位5.1 module-alsa-sink加载失败怎么办?5.2 sink创建成功,为什么没有声音?5.3 sink一直显示SUSPENDED怎么办?5.4 tsched=yes播放卡顿,tsched=no正常怎么办?5.5 mmap=yes失败怎么办?5.6 为什么我手动创建了sink,又出现另一个相同声卡sink?5.7 设置了rate=48000,为什么应用还是44100Hz?5.8 为什么设置default sink后已有应用没切过来?5.9 播放过程中频繁underrun怎么办?🌻6.总结🌻1.前言本篇目的:Pulseaudio进阶开发之module-alsa-sink实战案例1.module-alsa-sink:主要负责把一个ALSA PCM播放设备封装成PulseAudio的sink对象,让应用创建的sink-input最终可以通过这个sink把PCM音频数据写入ALSA声卡。简单理解:应用播放流 ↓ sink-input ↓ module-alsa-sink创建的sink ↓ ALSA PCM ↓ 声卡驱动 ↓ 扬声器/耳机/HDMImodule-alsa-sink特别适合:1.嵌入式系统固定声卡 2.手动创建指定ALSA播放设备 3.绕过自动设备发现进行问题定位 4.验证PulseAudio→ALSA播放主链路 5.调试采样率、声道、Buffer、tsched和mmap🌻2.开发需求通过module-alsa-sink手动创建PulseAudio播放设备,控制底层ALSA PCM、采样参数、Buffer、调度模式和设备名称,让播放链路更可控。实际开发中常见需求: