C# USB键盘-缓冲文件

C# USB键盘-缓冲文件,c#,midi,naudio,C#,Midi,Naudio,我的小申请还有一个问题。我使用N-Audio库和外部MIDI键盘(88个键),通过USB电缆连接到电脑 一切都很好,我可以在我的MIDI键盘上播放,应用程序读取键并播放参考资料中的特定Notes=.wav文件 但问题是当我打得比2分钟多一点的时候。在那个段时间之后,声音开始变得令人毛骨悚然,有些地方出了问题——它们听起来像是疯狂的压缩质量出现了,最后它们完全消失了,但应用程序仍然在接收来自MIDI键盘的信号 我有这样的阅读器(88个键中的每一个): 和直接发声: // DirectSoundOu

我的小申请还有一个问题。我使用N-Audio库和外部MIDI键盘(88个键),通过USB电缆连接到电脑

一切都很好,我可以在我的MIDI键盘上播放,应用程序读取键并播放参考资料中的特定Notes=.wav文件

但问题是当我打得比2分钟多一点的时候。在那个段时间之后,声音开始变得令人毛骨悚然,有些地方出了问题——它们听起来像是疯狂的压缩质量出现了,最后它们完全消失了,但应用程序仍然在接收来自MIDI键盘的信号

我有这样的阅读器(88个键中的每一个):

和直接发声:

// DirectSoundOut
private NAudio.Wave.DirectSoundOut output = null;
private NAudio.Wave.DirectSoundOut output0 = null;
然后,所有声音(音符)都以这种方式播放(对于每个波,波0,波1等…和输出,输出1,输出2等…):


无法找出真正的主要问题是什么,以及如何解决它。

您不应该打开多个
WaveOut
实例。相反,只需打开1并使用
MixingSampleProvider

混合所有输入,考虑使用to字段创建结构:
wave
output
。然后,您可以创建
map
,其中
note
(字符串)是键,提到的结构是值。然后,您可以编写:
if(msg.Velocity!=0){myMap[nutka].wave=new…;…myMap[nutka].output.Play();}
而不是可怕的
if
chain;)你在哪里清理这些东西?你说的“清理东西”是什么意思?有什么建议吗?亲爱的马克,我可以问你如何用混合采样提供程序混合所有的输入吗?
// DirectSoundOut
private NAudio.Wave.DirectSoundOut output = null;
private NAudio.Wave.DirectSoundOut output0 = null;
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();
}