2015-10-04 122 views
0

我的小應用程序有另一個問題。我使用通過USB電纜連接到PC的N-Audio庫和外部MIDI鍵盤(88鍵)。USB鍵盤 - 緩衝文件

一切正常,我可以在我的MIDI鍵盤上播放,應用程序讀取鍵並從資源播放特定的Notes = .wav文件。

但問題是當我打2分鐘多一點時。在那之後,聲音在玩,令人毛骨悚然,他們聽錯了 - 他們聽起來像是出現了瘋狂的壓縮質量,最後他們完全沒了,但應用程序仍在接收來自MIDI鍵盤的信號。

我有這樣的閱讀器(每88個鍵):

// WaveFileReader 
private NAudio.Wave.WaveFileReader wave = null; 
private NAudio.Wave.WaveFileReader wave0 = null; 

和直接的聲音了:

// DirectSoundOut 
private NAudio.Wave.DirectSoundOut output = null; 
private NAudio.Wave.DirectSoundOut output0 = null; 

,然後,所有的聲音(音符)播放這樣(爲每一波,wave0,WAVE1,等...輸出,輸出1,輸出2,等...):

if (nutka == "C1" && msg.Velocity != 0) 
{ 
    wave1 = new NAudio.Wave.WaveFileReader(Properties.Resources.C1); 
    output1 = new NAudio.Wave.DirectSoundOut(); 
    output1.Init(new NAudio.Wave.WaveChannel32(wave1)); 
    output1.Play(); 
} 

不能找出實物主要公關問題是,我該如何解決它。

+0

混合考慮使用字段「波形」和「輸出」創建結構。然後,您可以創建'map',其中'note'(字符串)是關鍵字,所提及的結構就是該值。然後,你可以寫: 'if(msg.Velocity!= 0){myMap [nutka] .wave = new ...; ... myMap [nutka] .output.Play();}' 而不是可怕的'if'鏈;) –

+0

你在哪裏清理所有這些對象? –

+0

你是什麼意思「清潔物體」?任何建議如何做到這一點? – Martin

回答

2

您不應該打開WaveOut的多個實例。相反,只需打開1並將所有輸入與MixingSampleProvider

+0

尊敬的馬克, 請問您如何將所有輸入與MixingSampleProvider混合? – Martin