Por que o Portaudio não joga bem com outros programas de áudio ou como posso fazê -lo?
Pergunta
Estou tentando escrever um aplicativo de áudio usando o Portaudio, mas se algum outro programa de áudio (geralmente o Firefox) estiver em execução no momento em que tento executar meu programa, recebo o seguinte erro:
PaHost_OpenStream: could not open /dev/dsp for O_WRONLY
PaHost_OpenStream: ERROR - result = -10000
An error occured while using the portaudio stream
Error number: -10000
Error message: Host error.
Obviamente, isso torna meu programa bastante inútil, pois não funcionará se outro programa estiver usando o som. Existe uma maneira de contornar isso ou eu simplesmente não deveria usar o Portaudio?
Solução
Você precisa escolher um dispositivo chamado "Pulse" para o Portaudio trabalhar com o Pulseaudio, que é o servidor de som usado para compartilhamento de placas de som nas maiores distribuições Linux atualmente. A mensagem de erro sugere que está tentando usar a interface OSS /DEV /DSP, que não suporta compartilhamento de cartões.
Você pode usar código como este para listar os dispositivos:
for (int i = 0, end = Pa_GetDeviceCount(); i != end; ++i) {
PaDeviceInfo const* info = Pa_GetDeviceInfo(i);
if (!info) continue;
printf("%d: %s\n", i, info->name);
}
Em seguida, forneça o número certo para abrir o parâmetro de fluxo.
Observe que você precisa de Portaudio v19. O V18 mais antigo apoiou apenas OSS.