Beispiel #1
0
//- 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;
                }
            }
        }
Beispiel #2
0
        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);
        }