我有一个使用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
Run Code Online (Sandbox Code Playgroud)
在写这个问题时,我也注意到maxOutputchannels的变化取决于是否有另一个程序试图播放声音.至少我认为这才是最重要的.我在关闭的另一个浏览器选项卡中有一个暂停的youtube视频,当我重新编写我的程序时,它打印出来:
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
Run Code Online (Sandbox Code Playgroud)
这个 .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
}
Run Code Online (Sandbox Code Playgroud)