所以我正在制作一个小应用程序,某种合成器。我的想法是使用短样本(3-5秒),每个样本都是一个注释(C,C#,D,D#,......)。我希望它的工作方式是,当用户按下键盘上的键时,将播放相应的音符。我已经尝试了一些事情,比如每次按键启动一个新的WaveFileReader并使用IWaveProvider播放它,但这并不好用,因为它很快填满了我的RAM。
我最接近的是创建一个混音器,然后喂它流,这似乎工作,但我不知道这是不是很好的做法(也因为当我完成这项工作后,我计划添加多个将在其中播放的频道的背景)。
工作示例的一些测试代码
public void wProvider( IWavePlayer pro)
{
IWavePlayer pr = pro;
WaveStream wstr = WaveFormatConversionStream.CreatePcmStream(wave);
WaveStream wstr2 = WaveFormatConversionStream.CreatePcmStream(wave2);
var mixer = new WaveMixerStream32();
var strC32 = new WaveChannel32(wstr);
mixer.AddInputStream(strC32);
strC32 = new WaveChannel32(wstr2);
mixer.AddInputStream(strC32);
pr.Init(mixer);
pr.Play();
}
所以我最近的想法是为每个键设置一个通道,并将所有通道连接到一个混音器。然后当按下按键时,将在不同的cahnnel上播放coreconedent样本。
我想要一些"听众"侦听传入的strems并将它们一起添加,然后将它们传递给输出。有一个简单的方法吗?我选择了错误的做法吗?
拥有多个混音器也是错误的吗? (一个用于用户播放的音符,一个用于背景中的所有olther saples playid) 我发现很多关于如何连接样本并将它们保存在磁盘上但没有关于如何添加样本并实时播放它们的问题......