ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

音频调试

2022-05-29 16:35:17  阅读:200  来源: 互联网

标签:控件 音频 dai blog codec https PCM 调试


参考文档

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

https://blog.csdn.net/azloong/article/details/6536855
https://blog.csdn.net/lifei092/article/details/80990813
https://www.cnblogs.com/lamblabs/p/8566693.html
https://blog.csdn.net/u010164190/category_9494783.html
https://blog.csdn.net/kris_fei/category_6987006_2.html

https://www.kernel.org/doc/html/v4.18/sound/soc/dpcm.html
https://blog.csdn.net/DroidPhone/article/details/12793293
https://blog.csdn.net/sepnic/category_778492.html
https://www.cnblogs.com/linhaostudy/category/1145404.html
https://www.ibm.com/developerworks/cn/linux/l-cn-libmadmp3player/index.html

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

https://www.cnblogs.com/talkaudiodev/p/8506133.html 音频重采样

amr音频编码器介绍
https://www.cnblogs.com/huaping-audio/archive/2008/09/18/1293508.html
https://blog.csdn.net/dxpqxb/article/details/52912899

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

https://blog.csdn.net/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 也是如此。

标签:控件,音频,dai,blog,codec,https,PCM,调试
来源: https://www.cnblogs.com/bobfly1984/p/16324070.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有