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());
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;



+ 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
{
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;
}

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


Loading…
Cancel
Save