此查询与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 = 3Pa_GetHostApiInfo( Pa_HostApiTypeIdToHostApiIndex( paMME ) )->defaultOutputDevice
我希望我的查询足够清晰。如果需要,将很乐意提供更多详细信息。
感谢。
答案 0 :(得分:1)
我终于弄明白了这个错误:-)
必须将多个设备的配置设置为阵列。例如,在上述情况中
wmmeDeviceAndNumChannels
必须是4的数组,每个 device 字段包含4个立体声设备中每个设备的相应设备索引。 channelCount 仍为2. outputParameters.channelCount
仍然必须是通道的总数,即8.通过这个,我能够使用单个流运行应用程序,当然,没有任何与无效设备或无效通道数相关的错误。: - )
感谢。
答案 1 :(得分:0)
根据上面粘贴的代码,您似乎试图在单个8通道设备上调用open。相反,你必须得到所有四个设备的Pa索引,并打开4次打开。每个立体声设备一次。然后,您将有4个交错的立体声流进行维护。我的猜测是将channelCount = 8更改为channelCount = 2将允许第一个流打开。