Signed-off-by: falkTX <falktx@falktx.com>tags/v2.2.0-RC1
| @@ -7,7 +7,7 @@ | |||||
| <x>0</x> | <x>0</x> | ||||
| <y>0</y> | <y>0</y> | ||||
| <width>537</width> | <width>537</width> | ||||
| <height>535</height> | |||||
| <height>525</height> | |||||
| </rect> | </rect> | ||||
| </property> | </property> | ||||
| <property name="windowTitle"> | <property name="windowTitle"> | ||||
| @@ -405,6 +405,13 @@ | |||||
| </property> | </property> | ||||
| </widget> | </widget> | ||||
| </item> | </item> | ||||
| <item> | |||||
| <widget class="QCheckBox" name="ch_send_notes"> | |||||
| <property name="text"> | |||||
| <string>Send Notes</string> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| <item> | <item> | ||||
| <widget class="QCheckBox" name="ch_send_program_changes"> | <widget class="QCheckBox" name="ch_send_program_changes"> | ||||
| <property name="text"> | <property name="text"> | ||||
| @@ -260,6 +260,13 @@ static const uint PLUGIN_OPTION_SEND_ALL_SOUND_OFF = 0x100; | |||||
| */ | */ | ||||
| static const uint PLUGIN_OPTION_SEND_PROGRAM_CHANGES = 0x200; | static const uint PLUGIN_OPTION_SEND_PROGRAM_CHANGES = 0x200; | ||||
| /*! | |||||
| * Skip sending MIDI note events. | |||||
| * This if off-by-default as a way to keep backwards compatibility. | |||||
| * We always want notes enabled by default, not the contrary. | |||||
| */ | |||||
| static const uint PLUGIN_OPTION_SKIP_SENDING_NOTES = 0x400; | |||||
| /*! | /*! | ||||
| * Special flag to indicate that plugin options are not yet set. | * Special flag to indicate that plugin options are not yet set. | ||||
| * This flag exists because 0x0 as an option value is a valid one, so we need something else to indicate "null-ness". | * This flag exists because 0x0 as an option value is a valid one, so we need something else to indicate "null-ness". | ||||
| @@ -1541,6 +1541,8 @@ public: | |||||
| uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiData)); | uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiData)); | ||||
| if ((status == MIDI_STATUS_NOTE_OFF || status == MIDI_STATUS_NOTE_ON) && (pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES)) | |||||
| continue; | |||||
| if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) | if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) | ||||
| continue; | continue; | ||||
| if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) | if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) | ||||
| @@ -2698,6 +2700,10 @@ public: | |||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_ALL_SOUND_OFF)) | if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_ALL_SOUND_OFF)) | ||||
| pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | ||||
| if (fInfo.optionsAvailable & PLUGIN_OPTION_SKIP_SENDING_NOTES) | |||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_SKIP_SENDING_NOTES)) | |||||
| pData->options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||||
| if (fInfo.optionsAvailable & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) | if (fInfo.optionsAvailable & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) | ||||
| { | { | ||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) | if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) | ||||
| @@ -193,6 +193,7 @@ public: | |||||
| options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; | options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; | ||||
| options |= PLUGIN_OPTION_SEND_PITCHBEND; | options |= PLUGIN_OPTION_SEND_PITCHBEND; | ||||
| options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | ||||
| options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||||
| return options; | return options; | ||||
| } | } | ||||
| @@ -1381,24 +1382,28 @@ public: | |||||
| switch (status) | switch (status) | ||||
| { | { | ||||
| case MIDI_STATUS_NOTE_OFF: { | |||||
| const uint8_t note = midiEvent.data[1]; | |||||
| case MIDI_STATUS_NOTE_OFF: | |||||
| if ((pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES) == 0x0) | |||||
| { | |||||
| const uint8_t note = midiEvent.data[1]; | |||||
| fluid_synth_noteoff(fSynth, event.channel, note); | |||||
| fluid_synth_noteoff(fSynth, event.channel, note); | |||||
| pData->postponeRtEvent(kPluginPostRtEventNoteOff, true, event.channel, note, 0, 0.0f); | |||||
| pData->postponeRtEvent(kPluginPostRtEventNoteOff, true, event.channel, note, 0, 0.0f); | |||||
| } | |||||
| break; | break; | ||||
| } | |||||
| case MIDI_STATUS_NOTE_ON: { | |||||
| const uint8_t note = midiEvent.data[1]; | |||||
| const uint8_t velo = midiEvent.data[2]; | |||||
| case MIDI_STATUS_NOTE_ON: | |||||
| if ((pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES) == 0x0) | |||||
| { | |||||
| const uint8_t note = midiEvent.data[1]; | |||||
| const uint8_t velo = midiEvent.data[2]; | |||||
| fluid_synth_noteon(fSynth, event.channel, note, velo); | |||||
| fluid_synth_noteon(fSynth, event.channel, note, velo); | |||||
| pData->postponeRtEvent(kPluginPostRtEventNoteOn, true, event.channel, note, velo, 0.0f); | |||||
| pData->postponeRtEvent(kPluginPostRtEventNoteOn, true, event.channel, note, velo, 0.0f); | |||||
| } | |||||
| break; | break; | ||||
| } | |||||
| case MIDI_STATUS_POLYPHONIC_AFTERTOUCH: | case MIDI_STATUS_POLYPHONIC_AFTERTOUCH: | ||||
| if (pData->options & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) | if (pData->options & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) | ||||
| @@ -1749,6 +1754,8 @@ public: | |||||
| pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | ||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_MAP_PROGRAM_CHANGES)) | if (isPluginOptionEnabled(options, PLUGIN_OPTION_MAP_PROGRAM_CHANGES)) | ||||
| pData->options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES; | pData->options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES; | ||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_SKIP_SENDING_NOTES)) | |||||
| pData->options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||||
| return true; | return true; | ||||
| } | } | ||||
| @@ -645,6 +645,7 @@ public: | |||||
| options |= PLUGIN_OPTION_SEND_PITCHBEND; | options |= PLUGIN_OPTION_SEND_PITCHBEND; | ||||
| options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | ||||
| options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | ||||
| options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||||
| } | } | ||||
| return options; | return options; | ||||
| @@ -1200,6 +1201,8 @@ public: | |||||
| uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiData)); | uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiData)); | ||||
| if ((status == MIDI_STATUS_NOTE_OFF || status == MIDI_STATUS_NOTE_ON) && (pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES)) | |||||
| continue; | |||||
| if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) | if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) | ||||
| continue; | continue; | ||||
| if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) | if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) | ||||
| @@ -1785,6 +1788,9 @@ public: | |||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) | if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) | ||||
| pData->options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | pData->options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | ||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_SKIP_SENDING_NOTES)) | |||||
| pData->options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||||
| return true; | return true; | ||||
| } | } | ||||
| @@ -182,6 +182,7 @@ public: | |||||
| options |= PLUGIN_OPTION_SEND_PITCHBEND; | options |= PLUGIN_OPTION_SEND_PITCHBEND; | ||||
| options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | ||||
| options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | ||||
| options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||||
| } | } | ||||
| return options; | return options; | ||||
| @@ -1049,6 +1050,8 @@ public: | |||||
| uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiData)); | uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiData)); | ||||
| if ((status == MIDI_STATUS_NOTE_OFF || status == MIDI_STATUS_NOTE_ON) && (pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES)) | |||||
| continue; | |||||
| if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) | if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) | ||||
| continue; | continue; | ||||
| if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) | if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) | ||||
| @@ -1463,6 +1466,8 @@ public: | |||||
| pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | ||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) | if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) | ||||
| pData->options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | pData->options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | ||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_SKIP_SENDING_NOTES)) | |||||
| pData->options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||||
| } | } | ||||
| if (fInstance->getNumPrograms() > 1 && ((pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) == 0)) | if (fInstance->getNumPrograms() > 1 && ((pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) == 0)) | ||||
| @@ -519,6 +519,7 @@ public: | |||||
| options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; | options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; | ||||
| options |= PLUGIN_OPTION_SEND_PITCHBEND; | options |= PLUGIN_OPTION_SEND_PITCHBEND; | ||||
| options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | ||||
| options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||||
| } | } | ||||
| } | } | ||||
| @@ -1826,29 +1827,33 @@ public: | |||||
| switch (status) | switch (status) | ||||
| { | { | ||||
| case MIDI_STATUS_NOTE_OFF: { | |||||
| const uint8_t note = midiEvent.data[1]; | |||||
| case MIDI_STATUS_NOTE_OFF: | |||||
| if ((pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES) == 0x0) | |||||
| { | |||||
| const uint8_t note = midiEvent.data[1]; | |||||
| seqEvent.type = SND_SEQ_EVENT_NOTEOFF; | |||||
| seqEvent.data.note.channel = event.channel; | |||||
| seqEvent.data.note.note = note; | |||||
| seqEvent.type = SND_SEQ_EVENT_NOTEOFF; | |||||
| seqEvent.data.note.channel = event.channel; | |||||
| seqEvent.data.note.note = note; | |||||
| pData->postponeRtEvent(kPluginPostRtEventNoteOff, true, event.channel, note, 0, 0.0f); | |||||
| pData->postponeRtEvent(kPluginPostRtEventNoteOff, true, event.channel, note, 0, 0.0f); | |||||
| } | |||||
| break; | break; | ||||
| } | |||||
| case MIDI_STATUS_NOTE_ON: { | |||||
| const uint8_t note = midiEvent.data[1]; | |||||
| const uint8_t velo = midiEvent.data[2]; | |||||
| case MIDI_STATUS_NOTE_ON: | |||||
| if ((pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES) == 0x0) | |||||
| { | |||||
| const uint8_t note = midiEvent.data[1]; | |||||
| const uint8_t velo = midiEvent.data[2]; | |||||
| seqEvent.type = SND_SEQ_EVENT_NOTEON; | |||||
| seqEvent.data.note.channel = event.channel; | |||||
| seqEvent.data.note.note = note; | |||||
| seqEvent.data.note.velocity = velo; | |||||
| seqEvent.type = SND_SEQ_EVENT_NOTEON; | |||||
| seqEvent.data.note.channel = event.channel; | |||||
| seqEvent.data.note.note = note; | |||||
| seqEvent.data.note.velocity = velo; | |||||
| pData->postponeRtEvent(kPluginPostRtEventNoteOn, true, event.channel, note, velo, 0.0f); | |||||
| pData->postponeRtEvent(kPluginPostRtEventNoteOn, true, event.channel, note, velo, 0.0f); | |||||
| } | |||||
| break; | break; | ||||
| } | |||||
| case MIDI_STATUS_POLYPHONIC_AFTERTOUCH: | case MIDI_STATUS_POLYPHONIC_AFTERTOUCH: | ||||
| if (pData->options & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) | if (pData->options & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) | ||||
| @@ -3037,6 +3042,8 @@ public: | |||||
| pData->options |= PLUGIN_OPTION_SEND_PITCHBEND; | pData->options |= PLUGIN_OPTION_SEND_PITCHBEND; | ||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_ALL_SOUND_OFF)) | if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_ALL_SOUND_OFF)) | ||||
| pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | ||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_SKIP_SENDING_NOTES)) | |||||
| pData->options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||||
| } | } | ||||
| } | } | ||||
| @@ -961,6 +961,7 @@ public: | |||||
| options |= PLUGIN_OPTION_SEND_PITCHBEND; | options |= PLUGIN_OPTION_SEND_PITCHBEND; | ||||
| options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | ||||
| options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | ||||
| options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||||
| } | } | ||||
| return options; | return options; | ||||
| @@ -4052,6 +4053,8 @@ public: | |||||
| uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiData)); | uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiData)); | ||||
| if ((status == MIDI_STATUS_NOTE_OFF || status == MIDI_STATUS_NOTE_ON) && (pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES)) | |||||
| continue; | |||||
| if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) | if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) | ||||
| continue; | continue; | ||||
| if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) | if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) | ||||
| @@ -6393,6 +6396,8 @@ public: | |||||
| pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | ||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) | if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) | ||||
| pData->options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | pData->options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | ||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_SKIP_SENDING_NOTES)) | |||||
| pData->options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||||
| } | } | ||||
| if (fExt.programs != nullptr && (pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) == 0) | if (fExt.programs != nullptr && (pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) == 0) | ||||
| @@ -445,6 +445,9 @@ public: | |||||
| if (fDescriptor->supports & NATIVE_PLUGIN_SUPPORTS_ALL_SOUND_OFF) | if (fDescriptor->supports & NATIVE_PLUGIN_SUPPORTS_ALL_SOUND_OFF) | ||||
| options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | ||||
| if (fDescriptor->midiIns > 0) | |||||
| options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||||
| if (fDescriptor->supports & NATIVE_PLUGIN_SUPPORTS_PROGRAM_CHANGES) | if (fDescriptor->supports & NATIVE_PLUGIN_SUPPORTS_PROGRAM_CHANGES) | ||||
| options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | ||||
| else if (hasMidiProgs) | else if (hasMidiProgs) | ||||
| @@ -2192,6 +2195,8 @@ public: | |||||
| uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiEvent.data)); | uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiEvent.data)); | ||||
| if ((status == MIDI_STATUS_NOTE_OFF || status == MIDI_STATUS_NOTE_ON) && (pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES)) | |||||
| continue; | |||||
| if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) | if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) | ||||
| continue; | continue; | ||||
| if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) | if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) | ||||
| @@ -3016,6 +3021,10 @@ public: | |||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_ALL_SOUND_OFF)) | if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_ALL_SOUND_OFF)) | ||||
| pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | ||||
| if (fDescriptor->midiIns > 0) | |||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_SKIP_SENDING_NOTES)) | |||||
| pData->options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||||
| if (fDescriptor->supports & NATIVE_PLUGIN_SUPPORTS_PROGRAM_CHANGES) | if (fDescriptor->supports & NATIVE_PLUGIN_SUPPORTS_PROGRAM_CHANGES) | ||||
| { | { | ||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) | if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) | ||||
| @@ -126,6 +126,7 @@ public: | |||||
| options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; | options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; | ||||
| options |= PLUGIN_OPTION_SEND_PITCHBEND; | options |= PLUGIN_OPTION_SEND_PITCHBEND; | ||||
| options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | ||||
| options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||||
| return options; | return options; | ||||
| } | } | ||||
| @@ -506,6 +507,8 @@ public: | |||||
| uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiData)); | uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiData)); | ||||
| if ((status == MIDI_STATUS_NOTE_OFF || status == MIDI_STATUS_NOTE_ON) && (pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES)) | |||||
| continue; | |||||
| if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) | if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) | ||||
| continue; | continue; | ||||
| if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) | if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) | ||||
| @@ -753,6 +756,8 @@ public: | |||||
| pData->options |= PLUGIN_OPTION_SEND_PITCHBEND; | pData->options |= PLUGIN_OPTION_SEND_PITCHBEND; | ||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_ALL_SOUND_OFF)) | if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_ALL_SOUND_OFF)) | ||||
| pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | ||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_SKIP_SENDING_NOTES)) | |||||
| pData->options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||||
| return true; | return true; | ||||
| } | } | ||||
| @@ -264,6 +264,7 @@ public: | |||||
| options |= PLUGIN_OPTION_SEND_PITCHBEND; | options |= PLUGIN_OPTION_SEND_PITCHBEND; | ||||
| options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | ||||
| options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | ||||
| options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||||
| } | } | ||||
| return options; | return options; | ||||
| @@ -1553,6 +1554,8 @@ public: | |||||
| uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiEvent.data)); | uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiEvent.data)); | ||||
| if ((status == MIDI_STATUS_NOTE_OFF || status == MIDI_STATUS_NOTE_ON) && (pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES)) | |||||
| continue; | |||||
| if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) | if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) | ||||
| continue; | continue; | ||||
| if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) | if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) | ||||
| @@ -2641,6 +2644,8 @@ public: | |||||
| pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | ||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) | if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) | ||||
| pData->options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | pData->options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | ||||
| if (isPluginOptionEnabled(options, PLUGIN_OPTION_SKIP_SENDING_NOTES)) | |||||
| pData->options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||||
| } | } | ||||
| if (fEffect->numPrograms > 1 && (pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) == 0) | if (fEffect->numPrograms > 1 && (pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) == 0) | ||||
| @@ -273,6 +273,11 @@ PLUGIN_OPTION_SEND_ALL_SOUND_OFF = 0x100 | |||||
| # @note: This option conflicts with PLUGIN_OPTION_MAP_PROGRAM_CHANGES and cannot be used at the same time. | # @note: This option conflicts with PLUGIN_OPTION_MAP_PROGRAM_CHANGES and cannot be used at the same time. | ||||
| PLUGIN_OPTION_SEND_PROGRAM_CHANGES = 0x200 | PLUGIN_OPTION_SEND_PROGRAM_CHANGES = 0x200 | ||||
| # SSkip sending MIDI note events. | |||||
| # This if off-by-default as a way to keep backwards compatibility. | |||||
| # We always want notes enabled by default, not the contrary. | |||||
| PLUGIN_OPTION_SKIP_SENDING_NOTES = 0x400 | |||||
| # Special flag to indicate that plugin options are not yet set. | # Special flag to indicate that plugin options are not yet set. | ||||
| # This flag exists because 0x0 as an option value is a valid one, so we need something else to indicate "null-ness". | # This flag exists because 0x0 as an option value is a valid one, so we need something else to indicate "null-ness". | ||||
| PLUGIN_OPTIONS_NULL = 0x10000 | PLUGIN_OPTIONS_NULL = 0x10000 | ||||
| @@ -60,6 +60,7 @@ from carla_backend import ( | |||||
| PLUGIN_OPTION_SEND_PITCHBEND, | PLUGIN_OPTION_SEND_PITCHBEND, | ||||
| PLUGIN_OPTION_SEND_ALL_SOUND_OFF, | PLUGIN_OPTION_SEND_ALL_SOUND_OFF, | ||||
| PLUGIN_OPTION_SEND_PROGRAM_CHANGES, | PLUGIN_OPTION_SEND_PROGRAM_CHANGES, | ||||
| PLUGIN_OPTION_SKIP_SENDING_NOTES, | |||||
| PARAMETER_DRYWET, | PARAMETER_DRYWET, | ||||
| PARAMETER_VOLUME, | PARAMETER_VOLUME, | ||||
| PARAMETER_BALANCE_LEFT, | PARAMETER_BALANCE_LEFT, | ||||
| @@ -748,6 +749,7 @@ class PluginEdit(QDialog): | |||||
| self.ui.ch_force_stereo.clicked.connect(self.slot_optionChanged) | self.ui.ch_force_stereo.clicked.connect(self.slot_optionChanged) | ||||
| self.ui.ch_map_program_changes.clicked.connect(self.slot_optionChanged) | self.ui.ch_map_program_changes.clicked.connect(self.slot_optionChanged) | ||||
| self.ui.ch_use_chunks.clicked.connect(self.slot_optionChanged) | self.ui.ch_use_chunks.clicked.connect(self.slot_optionChanged) | ||||
| self.ui.ch_send_notes.clicked.connect(self.slot_optionChanged) | |||||
| self.ui.ch_send_program_changes.clicked.connect(self.slot_optionChanged) | self.ui.ch_send_program_changes.clicked.connect(self.slot_optionChanged) | ||||
| self.ui.ch_send_control_changes.clicked.connect(self.slot_optionChanged) | self.ui.ch_send_control_changes.clicked.connect(self.slot_optionChanged) | ||||
| self.ui.ch_send_channel_pressure.clicked.connect(self.slot_optionChanged) | self.ui.ch_send_channel_pressure.clicked.connect(self.slot_optionChanged) | ||||
| @@ -974,6 +976,9 @@ class PluginEdit(QDialog): | |||||
| self.ui.ch_force_stereo.setChecked(optsEnabled & PLUGIN_OPTION_FORCE_STEREO) | self.ui.ch_force_stereo.setChecked(optsEnabled & PLUGIN_OPTION_FORCE_STEREO) | ||||
| self.ui.ch_map_program_changes.setEnabled(optsAvailable & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) | self.ui.ch_map_program_changes.setEnabled(optsAvailable & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) | ||||
| self.ui.ch_map_program_changes.setChecked(optsEnabled & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) | self.ui.ch_map_program_changes.setChecked(optsEnabled & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) | ||||
| self.ui.ch_send_notes.setEnabled(optsAvailable & PLUGIN_OPTION_SKIP_SENDING_NOTES) | |||||
| self.ui.ch_send_notes.setChecked((self.ui.ch_send_notes.isEnabled() and | |||||
| (optsEnabled & PLUGIN_OPTION_SKIP_SENDING_NOTES) == 0x0)) | |||||
| self.ui.ch_send_control_changes.setEnabled(optsAvailable & PLUGIN_OPTION_SEND_CONTROL_CHANGES) | self.ui.ch_send_control_changes.setEnabled(optsAvailable & PLUGIN_OPTION_SEND_CONTROL_CHANGES) | ||||
| self.ui.ch_send_control_changes.setChecked(optsEnabled & PLUGIN_OPTION_SEND_CONTROL_CHANGES) | self.ui.ch_send_control_changes.setChecked(optsEnabled & PLUGIN_OPTION_SEND_CONTROL_CHANGES) | ||||
| self.ui.ch_send_channel_pressure.setEnabled(optsAvailable & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) | self.ui.ch_send_channel_pressure.setEnabled(optsAvailable & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) | ||||
| @@ -1251,6 +1256,9 @@ class PluginEdit(QDialog): | |||||
| widget = self.ui.ch_force_stereo | widget = self.ui.ch_force_stereo | ||||
| elif option == PLUGIN_OPTION_MAP_PROGRAM_CHANGES: | elif option == PLUGIN_OPTION_MAP_PROGRAM_CHANGES: | ||||
| widget = self.ui.ch_map_program_changes | widget = self.ui.ch_map_program_changes | ||||
| elif option == PLUGIN_OPTION_SKIP_SENDING_NOTES: | |||||
| widget = self.ui.ch_send_notes | |||||
| yesNo = not yesNo | |||||
| elif option == PLUGIN_OPTION_SEND_PROGRAM_CHANGES: | elif option == PLUGIN_OPTION_SEND_PROGRAM_CHANGES: | ||||
| widget = self.ui.ch_send_program_changes | widget = self.ui.ch_send_program_changes | ||||
| elif option == PLUGIN_OPTION_SEND_CONTROL_CHANGES: | elif option == PLUGIN_OPTION_SEND_CONTROL_CHANGES: | ||||
| @@ -1439,6 +1447,9 @@ class PluginEdit(QDialog): | |||||
| option = PLUGIN_OPTION_FORCE_STEREO | option = PLUGIN_OPTION_FORCE_STEREO | ||||
| elif sender == self.ui.ch_map_program_changes: | elif sender == self.ui.ch_map_program_changes: | ||||
| option = PLUGIN_OPTION_MAP_PROGRAM_CHANGES | option = PLUGIN_OPTION_MAP_PROGRAM_CHANGES | ||||
| elif sender == self.ui.ch_send_notes: | |||||
| option = PLUGIN_OPTION_SKIP_SENDING_NOTES | |||||
| clicked = not clicked | |||||
| elif sender == self.ui.ch_send_program_changes: | elif sender == self.ui.ch_send_program_changes: | ||||
| option = PLUGIN_OPTION_SEND_PROGRAM_CHANGES | option = PLUGIN_OPTION_SEND_PROGRAM_CHANGES | ||||
| elif sender == self.ui.ch_send_control_changes: | elif sender == self.ui.ch_send_control_changes: | ||||