Example #1
0
        public void Process(VstEventCollection events)
        {
            int _transposeSemitones = _plugin.Transpose.Semitones;

            foreach (VstEvent anyEvent in events)
            {
                if (anyEvent.EventType != VstEventTypes.MidiEvent)
                {
                    continue;
                }

                VstMidiEvent midiEvent = (VstMidiEvent)anyEvent;


                if (((midiEvent.Data[0] & 0xF0) == 0x80 || (midiEvent.Data[0] & 0xF0) == 0x90))
                {   // these are all the note on and note off events.
                    if (_transposeSemitones != 0)
                    {
                        VstMidiEvent mappedEvent = null;
                        byte[]       midiData    = new byte[4];
                        midiData[0] = midiEvent.Data[0];
                        int _note = midiEvent.Data[1] + _transposeSemitones;
                        if (_note < 0 || _note > 127)
                        {
                            continue;                           // skip out of range notes.
                        }
                        midiData[1] = (byte)_note;
                        midiData[2] = midiEvent.Data[2];
                        mappedEvent = new VstMidiEvent(midiEvent.DeltaFrames,
                                                       midiEvent.NoteLength,
                                                       midiEvent.NoteOffset,
                                                       midiData,
                                                       midiEvent.Detune,
                                                       midiEvent.NoteOffVelocity);
                        Events.Add(mappedEvent);
                        // add raw note-on note numbers to the queue
                        if ((midiEvent.Data[0] & 0xF0) == 0x90)
                        {
                            lock (((ICollection)NoteOnEvents).SyncRoot)
                            {
                                NoteOnEvents.Enqueue(midiEvent.Data[1]);
                            }
                        }
                    }
                    else
                    {   // we're not transposing, so just pass it through.
                        Events.Add(anyEvent);
                    }
                }
                else
                {   // not a midi on-off event, so pass it through.
                    Events.Add(anyEvent);
                }
            }
        }
Example #2
0
        public void Process(VstEventCollection events)
        {
            foreach (VstEvent evnt in events)
            {
                if (evnt.EventType != VstEventTypes.MidiEvent)
                {
                    continue;
                }

                var midiEvent = (VstMidiEvent)evnt;

                if (((midiEvent.Data[0] & 0xF0) == 0x80 || (midiEvent.Data[0] & 0xF0) == 0x90))
                {
                    if (_noteMap.Contains(midiEvent.Data[1]))
                    {
                        byte[] midiData = new byte[4];
                        midiData[0] = midiEvent.Data[0];
                        midiData[1] = _noteMap[midiEvent.Data[1]].OutputNoteNumber;
                        midiData[2] = midiEvent.Data[2];

                        var mappedEvent = new VstMidiEvent(midiEvent.DeltaFrames,
                                                           midiEvent.NoteLength,
                                                           midiEvent.NoteOffset,
                                                           midiData,
                                                           midiEvent.Detune,
                                                           midiEvent.NoteOffVelocity);

                        Events.Add(mappedEvent);

                        // add raw note-on note numbers to the queue
                        if ((midiEvent.Data[0] & 0xF0) == 0x90)
                        {
                            lock (((ICollection)NoteOnEvents).SyncRoot)
                            {
                                NoteOnEvents.Enqueue(midiEvent.Data[1]);
                            }
                        }
                    }
                    else if (MidiThru)
                    {
                        // add original note event
                        Events.Add(evnt);
                    }
                }
                else if (MidiThru)
                {
                    // add original (non-note) event
                    Events.Add(evnt);
                }
            }
        }