为什么 PortAudio 不能与其他音频程序很好地配合使用,或者我怎样才能做到这一点?
题
我正在尝试使用 PortAudio 编写音频应用程序,但如果在我尝试运行我的程序时正在运行任何其他音频程序(通常是 Firefox),我会收到以下错误:
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.
显然,这使得我的程序毫无用处,因为如果另一个程序使用声音,它就无法工作。有没有办法解决这个问题,或者我不应该使用 PortAudio?
解决方案
您需要为 PortAudio 选择一个名为“pulse”的设备才能与 PulseAudio 配合使用,PulseAudio 是当今最大的 Linux 发行版上用于声卡共享的声音服务器。错误消息表明它正在尝试使用OSS /dev/dsp 接口,该接口根本不支持卡共享。
您可以使用如下代码来列出设备:
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);
}
然后在流参数中向 OpenStream 提供正确的编号。
请注意,您需要 PortAudio v19。较旧的 v18 仅支持 OSS。
不隶属于 StackOverflow