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.找一个外接声卡,使用外界声卡播放。这个虽然可以实现,但是不符合实际应用,总不能有了开发板还要买个新声卡接上吧?再说了一个开发板再多配一个声卡,浪费。

我现在正在研究混音器相关的知识,看是否可以解决这个问题。
请了解的高手指教。。。
...全文
1771 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoxiao_bit 2015-03-23
  • 打赏
  • 举报
回复
请问楼上的,解决了吗?我也碰到了这个问题,像二楼一样设置提示找不到相关设备,是不是在哪里进行了映射?
恒赌东道 2014-07-10
  • 打赏
  • 举报
回复
你好!我遇到了和你类似的情况!看到很多应用程序都是直接指定打开的设备为“default”,我查看资料,基本大家都是“default”,吐槽一下,为什么人家官方给出一个参数default,后面就一直在使用这个参数,就不能变一下么?各种博客都是这个参数。我不知道楼主最后是怎么解决这个问题的!我现在也是在开发板上安装了2个声卡,现在想指定特定的声卡去播放,遇到了和楼主一样的情况,我把default改为/dev/snd/pcmC0D0p.发现出错,是这个参数不能这么设定?

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