我正在使用NAudio库来测试基于Win的PC上的音频输出设备。现在,当我启动应用程序时,一切都很好,直到我添加或删除新的音频设备--例如将耳机插入耳机音频插孔。var devs = NAudio.Wave.DirectSoundOut.Devices
我看了一下设备的名字,确定它的索引--在 "设备 "列表中。IEnumerable devs
但当我设置了所需的设备号,
_nAudioSoundOut = new NAudio.Wave.WaveOut() { DeviceNumber = wantedDeviceIndex};
然后启动并播放:
_nAudioSoundOut.Init(_mp3Reader);
_nAudioSoundOut.Play();
然后一些设备似乎被混淆了(交换).是我遗漏了什么,做错了什么,还是我发现了一个错误?
是的,我确保,我索引适当的设备由它的名字,是的,我没有考虑-1的索引,因为-1st是默认的Windows设备,在列表中的第一个实际上是0。
谢谢你!
问题是,我使用的是静态设备列表。devs = NAudio.Wave.DirectSoundOut.Devices
的顺序与NAudio.Wave.WaveOut中的设备不一致。因此,我不得不这样做来解决这个问题。
for (int idx = 0; idx < NAudio.Wave.WaveOut.DeviceCount; ++idx)
{
string devName = NAudio.Wave.WaveOut.GetCapabilities(idx).ProductName;
if (devName.Contains(SelectedSpeaker.DisplayName) || SelectedSpeaker.DisplayName.Contains(devName))
{
indexSelectedSpeaker = idx;
break;
}
}