public void NoteOffAllChannel(int channel, bool immediate)
{
var node = _voiceManager.ActiveVoices.First;
while (node != null)
{
if (channel == node.Value.VoiceParams.Channel)
{
if (immediate)
{
node.Value.StopImmediately();
var delnode = node;
node = node.Next;
_voiceManager.ActiveVoices.Remove(delnode);
_voiceManager.FreeVoices.AddFirst(delnode.Value);
}
else
{
//if hold pedal is enabled do not stop the voice
if (_synthChannels[channel].HoldPedal)
node.Value.VoiceParams.NoteOffPending = true;
else
node.Value.Stop();
node = node.Next;
}
}
}
}