音频调试

发布时间:2022-06-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了音频调试脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

参考文档

https://www.alsa-PRoject.org/wiki/ASoC https://www.alsa-project.org/wiki/DAPM#Control_TyPEs

https://blog.csdn wangt.cc /azloong/article/details/6536855 https://bLOG.csdn wangt.cc /lifei092/article/details/80990813 https://www wangt.cc blogs wangt.cc /lamblabs/p/8566693.htML https://blog.csdn wangt.cc /u010164190/category_9494783.html https://blog.csdn wangt.cc /kris_fei/category_6987006_2.html

https://www.kernel.org/doc/html/v4.18/sound/soc/dpcm.html https://blog.csdn wangt.cc /DROIdPhone/article/details/12793293 https://blog.csdn wangt.cc /sepnic/category_778492.html https://www wangt.cc blogs wangt.cc /linhaostudy/category/1145404.html https://www.ibm wangt.cc /developerworks/cn/linux/l-cn-libmadmP3player/index.html

https://blog.csdn wangt.cc /weixin_42285618/article/details/107499379?utm_medium=distribute.pc_relevant.none-task-blog-tITle-14&spm=1001.2101.3001.4242 https://blog.csdn wangt.cc /u011330638/article/details/81107312

https://www wangt.cc blogs wangt.cc /talkaudiodev/p/8506133.html 音频重采样

amr音频编码器介绍 https://www wangt.cc blogs wangt.cc /huaping-audio/Archive/2008/09/18/1293508.html https://blog.csdn wangt.cc /dxpqxb/article/details/52912899

https://blog.csdn wangt.cc /xianglingchuan/article/details/54092584 pcm和arm转化

https://blog.csdn wangt.cc /leixiaohua1020/article/details/18893769 大神博客

调试备注

1:PCM FYNC clock频率 就是 采样率 samplerate。

2:switch类型的widget注册时,其所属controls注册时,控件名字是widget name + control name。通过SND_SOC_DAPM_MIXER_NAMED_CTL宏注册的widget,其所属controls注册时,控件名字就是control name,通过SND_SOC_DAPM_MIXER宏注册widget,其所属controls注册时,控件名字是widget name + control name。

3:mux类型的widget注册时,只能定义一个control,其所属control注册时,控件名字是widget name。

4:定义枚举类型的控件,控件值不能是数字字符串。因为值是数字字符串的话,amix应用程序会按照数值类型控件处理而不是枚举类型控件处理。 例如:AUX PCM BClk { rate_128000=0, rate_256000=1, 512000=2, 1024000=3, 2048000=4, 4096000=5 } adb shell amix 'AUX PCM BClk' rate_128000 ok adb shell amix 'AUX PCM BClk' 512000 error

5: 通过dts pinctrl可以确认adsp AFE提供几个端口(几路bus),每个端口涉及的GPIO编号。 例如端口1可以配置成AUX PCM 格式,端口1也可以配置成Primary MI2S格式。 端口2配置成SEC AUX PCM格式,端口2也可以配置成SEC M2C格式。

6:dts定义的pinctrl,pinctrl-names如果是default,其对应的pinctrl-x句柄会由pinctrl core执行设置pins状态。

7:codec DAI 时钟配置操作通常由machine driver的 snd_soc_dai_link.snd_soc_ops.hw_params调用。   snd_soc_dai_driver.snd_soc_dai_ops.set_Sysclk  snd_soc_dai_driver.snd_soc_dai_ops.set_pll

8:高通平台把codec分为 internal codec 和 external codec,internal codec指的是PMIC internal codec,external codec指的是通过MI2S接口连接的codec,例如WCD系列、NAU系列等。

9:aplay,arec进程打开pcm stream时,在Pcm_prepare函数执行失败可能原因? 错误日志: cannot prepare channel: errno =-22 Arec:Failed in pcm_prepare

原因分析:pcm_prepare会触发驱动执行pcm prepare操作,prepare操作触发DAPM机制查找合法的完整路径,如果没有找到,就会返回失败。 解决方案: 在执行arec之前 执行 amix 'Voice_Tx Mixer AUX_PCM_TX_Voice' 1

结论:只有通过mixer kcontrols设置好完整路径后,才能通过aplay或arec打开pcm stream。

