2009-10-01 3 views
5

NAudioを使用して複数のサウンド出力アプリケーションを作成しようとしています。 8つのUSBサウンドカードがインストールされています。 NAudioでは8をすべて使用できますが、どのデバイスのインデックスがどのカードであるかを判断するためのパターンを理解することはできません。winmm.dllを使用しているときに、Windowsのサウンドデバイスの順序を決定するものは何ですか?

カードはさまざまなハードウェアに接続されるため、使用しているカードがわかっていることを確認することが重要です。

私はWMIを使用して情報をポーリングしようとしていますが、サウンドデバイスの順序を決定する情報は見つかりませんでした。

更新: この問題についての情報を記載するのを忘れました。サウンドカードは、12ポートのハブを介して接続されたすべてのUSBサウンドカードです。

答えて

3

デバイスの順序は、Windowsのすべてのバージョンの決定論的でないです。 Vista以上の場合、デバイスは一般的にはDSound GUID(多かれ少なかれ)で注文され、実質的にランダムになります。

+0

私はかなり考えていたが、私はそれを理解するためのハックを持っていると思う。 –

1

このMSDNの記事をご覧ください。これは、オーディオデバイスを列挙するためのDirectSoundを使用しています。

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

+0

コードにDirectXアセンブリを組み込む必要があるため、まだ試してみませんか。私はこれを試します他のすべてが失敗します。 –

2

WaveOutを使用しているとしますか? WaveOut.GetCapabilities(deviceNumber)を呼び出してデバイスの名前を取得することができます。これはあなたを助けるかもしれません。

+0

これは、すべて同じUSBサウンドカードではない場合に機能します。申し訳ありませんが、以前は言及していませんでした。しかし、ありがとう。 –

2

これは私がこれまでに思いついたものであり、私たちのために働くものです。

WMIを使用すると、Win32_SoundDeviceからDeviceIDを取得できます。次に、HKLM \ SYSTEM \ CurrentControlSet \ ENUM \ 'DeviceID'のレジスタにアクセスし、 "Driver"という名前の文字列値を取得できます。この値には、ClassGUIDと最後に数字が含まれます。

例:あなたは、あなたのすべてのデバイスと順番にそれらを鳴らすための最後の数*(15)*は、それがあることを0015

\ {4d36e96c-E325-11CE-BFC1-08002BE10318}をはがした場合デバイスがNAudioからリストされるようにするには、winmm.dllを使用します。また、これらのサウンドデバイスの場所は、同じキーのレジストリまたはDeviceIDを使用するWin32_PNPEntityのいずれかです。

私たちの場合、場所によって、サウンドデバイスが接続されているUSBハブのポートが決まります。

関連する問題