private void HandleChannelMessagePlayed(object sender, ChannelMessageEventArgs e)
{
if (b_ProgramClosing) // don't try playing anything if program is closing
return;
// always play NoteOff messages
if (e.Message.Command == ChannelCommand.NoteOn && e.Message.Data2 > 0)
{
if (!PlayOtherChannels && e.Message.MidiChannel != i_PersistentChannel)
return;
if (!PlayPersistentChannel && e.Message.MidiChannel == i_PersistentChannel)
return;
}
if (e.Message.MidiChannel == i_PersistentChannel)
{
if (e.Message.Command == ChannelCommand.NoteOn && e.Message.Data2 > 0)
{
i_NumChannelNotesPlayed++;
al_CurrentPlayingChannelNotes.Add(e.Message.Data1 + NoteOffset);
e = new ChannelMessageEventArgs(new ChannelMessage(e.Message.Command, e.Message.MidiChannel, e.Message.Data1 + NoteOffset, e.Message.Data2));
}
else if (e.Message.Command == ChannelCommand.NoteOn || e.Message.Command == ChannelCommand.NoteOff)
{
al_CurrentPlayingChannelNotes.Remove(e.Message.Data1 + NoteOffset);
e = new ChannelMessageEventArgs(new ChannelMessage(e.Message.Command, e.Message.MidiChannel, e.Message.Data1 + NoteOffset, e.Message.Data2));
}
}
outputDevice.Send(e.Message);
}