查看PCM设备列表
如果手机的音频系统正常工作,我们可以通过adb去查看系统中的所有音频设备文件。如下图所示:

- device type
设备类型,通常只有compr/hw/pcm这3种。从上图可以看到声卡会管理很多设备,PCM设备只是其中的一种设备。 - card index
声卡的id,代表第几块声卡。通常都是0,代表第一块声卡。手机上通常都只有一块声卡。 - device index
设备的id,代表这个设备是声卡上的第几个设备。设备的ID只和驱动中配置的DAI link的次序有关。如果驱动没有改变,那么这些ID就是固定的。 - capture/playback
只有PCM设备才有这部分,只有c和p两种。c代表capture,说明这是一个提供录音的设备,p代表palyback,说明这是一个提供播放的设备。
系统会在/proc/asound/pcm文件中列出所有的音频设备的信息,如果是肉眼查看,/proc/asound/pcm中的信息会更直观一些:

PCM设备文件的访问
查看PCM设备文件的属性,可看到它们都是字符型设备:

- struct pcm pcm_open(unsigned int card, unsigned int device, unsinged int flags, struct pcm_config config)
- int pcm_close(struct pcm* pcm)
- int pcm_write(struct pcm pcm, const void data, unsigned int count)
- int pcm_read(struct pcm* pcm, void* data, unsigned int count)
PCM设备的管理 —— PCM ID

USECASE与PCM ID的映射关系可以通过配置文件来修改,这样的好处就是所有产品可以使用同一套代码,差异的地方可以通过控制配置文件的内容就可以简单的区分开来,Audio HAL会解析这个配置文件,然后更新映射表内容。使用adb shell cat /system/etc/audio_platform_info.xml可以看到如下配置:

如上图,就会把USECASE_AUDIO_PLAYBACK_LOW_LATENCY这个使用场景的PCM ID更新为12。其他应用场景的PCM ID更新也是类似。
原文地址:https://www.cnblogs.com/chenzhizhong/p/6604405.html
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214637.html原文链接:https://javaforall.net
