Browse Source

Allow to send midi program-changes directly into vst plugins

Closes #244
tags/1.9.8
falkTX 8 years ago
parent
commit
6d5a40daa3
1 changed files with 32 additions and 0 deletions
  1. +32
    -0
      source/backend/plugin/CarlaPluginVST2.cpp

+ 32
- 0
source/backend/plugin/CarlaPluginVST2.cpp View File

@@ -241,6 +241,7 @@ public:
options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH;
options |= PLUGIN_OPTION_SEND_PITCHBEND;
options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF;
options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES;
}

return options;
@@ -1323,6 +1324,21 @@ public:
} // case kEngineControlEventTypeParameter

case kEngineControlEventTypeMidiBank:
if ((pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) != 0)
{
if (fMidiEventCount >= kPluginMaxMidiEvents*2)
continue;

VstMidiEvent& vstMidiEvent(fMidiEvents[fMidiEventCount++]);
carla_zeroStruct(vstMidiEvent);

vstMidiEvent.type = kVstMidiType;
vstMidiEvent.byteSize = kVstMidiEventSize;
vstMidiEvent.deltaFrames = static_cast<int32_t>(isSampleAccurate ? startTime : event.time);
vstMidiEvent.midiData[0] = char(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT));
vstMidiEvent.midiData[1] = MIDI_CONTROL_BANK_SELECT;
vstMidiEvent.midiData[2] = char(ctrlEvent.param);
}
break;

case kEngineControlEventTypeMidiProgram:
@@ -1335,6 +1351,20 @@ public:
break;
}
}
else if (pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES)
{
if (fMidiEventCount >= kPluginMaxMidiEvents*2)
continue;

VstMidiEvent& vstMidiEvent(fMidiEvents[fMidiEventCount++]);
carla_zeroStruct(vstMidiEvent);

vstMidiEvent.type = kVstMidiType;
vstMidiEvent.byteSize = kVstMidiEventSize;
vstMidiEvent.deltaFrames = static_cast<int32_t>(isSampleAccurate ? startTime : event.time);
vstMidiEvent.midiData[0] = char(MIDI_STATUS_PROGRAM_CHANGE | (event.channel & MIDI_CHANNEL_BIT));
vstMidiEvent.midiData[1] = char(ctrlEvent.param);
}
break;

case kEngineControlEventTypeAllSoundOff:
@@ -2281,6 +2311,8 @@ public:

if (options & PLUGIN_OPTION_SEND_CONTROL_CHANGES)
pData->options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES;
if (options & PLUGIN_OPTION_MAP_PROGRAM_CHANGES)
pData->options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES;
}

return true;


Loading…
Cancel
Save