Android常用的音频驱动节点介绍

笔者主要是做Audio Framework层的系统开发工作,公司属于音视频会议行业,在定位解决音频方面的问题时,为了能大致定位问题到底是出在音频驱动层以下,还是Framework层,特将常用的音频驱动节点(功能主要涉及播放和录音)的调试方法记录下来备用。

查看设备加载的声卡信息:cat /proc/asound/cards

我司的设备上主要有2张声卡0和1,0是主板自带的,主要使用的是其Speaker;1是USB MIC Bar(注意这里使用的MIC 并非主板上默认的mic跟手机等设备还有区别

查看声卡下挂载的逻辑设备信息:ls -al /dev/snd

声卡下的逻辑设备包括控制器,定时器,音序器和PCM设备等,PCM设备又细分为录音和播放设备,其中录音设备是CxDxc(c是capture),播放设备是CxDxp(p是Playback),中间的两个xx表示第X张声卡的第X个设备。

可以看到我司的声卡0上有多个录音和播放设备,声卡1只有一个录音设备 pcmC1D0c 其实USB Mic 就是从该节点读取的录音数据;当张声卡下面有多个逻辑设备时,要根据自己产品的实际情况来确定到底哪个节点用于播放,哪个节点用于录音,下面的例子笔者以自己公司产品为例,读者记得根据自己的产品更换第X张声卡的第X个设备等参数,千万别把这2个参数直接copy过去!!!

查看录音节点的状态:cat /proc/asound/card1/pcm0c/sub0/status

 可以看到这时是正在录音状态,重复执行上述命令可以看到,这些数值是一直在不断增大的,尤其看hw_ptr 据说这是音频数据的读指针。

若没有录音,则获取状态时是close状态

查看播放设备节点的状态:cat /proc/asound/card0/pcm1p/sub0/status

 上面是播放的状态,若不断有音频播出,重复执行上述指令,数值仍然会变大,尤其是hw_ptr写指针的值,会不断增长,若暂时没有声音输出,值将保持不变。

 同样,若没有播放,则该节点是处于colse状态

使用tinyalsa工具测试录音/播放功能:

录音(-D 表示第几张声卡 ,-d表示声卡的第几个逻辑设备,再就是声道数,采样率,采样精度):tinycap /sdcard/test.pcm -D 1 -d 0 -c 8 -r 16000 -b 16 -p 768 -n 10

播放(仅支持wav格式,容器格式mp3,aac等不支持):tinyplay /sdcard/song.wav  -D 0 -d 1

总结:通过这些音频驱动节点调试的手段,能大致定位音频问题出在驱动层以下,还是系统层,是辅助定位问题的有效手段,各位网友们看着随时取用~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值