2009-10-01 37 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集線器的哪個端口。

相關問題