Signed-off-by: falkTX <falktx@falktx.com>tags/v2.2.0-RC1
@@ -7,7 +7,7 @@ | |||
<x>0</x> | |||
<y>0</y> | |||
<width>537</width> | |||
<height>535</height> | |||
<height>525</height> | |||
</rect> | |||
</property> | |||
<property name="windowTitle"> | |||
@@ -405,6 +405,13 @@ | |||
</property> | |||
</widget> | |||
</item> | |||
<item> | |||
<widget class="QCheckBox" name="ch_send_notes"> | |||
<property name="text"> | |||
<string>Send Notes</string> | |||
</property> | |||
</widget> | |||
</item> | |||
<item> | |||
<widget class="QCheckBox" name="ch_send_program_changes"> | |||
<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; | |||
/*! | |||
* 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. | |||
* 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)); | |||
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) | |||
continue; | |||
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)) | |||
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 (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) | |||
@@ -193,6 +193,7 @@ public: | |||
options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; | |||
options |= PLUGIN_OPTION_SEND_PITCHBEND; | |||
options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | |||
options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||
return options; | |||
} | |||
@@ -1381,24 +1382,28 @@ public: | |||
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; | |||
} | |||
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; | |||
} | |||
case MIDI_STATUS_POLYPHONIC_AFTERTOUCH: | |||
if (pData->options & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) | |||
@@ -1749,6 +1754,8 @@ public: | |||
pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | |||
if (isPluginOptionEnabled(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; | |||
} | |||
@@ -645,6 +645,7 @@ public: | |||
options |= PLUGIN_OPTION_SEND_PITCHBEND; | |||
options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | |||
options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | |||
options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||
} | |||
return options; | |||
@@ -1200,6 +1201,8 @@ public: | |||
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) | |||
continue; | |||
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)) | |||
pData->options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | |||
if (isPluginOptionEnabled(options, PLUGIN_OPTION_SKIP_SENDING_NOTES)) | |||
pData->options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||
return true; | |||
} | |||
@@ -182,6 +182,7 @@ public: | |||
options |= PLUGIN_OPTION_SEND_PITCHBEND; | |||
options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | |||
options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | |||
options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||
} | |||
return options; | |||
@@ -1049,6 +1050,8 @@ public: | |||
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) | |||
continue; | |||
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; | |||
if (isPluginOptionEnabled(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)) | |||
@@ -519,6 +519,7 @@ public: | |||
options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; | |||
options |= PLUGIN_OPTION_SEND_PITCHBEND; | |||
options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | |||
options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||
} | |||
} | |||
@@ -1826,29 +1827,33 @@ public: | |||
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; | |||
} | |||
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; | |||
} | |||
case MIDI_STATUS_POLYPHONIC_AFTERTOUCH: | |||
if (pData->options & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) | |||
@@ -3037,6 +3042,8 @@ public: | |||
pData->options |= PLUGIN_OPTION_SEND_PITCHBEND; | |||
if (isPluginOptionEnabled(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_ALL_SOUND_OFF; | |||
options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | |||
options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||
} | |||
return options; | |||
@@ -4052,6 +4053,8 @@ public: | |||
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) | |||
continue; | |||
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; | |||
if (isPluginOptionEnabled(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) | |||
@@ -445,6 +445,9 @@ public: | |||
if (fDescriptor->supports & NATIVE_PLUGIN_SUPPORTS_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) | |||
options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | |||
else if (hasMidiProgs) | |||
@@ -2192,6 +2195,8 @@ public: | |||
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) | |||
continue; | |||
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)) | |||
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 (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) | |||
@@ -126,6 +126,7 @@ public: | |||
options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; | |||
options |= PLUGIN_OPTION_SEND_PITCHBEND; | |||
options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | |||
options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||
return options; | |||
} | |||
@@ -506,6 +507,8 @@ public: | |||
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) | |||
continue; | |||
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; | |||
if (isPluginOptionEnabled(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; | |||
} | |||
@@ -264,6 +264,7 @@ public: | |||
options |= PLUGIN_OPTION_SEND_PITCHBEND; | |||
options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | |||
options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; | |||
options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; | |||
} | |||
return options; | |||
@@ -1553,6 +1554,8 @@ public: | |||
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) | |||
continue; | |||
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; | |||
if (isPluginOptionEnabled(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) | |||
@@ -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. | |||
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. | |||
# 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 | |||
@@ -60,6 +60,7 @@ from carla_backend import ( | |||
PLUGIN_OPTION_SEND_PITCHBEND, | |||
PLUGIN_OPTION_SEND_ALL_SOUND_OFF, | |||
PLUGIN_OPTION_SEND_PROGRAM_CHANGES, | |||
PLUGIN_OPTION_SKIP_SENDING_NOTES, | |||
PARAMETER_DRYWET, | |||
PARAMETER_VOLUME, | |||
PARAMETER_BALANCE_LEFT, | |||
@@ -748,6 +749,7 @@ class PluginEdit(QDialog): | |||
self.ui.ch_force_stereo.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_send_notes.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_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_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_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.setChecked(optsEnabled & PLUGIN_OPTION_SEND_CONTROL_CHANGES) | |||
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 | |||
elif option == PLUGIN_OPTION_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: | |||
widget = self.ui.ch_send_program_changes | |||
elif option == PLUGIN_OPTION_SEND_CONTROL_CHANGES: | |||
@@ -1439,6 +1447,9 @@ class PluginEdit(QDialog): | |||
option = PLUGIN_OPTION_FORCE_STEREO | |||
elif sender == self.ui.ch_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: | |||
option = PLUGIN_OPTION_SEND_PROGRAM_CHANGES | |||
elif sender == self.ui.ch_send_control_changes: | |||