2015-10-04 96 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