From cf6e8e4dcd8f9df4473633df1c62bee67cc90201 Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 6 Feb 2015 07:23:21 +0000 Subject: [PATCH] Misc --- source/native-plugins/midi-base.hpp | 16 ++++++++-------- source/native-plugins/midi-sequencer.cpp | 21 ++++++++++----------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/source/native-plugins/midi-base.hpp b/source/native-plugins/midi-base.hpp index 2703aa60d..338c53ad8 100644 --- a/source/native-plugins/midi-base.hpp +++ b/source/native-plugins/midi-base.hpp @@ -84,7 +84,7 @@ public: RawMidiEvent* const ctrlEvent(new RawMidiEvent()); ctrlEvent->time = time; ctrlEvent->size = 3; - ctrlEvent->data[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (channel & 0x0F)); + ctrlEvent->data[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (channel & MIDI_CHANNEL_BIT)); ctrlEvent->data[1] = control; ctrlEvent->data[2] = value; @@ -96,7 +96,7 @@ public: RawMidiEvent* const pressureEvent(new RawMidiEvent()); pressureEvent->time = time; pressureEvent->size = 2; - pressureEvent->data[0] = uint8_t(MIDI_STATUS_CHANNEL_PRESSURE | (channel & 0x0F)); + pressureEvent->data[0] = uint8_t(MIDI_STATUS_CHANNEL_PRESSURE | (channel & MIDI_CHANNEL_BIT)); pressureEvent->data[1] = pressure; appendSorted(pressureEvent); @@ -113,7 +113,7 @@ public: RawMidiEvent* const noteOnEvent(new RawMidiEvent()); noteOnEvent->time = time; noteOnEvent->size = 3; - noteOnEvent->data[0] = uint8_t(MIDI_STATUS_NOTE_ON | (channel & 0x0F)); + noteOnEvent->data[0] = uint8_t(MIDI_STATUS_NOTE_ON | (channel & MIDI_CHANNEL_BIT)); noteOnEvent->data[1] = pitch; noteOnEvent->data[2] = velocity; @@ -125,7 +125,7 @@ public: RawMidiEvent* const noteOffEvent(new RawMidiEvent()); noteOffEvent->time = time; noteOffEvent->size = 3; - noteOffEvent->data[0] = uint8_t(MIDI_STATUS_NOTE_OFF | (channel & 0x0F)); + noteOffEvent->data[0] = uint8_t(MIDI_STATUS_NOTE_OFF | (channel & MIDI_CHANNEL_BIT)); noteOffEvent->data[1] = pitch; noteOffEvent->data[2] = velocity; @@ -137,7 +137,7 @@ public: RawMidiEvent* const noteAfterEvent(new RawMidiEvent()); noteAfterEvent->time = time; noteAfterEvent->size = 3; - noteAfterEvent->data[0] = uint8_t(MIDI_STATUS_POLYPHONIC_AFTERTOUCH | (channel & 0x0F)); + noteAfterEvent->data[0] = uint8_t(MIDI_STATUS_POLYPHONIC_AFTERTOUCH | (channel & MIDI_CHANNEL_BIT)); noteAfterEvent->data[1] = pitch; noteAfterEvent->data[2] = pressure; @@ -149,14 +149,14 @@ public: RawMidiEvent* const bankEvent(new RawMidiEvent()); bankEvent->time = time; bankEvent->size = 3; - bankEvent->data[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (channel & 0x0F)); + bankEvent->data[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (channel & MIDI_CHANNEL_BIT)); bankEvent->data[1] = MIDI_CONTROL_BANK_SELECT; bankEvent->data[2] = bank; RawMidiEvent* const programEvent(new RawMidiEvent()); programEvent->time = time; programEvent->size = 2; - programEvent->data[0] = uint8_t(MIDI_STATUS_PROGRAM_CHANGE | (channel & 0x0F)); + programEvent->data[0] = uint8_t(MIDI_STATUS_PROGRAM_CHANGE | (channel & MIDI_CHANNEL_BIT)); programEvent->data[1] = program; appendSorted(bankEvent); @@ -168,7 +168,7 @@ public: RawMidiEvent* const pressureEvent(new RawMidiEvent()); pressureEvent->time = time; pressureEvent->size = 3; - pressureEvent->data[0] = uint8_t(MIDI_STATUS_PITCH_WHEEL_CONTROL | (channel & 0x0F)); + pressureEvent->data[0] = uint8_t(MIDI_STATUS_PITCH_WHEEL_CONTROL | (channel & MIDI_CHANNEL_BIT)); pressureEvent->data[1] = lsb; pressureEvent->data[2] = msb; diff --git a/source/native-plugins/midi-sequencer.cpp b/source/native-plugins/midi-sequencer.cpp index 9cddc4f8c..da311c10a 100644 --- a/source/native-plugins/midi-sequencer.cpp +++ b/source/native-plugins/midi-sequencer.cpp @@ -136,7 +136,8 @@ protected: void process(float**, float**, const uint32_t frames, const NativeMidiEvent* const midiEvents, const uint32_t midiEventCount) override { - const NativeTimeInfo* const timePos = getTimeInfo(); + if (const NativeTimeInfo* const timeInfo = getTimeInfo()) + fTimeInfo = *timeInfo; if (fWantInEvents) { @@ -153,7 +154,7 @@ protected: rawMidiEvent.data[2] = midiEvent->data[2]; rawMidiEvent.data[3] = midiEvent->data[3]; rawMidiEvent.size = midiEvent->size; - rawMidiEvent.time = timePos->playing ? timePos->frame + midiEvent->time : 0; + rawMidiEvent.time = fTimeInfo.playing ? fTimeInfo.frame + midiEvent->time : 0; fInEvents.appendRT(rawMidiEvent); } @@ -162,12 +163,10 @@ protected: fInEvents.trySplice(); } - if (const NativeTimeInfo* const timeInfo = getTimeInfo()) - fTimeInfo = *timeInfo; - - if (timePos->playing) + if (fTimeInfo.playing) { - fMidiOut.play(timePos->frame, frames); + // TODO: convert frames to ticks, using 48 ticks per beat + fMidiOut.play(fTimeInfo.frame, frames); } else if (fWasPlayingBefore) { @@ -175,22 +174,22 @@ protected: midiEvent.port = 0; midiEvent.time = 0; - midiEvent.data[0] = MIDI_STATUS_CONTROL_CHANGE; + midiEvent.data[0] = 0; midiEvent.data[1] = MIDI_CONTROL_ALL_NOTES_OFF; midiEvent.data[2] = 0; midiEvent.data[3] = 0; midiEvent.size = 3; - for (int i=0; i < MAX_MIDI_CHANNELS; ++i) + for (int channel=MAX_MIDI_CHANNELS; --channel >= 0;) { - midiEvent.data[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE+i); + midiEvent.data[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (channel & MIDI_CHANNEL_BIT)); NativePluginAndUiClass::writeMidiEvent(&midiEvent); } carla_stdout("WAS PLAYING BEFORE, NOW STOPPED"); } - fWasPlayingBefore = timePos->playing; + fWasPlayingBefore = fTimeInfo.playing; } // -------------------------------------------------------------------