Example #1
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);
        }
Example #2
0
        public static void finalizeTrack(Track track)
        {
            bool haveName   = false;
            bool seenNoteOn = false;

            for (int i = 0; i < track.events.Count; i++)
            {
                if (!haveName && (track.events[i] is TrackNameEvent))
                {
                    track.setName(((TrackNameEvent)track.events[i]).trackName);
                    haveName = true;
                }

                //scan events for these values only before the first note on event
                if ((!seenNoteOn) && (track.events[i] is MessageEvent))
                {
                    Message msg = ((MessageEvent)track.events[i]).msg;

                    if (msg is NoteOnMessage)
                    {
                        track.setOutputChannel(((NoteOnMessage)msg).channel);
                        seenNoteOn = true;
                    }

                    if (msg is PatchChangeMessage)
                    {
                        track.setPatchNum(((PatchChangeMessage)msg).patchNumber);
                    }

                    if (msg is ControllerMessage)
                    {
                        ControllerMessage ctrlMsg = (ControllerMessage)msg;
                        if (ctrlMsg.ctrlNumber == 7)
                        {
                            track.setVolume(ctrlMsg.ctrlValue);
                        }

                        if (ctrlMsg.ctrlNumber == 10)
                        {
                            track.setPan(ctrlMsg.ctrlValue);
                        }
                    }
                }

                if (haveName && seenNoteOn)
                {
                    break;
                }
            }
        }