私のアプリケーションでは、特定の mp3 ファイルの再生に使用するサウンド デバイスをユーザーが選択できるようにしたいと考えています。使用して
[DllImport("dsound.dll", EntryPoint = "DirectSoundEnumerateA", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
static extern void DirectSoundEnumerate(DSEnumCallback lpDSEnumCallback, IntPtr lpContext);
private static List<DirectSoundDeviceInfo> devices;
var devicesList = new List<DirectSoundDeviceInfo>();
DirectSoundEnumerate(new DSEnumCallback(EnumCallback), IntPtr.Zero);
PC にインストールされているすべてのサウンド デバイスのリストを取得しています。みたいな感じ:
{プライマリ サウンド ドライバー、スピーカー (Realtek ハイ デフィニション オーディオ)、realtek サウンド カード チャネル (5)、realtek サウンド カード チャネル (2)、realtek サウンド カード チャネル (1)、realtek サウンド カード チャネル (3)、realtek サウンド カード チャネル ( 4)}
メソッド PlaySound(4) を呼び出す場合。Realtekサウンドカードチャンネルでmp3を再生します(1)
mp3 ファイルを再生するには、naudio を使用します。
public void PlaySound(int deviceNumber)
{
//disposeWave();// stop previous sounds before starting
var waveReader = new NAudio.Wave.Mp3FileReader("Kalimba.mp3");
var waveOut = new NAudio.Wave.WaveOut();
waveOut.DeviceNumber = deviceNumber;
var output = waveOut;
output.Init(waveReader);
output.Play();
}
問題は、devicesList 内のサウンド デバイスの順序が、Windows のデバイスの順序と同じではないことです。
Windows の下のデバイスの順序は次のとおりです。 {スピーカー (Realtek High Definition Audio)、realtek サウンド カード チャネル (1)、realtek サウンド カード チャネル (2)、realtek サウンド カード チャネル (3)、realtek サウンド カード チャネル (4)、 realtek サウンド カード チャネル (5)}
メソッド PlaySound(4) を呼び出す場合。Realtekサウンドカードチャンネルでmp3を再生します(4)
したがって、DeviceNumber = 1 (deviceList の 2 番目のデバイスを参照) を選択すると、Windows でインデックス 1 を持つデバイスと同じではありません。
私の質問は、リストから正しいサウンドデバイスを選択できるように、デバイスリストでデバイスを並べ替えて、Windows で同じ並べ替えに一致させるにはどうすればよいですか? サウンドデバイスは通常どのように分類されていますか?
どんな助けでも本当に感謝しています..
前もって感謝します