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

时间:2011-05-15 05:21:30

标签: c 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的变化取决于是否有另一个程序试图播放声音。至少我认为这是有所作为的。我在关闭的另一个浏览器选项卡中有一个暂停的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

1 个答案:

答案 0 :(得分:3)

此.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
}