Portaudio не будет воспроизводить звук, если в данный момент воспроизводится другая программа - PullRequest
11 голосов
/ 15 мая 2011

У меня есть программа, использующая 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 Ответ

3 голосов
/ 21 мая 2011

Этот файл .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
}
...