使用winmm.dll时,窗口中声音设备的顺序是什么?

时间:2009-10-01 18:06:34

标签: c# audio wmi naudio winmm

我正在尝试使用NAudio来创建多声音输出应用程序。我们安装了8个USB声卡。 NAudio允许我使用全部8但我无法找出用于确定哪个设备索引是哪个卡的模式。

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

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

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

4 个答案:

答案 0 :(得分:3)

对于所有版本的Windows,设备的顺序都是不确定的。对于Vista及更高版本,这些设备通常按DSound GUID(或多或少)排序,因此它们实际上是随机的。

答案 1 :(得分:2)

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

答案 2 :(得分: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集线器的哪个端口。

答案 3 :(得分:1)

看看这篇MSDN文章。它使用DirectSound枚举音频设备:

http://msdn.microsoft.com/en-us/library/bb318674(VS.85).aspx