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

SynthBase

base class for all synth editors

Module Contents

class jdxi_editor.ui.editors.synth.base.SynthBase(midi_helper: jdxi_editor.midi.io.helper.MidiIOHelper | None = None, parent: PySide6.QtWidgets.QWidget = None)[source]

Bases: PySide6.QtWidgets.QWidget

base class for all synth editors

preset_type = None[source]
parent = None[source]
tone_names[source]
partial_editors[source]
sysex_data = None[source]
address = None[source]
partial_number = None[source]
bipolar_parameters = [][source]
controls: Dict[picomidi.sysex.parameter.address.AddressParameter, PySide6.QtWidgets.QWidget][source]
_midi_helper = None[source]
midi_requests = [][source]
sysex_composer[source]
property midi_helper: jdxi_editor.midi.io.helper.MidiIOHelper[source]
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

edit_tone_name()[source]

edit_tone_name

Returns:

None

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)

_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) None[source]

send_tone_name

Parameters:
  • tone_name – str Name of the Tone/preset

  • parameter_cls – AddressParameter

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.RolandSysExAddress = 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.

_on_parameter_changed(param: picomidi.sysex.parameter.address.AddressParameter, display_value: int, address: jdxi_editor.midi.data.address.address.RolandSysExAddress = None) None[source]

Handle parameter change event, convert display 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.RolandSysExAddress = None, show_value_label: bool = True) jdxi_editor.ui.widgets.slider.Slider[source]

Create a slider for an address parameter with proper display 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 display in the combo box

  • values – list of values corresponding to the options

  • 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 display 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: jdxi_editor.jdxi.synth.type.JDXiSynth = 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