10:控制widget的寄存器通常情况下占一个bit,0关闭1打开电源。widget初始电源状态是通过读取寄存器获取的。当触发dapm机制,该widget在完整路径上时,此widget自动上电。

11:控件分为普通控件和 dapm 控件,dapm控件相应的path实例connected状态 是通过读取dapm控件寄存器值决定的。值0代表未连接,非0代表已连接。

12:一般情况下audio使用I2S硬件接口,voice使用PCM硬件接口,但是voice也可以使用I2S接口。平台侧DAI使用I2S或者PCM接口取决于 codec侧DAI 配置成I2S或PCM。在dai_link里定义的dai_fmt,在声卡系统初始化时候会使用dai_fmt分别设置cpu dai 和 codec dai。I2S接口和PCM接口在协议即时序上是不一样的。

13:cannot open device /dev/snd/pcmC0D2p, errno 16意味着PCM设备已经被其它进程打开。 errno -22意味音频通路没有设置,dapm机制 找不到完整路径。

14:AMR-NB is a narrowband speech codec, encoding speech in a band From about 300 Hz to 3400 Hz at rates between 4.75 kbps and 12.2 kbps 采样率表示一秒钟采用多少个样本,更重要的含义是决定了采样的频带范围。 The voice topology is a combination of PCM processing blocks in the Tx and Rx path

15:VoLTE→CS Voice 切换, Single Radio Voice Call Continuity (SRVCC)

16:音频处理软 件 Audacity

17:amix/mux kcontrols控件打开和关闭的初始状态,可以通过检查codec寄存器的初始值确认打开还是关闭。

18:ENUM枚举类型的kcontrol,可以设置字符串值,也可以设置整形值,整形值是字符串数组的index。

19:后端DAI LINK的codec name由codec的i2c 驱动name、I2C bus号、i2c slave addr构成。codec_name = “i2c->driver->name.i2c_bus-i2c->addr"。

20:定义的DAPM kcontrol如果在audio route路由表不使用,这个kcontrol不会向用户空间提供控制接口,也就是说amix命令无法查找到此kcontrol。

21:DAPM context上下文 DAPM context上下文可以理解成power domain,DAPM相关的路径扫描、widgets上下电等操作只局限在domain内。 asoc core把DAI实例、platform实例、包含codec DAI的codec实例以及驱动都抽象成 component实例和component驱动。 每个component实例都是一个DAPM context上下文。

22:通过SOC_DOubLE_R_TLV类似的宏定义的都是双寄存器类型的kcontrol,此控件定义了两个寄存器,分别控制左右声道。amix命令必须对两个寄存器分别进行设置,例如: amix 'LR Mic PAREN' 3 3。如果写成 amix 'LR Mic PAREN' 3命令,则设置不起作用。目前MDM9607高通平台的amix应用程序只支持 SNDRV_CTL_TLVT_DB_SCALE 类型的tlv,还不支持 SNDRV_CTL_TLVT_DB_RANGE 类型的 tlv。

23:BE DAI LINK有 ignoring suspend和PM down time两个标志,这两个标志支持BE工作在hostless mode,在hostless mode下,host CPU不传输PCM数据。 hostless mode支持host CPU进入sleep,然而DSP、MODEM DAI、BE DAI任然处于工作中。

24:BE DAI link可以把codec、codec dai、cpu dai设置为dummy device。dummy device意味着这些components不执行任何操作,components操作由外部的驱动模块控制。

25:在machine驱动,如果定义了snd_soc_dai_link.dai_fmt字段,asoc core在初始化期间就会调用codec dai驱动的set_fmt()回调函数。

26:语音通话上下行无声问题? 通常情况下,控制platform侧 voice path的两个控件SEC_MI2S_RX_Voice Mixer CSVoice和Voice_Tx Mixer SEC_MI2S_TX_Voice应该分别独立的 控制下行通路和上行通路,但是事实并非如此。只要有其中一个控件设置失败,上下行通路的配置都不会起作用,即造成上下行无声。volte call 也是如此。

脚本宝典总结

以上是脚本宝典为你收集整理的音频调试全部内容,希望文章能够帮你解决音频调试所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。