Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用winmm.dll时,什么决定了windows中声音设备的顺序?_C#_Audio_Wmi_Naudio_Winmm - Fatal编程技术网

C# 使用winmm.dll时,什么决定了windows中声音设备的顺序?

C# 使用winmm.dll时,什么决定了windows中声音设备的顺序?,c#,audio,wmi,naudio,winmm,C#,Audio,Wmi,Naudio,Winmm,我正在尝试使用NAudio创建一个多声音输出应用程序。我们安装了8个USB声卡。NAudio允许我使用全部8个,但我无法找出一种模式来确定哪个设备索引是哪个卡 这些卡将连接到不同的硬件上,因此确保您知道正在使用的卡很重要 我一直在尝试使用WMI轮询信息,但似乎找不到任何决定声音设备顺序的信息 更新: 我忘了包括一些关于这个问题的信息。这些声卡都是通过12端口集线器连接的USB声卡。看看这篇MSDN文章。它使用DirectSound枚举音频设备: 对于所有版本的Windows,设备的顺序都是不确定

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

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

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

更新:
我忘了包括一些关于这个问题的信息。这些声卡都是通过12端口集线器连接的USB声卡。

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


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

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

这是我到目前为止提出的,它对我们有用

使用WMI,您可以从Win32\u SoundDevice获取设备ID。然后使用它,您可以访问位于HKLM\SYSTEM\CurrentControlSet\ENUM'DeviceID'的注册表,并获取名为“Driver”的字符串值。此值包含ClassGUID以及末尾的数字

示例:{4d36e96c-e325-11ce-bfc1-08002be10318}\0015

如果您去掉所有声音设备的最后一个数字*(15)*并对其进行订购,则这些设备从NAudio使用winmm.dll列出的顺序。这些声音设备还有一个位置,可以在注册表中的同一个键处,也可以使用DeviceID从Win32_pPentity获得


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

如果它们不是完全相同的USB声卡,这将起作用。对不起,我以前没提过。谢谢。我还没有尝试过这个,因为我必须将DirectX程序集引入到代码中。我会试试看,其他的都失败了。这和我想的差不多,但我想我有办法弄明白。