Browse Source

Misc

tags/1.9.6
falkTX 10 years ago
parent
commit
cf6e8e4dcd
2 changed files with 18 additions and 19 deletions
  1. +8
    -8
      source/native-plugins/midi-base.hpp
  2. +10
    -11
      source/native-plugins/midi-sequencer.cpp

+ 8
- 8
source/native-plugins/midi-base.hpp View File

@@ -84,7 +84,7 @@ public:
RawMidiEvent* const ctrlEvent(new RawMidiEvent()); RawMidiEvent* const ctrlEvent(new RawMidiEvent());
ctrlEvent->time = time; ctrlEvent->time = time;
ctrlEvent->size = 3; 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[1] = control;
ctrlEvent->data[2] = value; ctrlEvent->data[2] = value;


@@ -96,7 +96,7 @@ public:
RawMidiEvent* const pressureEvent(new RawMidiEvent()); RawMidiEvent* const pressureEvent(new RawMidiEvent());
pressureEvent->time = time; pressureEvent->time = time;
pressureEvent->size = 2; 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; pressureEvent->data[1] = pressure;


appendSorted(pressureEvent); appendSorted(pressureEvent);
@@ -113,7 +113,7 @@ public:
RawMidiEvent* const noteOnEvent(new RawMidiEvent()); RawMidiEvent* const noteOnEvent(new RawMidiEvent());
noteOnEvent->time = time; noteOnEvent->time = time;
noteOnEvent->size = 3; 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[1] = pitch;
noteOnEvent->data[2] = velocity; noteOnEvent->data[2] = velocity;


@@ -125,7 +125,7 @@ public:
RawMidiEvent* const noteOffEvent(new RawMidiEvent()); RawMidiEvent* const noteOffEvent(new RawMidiEvent());
noteOffEvent->time = time; noteOffEvent->time = time;
noteOffEvent->size = 3; 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[1] = pitch;
noteOffEvent->data[2] = velocity; noteOffEvent->data[2] = velocity;


@@ -137,7 +137,7 @@ public:
RawMidiEvent* const noteAfterEvent(new RawMidiEvent()); RawMidiEvent* const noteAfterEvent(new RawMidiEvent());
noteAfterEvent->time = time; noteAfterEvent->time = time;
noteAfterEvent->size = 3; 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[1] = pitch;
noteAfterEvent->data[2] = pressure; noteAfterEvent->data[2] = pressure;


@@ -149,14 +149,14 @@ public:
RawMidiEvent* const bankEvent(new RawMidiEvent()); RawMidiEvent* const bankEvent(new RawMidiEvent());
bankEvent->time = time; bankEvent->time = time;
bankEvent->size = 3; 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[1] = MIDI_CONTROL_BANK_SELECT;
bankEvent->data[2] = bank; bankEvent->data[2] = bank;


RawMidiEvent* const programEvent(new RawMidiEvent()); RawMidiEvent* const programEvent(new RawMidiEvent());
programEvent->time = time; programEvent->time = time;
programEvent->size = 2; 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; programEvent->data[1] = program;


appendSorted(bankEvent); appendSorted(bankEvent);
@@ -168,7 +168,7 @@ public:
RawMidiEvent* const pressureEvent(new RawMidiEvent()); RawMidiEvent* const pressureEvent(new RawMidiEvent());
pressureEvent->time = time; pressureEvent->time = time;
pressureEvent->size = 3; 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[1] = lsb;
pressureEvent->data[2] = msb; pressureEvent->data[2] = msb;




+ 10
- 11
source/native-plugins/midi-sequencer.cpp View File

@@ -136,7 +136,8 @@ protected:


void process(float**, float**, const uint32_t frames, const NativeMidiEvent* const midiEvents, const uint32_t midiEventCount) override 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) if (fWantInEvents)
{ {
@@ -153,7 +154,7 @@ protected:
rawMidiEvent.data[2] = midiEvent->data[2]; rawMidiEvent.data[2] = midiEvent->data[2];
rawMidiEvent.data[3] = midiEvent->data[3]; rawMidiEvent.data[3] = midiEvent->data[3];
rawMidiEvent.size = midiEvent->size; 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); fInEvents.appendRT(rawMidiEvent);
} }
@@ -162,12 +163,10 @@ protected:
fInEvents.trySplice(); 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) else if (fWasPlayingBefore)
{ {
@@ -175,22 +174,22 @@ protected:


midiEvent.port = 0; midiEvent.port = 0;
midiEvent.time = 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[1] = MIDI_CONTROL_ALL_NOTES_OFF;
midiEvent.data[2] = 0; midiEvent.data[2] = 0;
midiEvent.data[3] = 0; midiEvent.data[3] = 0;
midiEvent.size = 3; 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); NativePluginAndUiClass::writeMidiEvent(&midiEvent);
} }


carla_stdout("WAS PLAYING BEFORE, NOW STOPPED"); carla_stdout("WAS PLAYING BEFORE, NOW STOPPED");
} }


fWasPlayingBefore = timePos->playing;
fWasPlayingBefore = fTimeInfo.playing;
} }


// ------------------------------------------------------------------- // -------------------------------------------------------------------


Loading…
Cancel
Save