【问题标题】:Configuring multiple devices in PortAudio: Invalid device error在 PortAudio 中配置多个设备:无效设备错误
【发布时间】:2016-01-16 17:07:13
【问题描述】:

此查询与 Portaudio 框架有关。在我问这个问题之前有一点背景知识:我正在开发 PortAudio 中的一个应用程序,以通过多声道(=8)设备输出音频。但是,我正在使用的设备并没有将自己暴露为单个 8 通道设备,而是在我的设备列表中显示为 4 个立体声设备。在寻找处理此问题的方法时,我了解到 PortAudio 中的 WinMME 支持多种设备。

现在,我浏览了相应的头文件(“pa_win_wmme.h”)并遵循了目前的建议。但是在调用 PA_OpenStream() 后,我得到了“无效设备”错误(错误号 -9996)。在上面提到的头文件中,他们实际上已经指定了在配置多个设备时使用的正确参数以避免此错误,但尽管遵循它们,我仍然得到错误。 所以我想知道是否有人遇到过类似的问题,以及我是否遗漏/错误配置了任何东西。

我在下面粘贴所需的sn-ps代码以供参考:

PaStreamParameters outputParameters;
PaWinMmeStreamInfo wmmeStreamInfo;
PaWinMmeDeviceAndChannelCount wmmeDeviceAndNumChannels;**
...
...
outputParameters.device = paUseHostApiSpecificDeviceSpecification;
outputParameters.channelCount = 8;
outputParameters.sampleFormat = paFloat32; /* 32 bit floating point processing */
outputParameters.hostApiSpecificStreamInfo = NULL;

wmmeStreamInfo.size = sizeof(PaWinMmeStreamInfo);
wmmeStreamInfo.hostApiType = paMME; 
wmmeStreamInfo.version = 1;
wmmeStreamInfo.flags = paWinMmeUseMultipleDevices;
wmmeDeviceAndNumChannels.channelCount = 2;
wmmeDeviceAndNumChannels.device = 3;
wmmeStreamInfo.devices = &wmmeDeviceAndNumChannels;
wmmeStreamInfo.deviceCount = 4;
outputParameters.hostApiSpecificStreamInfo = &wmmeStreamInfo;

设备id=3是通过

得到的
Pa_GetHostApiInfo( Pa_HostApiTypeIdToHostApiIndex( paMME ) )->defaultOutputDevice

我希望我的查询已经足够清楚了。如果需要,我们很乐意提供更多详细信息。

谢谢。

【问题讨论】:

    标签: portaudio


    【解决方案1】:

    我终于发现了错误:-) 多个设备的配置必须作为一个阵列进行。例如,在上述情况下 wmmeDeviceAndNumChannels 必须是 4 个数组,每个单独的 device 字段包含 4 个立体声设备中每个设备的相应设备索引。 channelCount 仍然是 2。outputParameters.channelCount 仍然必须是通道的总数,即 8。这样我就能够使用单个流运行应用程序,当然,没有任何错误与无效设备或无效通道数有关。:-)

    谢谢。

    【讨论】:

      【解决方案2】:

      根据上面粘贴的代码,您似乎正试图在单个 8 通道设备上调用 open。相反,您必须获取所有四个设备的 Pa 索引并调用 open 4 次。每个立体声设备一次。然后,您将需要维护 4 个交错立体声流。我的猜测是,将 channelCount = 8 更改为 channelCount = 2 将允许打开第​​一个流。

      【讨论】:

      • @trukvl.. 感谢您的回复。如果我使用单个设备,即如果我将 outputParameters.channelCount 设置为 2(如您所提到的)和 deviceCount 为 1,系统确实可以工作。唯一的问题是,它将是立体声输出,这当然是预期的。现在将其扩展为播放 8 声道(通过将立体声配置修改为问题中给出的)似乎会出现问题。我将尝试您关于打开 4 个流并返回的建议。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 2014-10-22
      相关资源
      最近更新 更多