如何解决openFrameworks与其他音频应用程序之间的冲突?

时间:2011-06-19 06:25:28

标签: c++ audio concurrency openframeworks

当我尝试执行openFrameworks附带的audioOutputExample时,我得到了

  

RtApiAlsa :: getDeviceIno:snd_pcm_open   设备错误(hw:0,0),设备或   资源忙。

     

RtApiAlsa :: probeDeviceOpen:pcm device   (hw:0,0)不会打开输出。

     

RtApi ::一个流未打开!

     

进程返回0(0x0)执行   时间:3.462秒按ENTER进入   继续。

  • Rhythmbox正在播放
  • Rhythmbox最近玩过(约5秒前)
  • Firefox有一个包含Grooveshark的标签,无论是播放曲调还是暂停
  • Groovshark标签最近已关闭(约5秒前)
  • Firefox有一个带有Youtube视频的标签,无论是播放还是暂停
  • Youtube标签最近已关闭(约5秒前)

否则,该示例工作正常,即使我之前使用过Rhythmbox,Grooveshark或Youtube。

如何解决此冲突以允许同时使用audioOutputExample,例如Rythmbox。

P.S。我在Ubuntu 11.04上,使用openFrameworks_v0062_linux64_FAt ...

2 个答案:

答案 0 :(得分:2)

这只是猜测,因为我没有在Linux上使用OF,但我认为OF需要访问低级ALSA设备才能获得RT功能。因此,它不能与PulseAudio(或者他们现在使用的任何东西)共享设备,这允许音频设备在应用之间共享。您可以尝试查看JACK以在PulseAudio和您的ALSA程序之间进行多路复用。

答案 1 :(得分:1)

我找到了解决方案。问题是,我有两个内部声音设备注册 - HDMI和PCH。 HDMI设备始终指定为 card0 ,可以通过键入

进行检查
aplay -l 
进入终端。这将列出不同的设备。

然后我使用

更改了我的alsa配置
gksudo gedit /etc/modprobe.d/alsa-base.conf

并在最后添加

options snd-hda-intel index=-2

从而迫使HDMI被分配给card1而另一个设备被分配给card0。 另一种选择是

options snd-hda-intel id=PCH,HDMI index=0,1

分配卡片索引。但是,我在这里读到HDMI,PCH,这对每个人都不起作用。

注意此方法的详细信息取决于计算机中的设备。通过输入 aplay -l <​​/ strong>找到alsa已知的那些。