jdxi_editor.ui.editors.synth.base
Synth Control Base Module
This module defines the SynthControlBase class, a Qt-based widget that provides MIDI control functionality for synthesizer parameters in the JD-Xi editor.
It facilitates: - Sending and receiving MIDI SysEx messages. - Handling parameter updates through UI elements (sliders, combo boxes, spin boxes, switches). - Managing MIDI helper instances for communication.
Dependencies: - PySide6 for GUI components. - jdxi_editor.midi for MIDI communication. - jdxi_editor.ui.widgets for UI elements.
Classes: - SynthControlBase: A base widget for controlling synth parameters via MIDI.
Classes
base class for all synth editors |
Functions
|
Ensure tooltip is a str; param.get_tooltip() may return a list (e.g. options). |
|
Ensure label is a str; spec.label / display_name may be a list. |
Module Contents
- jdxi_editor.ui.editors.synth.base._tooltip_to_str(tooltip) str[source]
Ensure tooltip is a str; param.get_tooltip() may return a list (e.g. options).
- jdxi_editor.ui.editors.synth.base._label_to_str(label) str[source]
Ensure label is a str; spec.label / display_name may be a list.
- class jdxi_editor.ui.editors.synth.base.SynthBase(midi_helper: jdxi_editor.midi.io.helper.MidiIOHelper | None = None, parent: PySide6.QtWidgets.QWidget = None, address: jdxi_editor.midi.data.address.address.JDXiSysExAddress | None = None, controls=None)[source]
Bases:
PySide6.QtWidgets.QWidgetbase class for all synth editors
- _control_registries: Dict[tuple, jdxi_editor.ui.widgets.controls.registry.ControlRegistry][source]
- address: jdxi_editor.midi.data.address.address.JDXiSysExAddress | None = None[source]
- property midi_helper: jdxi_editor.midi.io.helper.MidiIOHelper[source]
- get_control_registry(synth_type: str, partial_no: int = 1) jdxi_editor.ui.widgets.controls.registry.ControlRegistry[source]
Return the ControlRegistry singleton instance (shared across all partials). Note: ControlRegistry is now a singleton, so all partials share the same registry.
- Parameters:
synth_type – JDXiSynth.ANALOG_SYNTH, DIGITAL_SYNTH_1, DIGITAL_SYNTH_2, DRUM_KIT
partial_no – Partial number (e.g. 1, 2 for digital; 1..N for drums)
- Returns:
ControlRegistry singleton instance
- _get_address_from_hierarchy(parameter_cls: picomidi.sysex.parameter.address.AddressParameter = None) jdxi_editor.midi.data.address.address.JDXiSysExAddress | None[source]
Get address from self, parent, or parent.parent if available. If no address is found and we’re dealing with a ProgramEditor or ProgramCommonParam, create a program address.
- Parameters:
parameter_cls – Optional[AddressParameter] Parameter class hint (e.g., ProgramCommonParam)
- Returns:
Optional[RolandSysExAddress] The address if found, None otherwise
- send_control_change(control_change: jdxi_editor.midi.data.control_change.base.ControlChange, value: int)[source]
Send MIDI CC message
- send_raw_message(message: bytes) bool[source]
Send a raw MIDI message using the MIDI helper.
- Parameters:
message – bytes MIDI message to send
- Returns:
bool True on success, False otherwise
- data_request(channel=None, program=None)[source]
Request the current value of the NRPN parameter from the device.
- Parameters:
channel – int MIDI channel to send the request on (discarded)
program – int Program number to request data for (discarded)
- _build_sliders(specs: list[jdxi_editor.ui.widgets.spec.SliderSpec])[source]
build sliders
- _build_combo_boxes(specs: list[jdxi_editor.ui.widgets.spec.ComboBoxSpec])[source]
build combo boxes
- _build_switches(specs: list[jdxi_editor.ui.widgets.spec.SwitchSpec])[source]
- _on_midi_message_received(message: mido.Message) None[source]
Handle incoming MIDI messages
- Parameters:
message – mido.Message MIDI message received
- Returns:
None
- send_tone_name(parameter_cls: picomidi.sysex.parameter.address.AddressParameter, tone_name: str, address: jdxi_editor.midi.data.address.address.JDXiSysExAddress = None) None[source]
send_tone_name
- Parameters:
parameter_cls – AddressParameter Parameter class containing TONE_NAME parameters
tone_name – str Name of the Tone/preset
address – Optional[RolandSysExAddress] Address to use, or None to get from hierarchy
Send the characters of the tone name to SysEx parameters.
- send_midi_parameter(param: picomidi.sysex.parameter.address.AddressParameter, value: int, address: jdxi_editor.midi.data.address.address.JDXiSysExAddress = None) bool[source]
Send MIDI parameter with error handling
- Parameters:
address – RolandSysExAddress
param – AddressParameter the parameter to send
value – int value to send
- Returns:
bool True on success, False otherwise
- get_controls_as_dict()[source]
Get the current values of self.controls as a dictionary.
- Returns:
dict A dictionary of control parameter names and their values.
- _add_tab(*, key: jdxi_editor.midi.data.parameter.digital.spec.TabDefinitionMixin, widget: PySide6.QtWidgets.QWidget) None[source]
- _on_parameter_changed(param: picomidi.sysex.parameter.address.AddressParameter, display_value: int, address: jdxi_editor.midi.data.address.address.JDXiSysExAddress = None) None[source]
Handle parameter change event, convert digital value to MIDI value,
- Parameters:
param – AddressParameter Parameter that was changed
display_value – int Display value from the UI control
- Returns:
None
- _create_parameter_slider(param: picomidi.sysex.parameter.address.AddressParameter, label: str, vertical: bool = False, initial_value: int | None = 0, address: jdxi_editor.midi.data.address.address.JDXiSysExAddress = None, show_value_label: bool = True) jdxi_editor.ui.widgets.slider.Slider[source]
Create a slider for an address parameter with proper digital conversion.
- Parameters:
param – AddressParameter Parameter to create slider for
label – str label for the slider
initial_value – int initial value for the slider
vertical – bool whether the slider is vertical
address – RolandSysExAddress
show_value_label – str whether to show the value label
- Returns:
Slider
- _create_parameter_combo_box(param: picomidi.sysex.parameter.address.AddressParameter, label: str = None, options: list = None, values: list = None, show_label: bool = True) jdxi_editor.ui.widgets.combo_box.combo_box.ComboBox[source]
Create a combo box for an address parameter with options and values.
- Parameters:
param – AddressParameter
label – str label for the combo box
options – list of options to digital in the combo box
values – list of values corresponding to the options (or options if options is None)
show_label – bool whether to show the label
- Returns:
ComboBox
- _create_parameter_spin_box(param: picomidi.sysex.parameter.address.AddressParameter, label: str = None) jdxi_editor.ui.widgets.spin_box.spin_box.SpinBox[source]
Create address spin box for address parameter with proper digital conversion
- Parameters:
param – AddressParameter Parameter to create spin box for
label – str label for the spin box
- Returns:
SpinBox
- _create_parameter_switch(param: picomidi.sysex.parameter.address.AddressParameter, label: str, values: list[str]) jdxi_editor.ui.widgets.switch.switch.Switch[source]
Create a switch for an address parameter with specified label and values.
- Parameters:
param – AddressParameter Parameter to create switch for
label – str label for the switch
values – list of values for the switch
- Returns:
Switch
- _init_synth_data(synth_type: str = JDXiSynth.DIGITAL_SYNTH_1, partial_number: int | None = 0)[source]
Initialize synth-specific data.
- _update_slider(param: picomidi.sysex.parameter.address.AddressParameter, midi_value: int, successes: list = None, failures: list = None, slider: PySide6.QtWidgets.QWidget = None) None[source]
Update slider based on parameter and value.
- Parameters:
param – AddressParameter
midi_value – int value
successes – list
failures – list
- Returns:
None
- _update_switch(param: picomidi.sysex.parameter.address.AddressParameter, midi_value: int, successes: list = None, failures: list = None) None[source]
Update switch based on parameter and value.
- Parameters:
param – AddressParameter
midi_value – int value
successes – list
failures – list
- Returns:
None
- _update_partial_slider(partial_no: int, param: picomidi.sysex.parameter.address.AddressParameter, value: int, successes: list = None, failures: list = None) None[source]
Update the slider for a specific partial based on the parameter and value.
- Parameters:
partial_no – int
param – AddressParameter
value – int
successes – list list of successful updates
failures – list list of failed updates
- Returns:
None