Ejemplo n.º 1
0
        private void HandleInputMimData(UIntPtr dwParam1, UIntPtr dwParam2)
        {
            Channel channel;
            Pitch   pitch;
            int     velocity;
            int     value;
            uint    win32Timestamp;

            if (ShortMsg.IsNoteOn(dwParam1, dwParam2))
            {
                if (NoteOn == null)
                {
                    return;
                }

                ShortMsg.DecodeNoteOn(dwParam1, dwParam2, out channel, out pitch, out velocity, out win32Timestamp);
                NoteOn(new NoteOnMessage(this, channel, pitch, velocity, _clock?.Time ?? win32Timestamp / 1000f));
            }
            else if (ShortMsg.IsNoteOff(dwParam1, dwParam2))
            {
                if (NoteOff == null)
                {
                    return;
                }

                ShortMsg.DecodeNoteOff(dwParam1, dwParam2, out channel, out pitch, out velocity, out win32Timestamp);
                NoteOff(new NoteOffMessage(this, channel, pitch, velocity, _clock?.Time ?? win32Timestamp / 1000f));
            }
            else if (ShortMsg.IsControlChange(dwParam1, dwParam2))
            {
                Control control;
                ShortMsg.DecodeControlChange(dwParam1, dwParam2, out channel, out control, out value, out win32Timestamp);

                var msg = new ControlChangeMessage(this, channel, control, value, _clock?.Time ?? win32Timestamp / 1000f);
                _nrpnWatcher.ReceivedControlChange(msg);
            }
            else if (ShortMsg.IsProgramChange(dwParam1, dwParam2))
            {
                if (ProgramChange == null)
                {
                    return;
                }

                Instrument instrument;
                ShortMsg.DecodeProgramChange(dwParam1, dwParam2, out channel, out instrument, out win32Timestamp);
                ProgramChange(new ProgramChangeMessage(this, channel, instrument, _clock?.Time ?? win32Timestamp / 1000f));
            }
            else if (ShortMsg.IsPitchBend(dwParam1, dwParam2))
            {
                if (PitchBend == null)
                {
                    return;
                }

                ShortMsg.DecodePitchBend(dwParam1, dwParam2, out channel, out value, out win32Timestamp);
                PitchBend(new PitchBendMessage(this, channel, value, _clock?.Time ?? win32Timestamp / 1000f));
            }
        }