android系统下使用alsa接口打开设备/dev/snd/pcmC0d0p 失败
乾坤幻影 2014-04-04 02:27:56 最近在安卓系统下调用alsa的函数库编写录音放音的接口,然后封装为JNI接口供java层调用。使用的开发版自带一个放音声卡,在系统中的设备节点是/dev/snd/pcmC0D0p.我在上层调用snd_pcm_open()打开这个设备的时候,总是提示设备忙,打开失败。后来查了原因是开发板启动的时候打开了这个设备用来播放提示音,没有关掉。这样的话如果我想使用自己写的应用程序,调用自己封装的音频接口直接调用alsa层的snd_pcm_open()来进行放音,岂不是无法实现了?
现在我的想法是
1.能不能通过某种方式获得系统启动时打开这个设备返回的句柄?然后我就可以用这个句柄操作这个设备了。
2.在执行自己写的应用程序之前,先close掉这个设备,然后重新打开。但问题是如1所说,得不到close()参数中的句柄。
3.能不能通过其他设备,如混音器,把我要播放的数据塞进这个设备中?个人感觉这个不靠谱。
4.找一个外接声卡,使用外界声卡播放。这个虽然可以实现,但是不符合实际应用,总不能有了开发板还要买个新声卡接上吧?再说了一个开发板再多配一个声卡,浪费。
我现在正在研究混音器相关的知识,看是否可以解决这个问题。
请了解的高手指教。。。