Qualcomm 音频学习一
Qualcomm Audio HAL 音频通路设置
这两个参考文档逻辑特别清晰,我的这篇文章就是仿照他们的分析整理目前使用的mixer_paths.xml文件
处理器:sdm660
音频模块:PM660L
高通音频框架大体分为以下四个部分:1
音频前端(FE)
音频后端(BE)
DSP
音频设备(Audio Device)
FE PCMs:
deep_buffer
low_latency
mutil_channel
compress_offload
audio_record
compress_record
BE DAIs:
SLIM_BUS *2
SLIM_BUS *1 (WCD装用)
3 MI2S (2 ×data) interfaces
1 MI2S (4 ×data) interface
SoundWire interface
Audio Device
speaker
mic
【注】BE DAI一般是用于连接外部的音频器件的接口,特殊情况如first MI2S可用于连接内部的digital codec。
目前我的项目只使用了两个audio devices
usecase 通俗表示音频场景,对应着音频前端,比如:
播放:
deep_buffer:音乐、视频等对时延要求不高的放音场景
low_latency:按键音、触摸音、游戏背景音等低延时的放音场景
mutil_channel:多媒体播放。和hdmi相关
compress_offload:mp3、flac、aac等格式的音源播放场景,这种音源不需要软件解码,直接把数据送到硬件解码器(aDSP),由硬件解码器(aDSP)进行解码
录制:
record:普通录音场景
compress_record:待了解
查看usecase 和 device定义
usecase : audio_hw.h
device : platform.h
简单的来说,就是将音频前端(FE)经过音频后端(BE),与音频设备(Audio Device)连接起来。
(FE <=> BE <==> Devices)
usecase 通过路由与音频设备相关联。其配置一般放在某个 xml 文件,以 SDM660 为例,其放在 mixer_paths_mpos.xml 文件中。该文件中的配置,又称为音频控件配置。
音频控件配置:
在高通 bring up 音频的时候,一般不会先去修改 mixer_paths.xml 文件,而是先使用以下几个工具,进行通路配置验证:
tinymix : 配置音频路由
tinycap: 录音
tinyplay: 播放
查看下mixer_paths_mpos.xml文件中的定义
<path name="speaker">
<ctl name="INT0_MI2S_RX Channels" value="One" />
<ctl name="RX3 MIX1 INP1" value="RX1" />
<ctl name="Speaker Boost" value="ENABLE" />
<ctl name="SPK" value="Switch" />
path>
1、设置通道数目
name=“INT0_MI2S_RX Channels” value=“One”
分析:first MI2S的输出通道数为1
2、选择输入信号
name=“RX3 MIX1 INP1” value=“RX1”
分析:SPK 以内部的 Rx3 Mix1 作为 mixer 作为输入,在 mixer 端又以 mixer的 Rx1 作为输入
3、Speaker使能
name=“Speaker Boost” value=“ENABLE”
分析:打开PM660L中和speaker相关的boost
Boost主要是作用于speaker的放大器,用于驱动上图黄色的三角形(功放)
4、外部speaker硬件
name=“SPK” value=“Switch”
分析:代码的第五行中"SPK"是实际的speaker,这个就是我们在前面的看到的那两个SPKR信号接到连接器后,连接器接到speaker硬件
<path name="adc1">
<ctl name="ADC1 Volume" value="6" />
<ctl name="DEC1 MUX" value="ADC1" />
<ctl name="ADC1_INP1 Switch" value="1" />
path>
<path name="speaker-mic">
<path name="adc1" />
<ctl name="IIR1 INP1 MUX" value="DEC1" />
path>
1、调节输入音量
name=“ADC1 Volume” value=“6”
name=“ADC1 Volume” value=“6”
分析:红色的是放大器,用于调节音量,这里将音量调节为6,看下它的范围
需要注意的是这里的value不一样要看该xml文件的path有没有被使用
2、选择通路
name=“DEC1 MUX” value=“ADC1”
分析:这里选择ADC1信号,就是mic1传入时经过的ADC1
3、打开mic1
name=“ADC1_INP1 Switch” value=“1”
分析:推测是外接mic1的control控件
4、IIR滤波信号选择
name=“IIR1 INP1 MUX” value=“DEC1”
分析:IIR1的输入信号只有DEC1
小结:
则整个外部mic的音频链路可以简化为:
mic1 -> ADC1 -> DEC1 -> IIR1
IIR1信号接到三个RX path上,具体看该RX path上的mix1怎么设置,如下图就是将IIR1从RX1的mix接出去到TX_sd1上
在确定通路没有问题的情况下,再将 tinymix 的参数导入到 mixer-path.xml 对应的音频控件中。并将该 mixer-path.xml push 到 /etc/ 目录下替换原来的文件,然后重启设备,通过系统 apk 进行测试。
https://blog.csdn.net/azloong/article/details/79383323 ↩︎
https://blog.csdn.net/q1075355798/article/details/80657365 ↩︎