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