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