在我的应用程序中,我想让用户有机会选择他想使用哪个声音设备来播放给定的 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);
我正在获取我的电脑上安装的所有声音设备的列表。喜欢:
{Primary Sound Driver, Speakers (Realtek High Definition Audio), 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下设备的顺序为:{Speakers(Realtek High Definition Audio)、realtek声卡通道(1)、realtek声卡通道(2)、realtek声卡通道(3)、realtek声卡通道(4)、 realtek 声卡频道(5)}
如果调用方法 PlaySound(4); 它将在 realtek 声卡通道上播放 mp3 (4)
因此,如果我选择 DeviceNumber = 1(指的是我的 deviceList 中的第二个设备)它与 windows 中索引为 1 的设备不同..
我的问题是:如何对设备列表中的设备进行排序,以便它们在 Windows 下匹配相同的排序,以便我可以从列表中选择正确的声音设备?音响设备通常是如何分类的?
任何帮助都非常感谢..
提前致谢