如果当前播放另一个节目,Portaudio将无法播放声音

我有一个使用PortAudio的程序。 目前我正在使用Pa_OpenDefaultStream(&stream, 0, 2, paFloat32, 44100, 256, audioCB, udata) ,但是当我编译并运行我的程序时,如果另一个程序当前正在运行(如音乐播放器)。 错误字符串是PortAudio error: Device unavailable

我想我需要运行Pa_OpenStream ,但是我不确定应该通过什么来使它与其他程序一起运行。

作为参考,我尝试打印出可用设备上的信息,但我不知道如何处理这些信息。

 Device 0 name /dev/dsp hostAPI 0 maxInputChannels 16 maxOutPutChannels 0 defaultLowInputLatency 0.011610 defaultLowOutputLatency -0.117208 defaultHighInputLatency 0.046440 defaultHighOutputLatency 0.000000 defaultSampleRate 44100.000000 Device 1 name /dev/dsp1 hostAPI 0 maxInputChannels 16 maxOutPutChannels 0 defaultLowInputLatency 0.011610 defaultLowOutputLatency -0.117208 defaultHighInputLatency 0.046440 defaultHighOutputLatency 0.000000 defaultSampleRate 44100.000000 Default Device -1 

在写这个问题时,我也注意到maxOutputchannels的变化取决于是否有另一个程序试图播放声音。 至少我认为这是有所作为的。 我在关闭的另一个浏览器选项卡中有一个暂停的youtubevideo,当我重新编写我的程序时,它打印出来:

 Device 0 name /dev/dsp hostAPI 0 maxInputChannels 16 maxOutPutChannels 16 defaultLowInputLatency 0.011610 defaultLowOutputLatency 0.011610 defaultHighInputLatency 0.046440 defaultHighOutputLatency 0.046440 defaultSampleRate 44100.000000 Device 1 name /dev/dsp1 hostAPI 0 maxInputChannels 16 maxOutPutChannels 0 defaultLowInputLatency 0.011610 defaultLowOutputLatency 0.011610 defaultHighInputLatency 0.046440 defaultHighOutputLatency 0.046440 defaultSampleRate 44100.000000 Default Device 0 

此.asoundrc文件应允许您使用ALSA声音使用软件混音。 您可能需要更改pcm "hw:1,0"行以匹配您的硬件。 此示例来自ALSA Wiki

 pcm.!default { type plug slave.pcm "dmixer" } pcm.dmixer { type dmix ipc_key 1024 slave { pcm "hw:1,0" period_time 0 period_size 1024 buffer_size 4096 rate 44100 } bindings { 0 0 1 1 } } ctl.dmixer { type hw card 0 }