1

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

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

我在下面粘贴所需的代码片段以供参考:

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

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

谢谢。

4

2 回答 2

1

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

谢谢。

于 2013-10-15T08:03:18.437 回答
0

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

于 2013-10-12T01:15:20.070 回答