2009-10-01 34 views
5

我正在尝试使用NAudio创建一个多声音输出应用程序。我们安装了8个USB声卡。 NAudio让我使用全部8个,但我无法弄清楚确定哪个设备索引是哪个卡的模式。当使用winmm.dll时,什么决定了windows中声音设备的顺序?

这些卡将被连接到不同的硬件,因此确保您知道您正在使用哪张卡很重要。

我一直在试图使用WMI轮询信息,但我似乎无法找到任何信息,确定声音设备的顺序。

更新: 我忘了提供有关此问题的一些信息。声卡是通过12端口集线器连接的所有USB声卡。

回答

3

设备的顺序是不确定性的所有Windows版本。对于Vista及以上版本,设备通常由DSound GUID(或多或少)订购,因此它们实际上是随机的。

+0

几乎我在想什么,但我想我有一个黑客来弄清楚。 – 2009-10-02 16:12:53

2

我假设你正在使用WaveOut?你可以调用WaveOut.GetCapabilities(deviceNumber)来获取设备的名称,这可能会帮助你。

+0

如果他们不是全部相同的USB声卡,这将工作。对不起,我之前没有提到过。不过谢谢。 – 2009-10-02 16:11:22

2

这就是我到目前为止的想法,它适用于我们。

使用WMI可以从Win32_SoundDevice获取DeviceID。然后使用它可以访问HKLM \ SYSTEM \ CurrentControlSet \ ENUM \ DeviceID上的注册表并获取名为“Driver”的字符串值。该值在最后包含ClassGUID加上一个数字。

实施例:{4d36e96c-E325-11CE-BFC1-08002BE10318} \ 0015

如果去掉这最后数*(15)*所有的你的声音的设备和命令他们,也就是命令使用winmm.dll从NAudio中列出设备。这些声音设备也有一个位置,可以在同一个密钥的注册表中或使用DeviceID从Win32_PNPEntity中获取。

在我们的案例中,位置让我们确定声音设备插入的USB集线器的哪个端口。

相关问题