2017-03-14 82 views
0

每当我尝试调用waveOut上未使用默认音频设备的.init()时,我会收到一个WaveBadFormat异常。如果我更改默认设备,我可以打开没有戏剧的波形输出。每种情况下的波形提供者都是使用ieee 44.1k 2频道波形格式的相同调音台。WaveBadFormat当调用.Init()非默认音频设备时Naudio

下面的代码在应用程序启动时调用。

MixingWaveProvider32 mixer = new MixingWaveProvider32(); 
WaveOut wavOut = new WaveOut(); 
wavOut.DesiredLatency=100; 
wavOut.Init(mixer); 

但是,如果用户选择了一个不同的播放装置然后将下面的代码被称为

wavOut.Stop(); 
wavOut.Dispose(); 
wavOut = new WaveOut(); 
wavOut.DeviceNumber = ((WaveCapabilities)comboBox2.SelectedItem).Index; 
wavOut.Init(mixer); 

而wavOut.Init(混合器)抛出一个坏格式异常。

检查设备的非公开成员在支持的WaveFormats中似乎没有任何区别,但我也不相信任何SupportedWaveFormat可枚举选项都匹配MixingWaveProvider32使用的32位ieee波形格式。

如果任何人有任何想法,为什么这不是默认设备的问题(不管它可能),但其他waveOut设备选项的ID我非常感激!

回答

0

是的,有时WaveOut设备驱动程序只接受某些格式。 NAudio确实包括帮助类,如WaveFloatTo16Provider,您可以在您的案例中使用帮助类将其包装为MixingWaveProvider32,然后将其传递给WaveOut.Init方法