2017-03-14 77 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方法