//- event handling ------------------------------------------------------------ //add new event to track positioned by tick public void addEvent(Event evt, int tick) { evt.setTick(tick); events.Add(evt); if ((evt is MessageEvent) && (((MessageEvent)evt).msg is NoteOnMessage)) { NoteOnMessage noteOn = (NoteOnMessage)((MessageEvent)evt).msg; hiNote = (noteOn.noteNumber > hiNote) ? noteOn.noteNumber : hiNote; loNote = (noteOn.noteNumber < loNote) ? noteOn.noteNumber : loNote; } if (tick > length) { length = tick; if (length > seq.length) { seq.length = length; } } seq.meterMap.tickToBeat(tick, out evt.measure, out evt.beat); if ((evt.measure + 1) > measures) { measures = evt.measure + 1; if (measures > seq.measures) { seq.measures = measures; } } }
public static Message getChannelMessage(int msgtype, int channel, int b1, int b2) { Message msg = null; switch (msgtype) { case 0x8: msg = new NoteOffMessage(channel, b1, b2); break; case 0x9: msg = new NoteOnMessage(channel, b1, b2); break; case 0xa: msg = new AftertouchMessage(channel, b1, b2); break; case 0xb: msg = new ControllerMessage(channel, b1, b2); break; case 0xc: msg = new PatchChangeMessage(channel, b1); break; case 0xd: msg = new ChannelPressureMessage(channel, b1); break; case 0xe: int wheelamt = ((b1 % 128) * 128) + (b2 % 128); msg = new PitchWheelMessage(channel, wheelamt); break; default: break; } //convert noteon msg w/ vel = 0 to noteoff msg if (msg is NoteOnMessage) { NoteOnMessage noteOn = (NoteOnMessage)msg; if (noteOn.velocity == 0) { NoteOffMessage noteOff = new NoteOffMessage(noteOn.channel, noteOn.noteNumber, 0); msg = noteOff; } } return(msg); }