为什么 PortAudio 不能与其他音频程序很好地配合使用,或者我怎样才能做到这一点?

StackOverflow https://stackoverflow.com/questions/2351884

  •  23-09-2019
  •  | 
  •  

我正在尝试使用 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。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top