jdxi_editor.ui.editors.digital.editor

Digital Synth Editor for the Roland JD-Xi.

This module provides the UI components for editing digital synth parameters on the Roland JD-Xi. The editor supports three partials (voices) with individual parameter control and common parameters that affect all partials.

Classes:
DigitalSynthEditor: Main editor class for digital synth parameters
  • Handles MIDI communication for parameter changes

  • Manages UI state for all digital synth controls

  • Provides preset loading and management

  • Supports real-time parameter updates via SysEx

Features:
  • Three independent partial editors

  • Common parameter controls (portamento, unison, legato, etc.)

  • Preset management and loading

  • Real-time MIDI parameter updates

  • ADSR envelope controls for both amplitude and filter

  • Oscillator waveform selection

  • Partial enabling/disabling and selection

Dependencies:
  • PySide6 for UI components

  • qtawesome for icons

  • Custom MIDI handling classes

  • Digital synth parameter definitions

Classes

DigitalSynthEditor

class for Digital Synth Editor containing 3 partials

DigitalSynth2Editor

class for Digital Synth Editor containing 3 partials

DigitalSynth3Editor

class for Digital Synth Editor containing 3 partials

Module Contents

class jdxi_editor.ui.editors.digital.editor.DigitalSynthEditor(midi_helper: jdxi_editor.midi.io.helper.MidiIOHelper | None = None, preset_helper: jdxi_editor.jdxi.preset.helper.JDXiPresetHelper = None, synth_number: int = 1, parent: PySide6.QtWidgets.QWidget = None)[source]

Bases: jdxi_editor.ui.editors.synth.editor.SynthEditor

class for Digital Synth Editor containing 3 partials

preset_changed[source]
instrument_image_group: PySide6.QtWidgets.QGroupBox | None = None[source]
instrument_title_label: PySide6.QtWidgets.QLabel | None = None[source]
partial_number = None[source]
current_data = None[source]
midi_helper = None[source]
preset_helper[source]
main_window = None[source]
controls: Dict[jdxi_editor.midi.data.parameter.digital.DigitalPartialParam | jdxi_editor.midi.data.parameter.digital.DigitalCommonParam, PySide6.QtWidgets.QWidget][source]
synth_number = 1[source]
refresh_shortcut[source]
adsr_parameters[source]
pitch_env_parameters[source]
pwm_parameters[source]
setup_ui()[source]

set up user interface

_create_partial_tab_widget(container_layout: PySide6.QtWidgets.QVBoxLayout, midi_helper: jdxi_editor.midi.io.helper.MidiIOHelper) None[source]

Create the partial tab widget for the digital synth editor.

Parameters:
  • container_layout – QVBoxLayout for the main container

  • midi_helper – MiodiIOHelper instance for MIDI communication

Returns:

None

_on_partial_state_changed(partial: jdxi_editor.midi.data.parameter.digital.DigitalPartialParam, enabled: bool, selected: bool) None[source]

Handle the state change of a partial (enabled/disabled and selected/unselected).

Parameters:
  • partial – The partial to modify

  • enabled – Whether the partial is enabled (ON/OFF)

  • selected – Whether the partial is selected

Returns:

None

set_partial_state(partial: jdxi_editor.midi.data.parameter.digital.DigitalPartialParam, enabled: bool = True, selected: bool = True) bool | None[source]

Set the state of a partial (enabled/disabled and selected/unselected).

Parameters:
  • partial – The partial to modify

  • enabled – Whether the partial is enabled (ON/OFF)

  • selected – Whether the partial is selected

Returns:

True if successful, False otherwise

_initialize_partial_states()[source]

Initialize partial states with defaults Default: Partial 1 enabled and selected, others disabled

_handle_special_params(partial_no: int, param: picomidi.sysex.parameter.address.AddressParameter, value: int) None[source]

Handle special parameters that require additional UI updates.

Parameters:
  • partial_no – int

  • param – AddressParameter

  • value – int

Returns:

None

_update_partial_controls(partial_no: int, sysex_data: dict, successes: list, failures: list) None[source]

Apply updates to the UI components based on the received SysEx data.

Parameters:
  • partial_no – int

  • sysex_data – dict

  • successes – list

  • failures – list

Returns:

None

_update_filter_state(partial_no: int, value: int) None[source]

Update the filter state of a partial based on the given value.

Parameters:
  • partial_no – int

  • value – int

Returns:

None

_update_common_controls(partial_number: int, sysex_data: Dict, successes: list = None, failures: list = None) None[source]

Update the UI components for tone common and modify parameters.

Parameters:
  • partial_number – int partial number

  • sysex_data – Dictionary containing SysEx data

  • successes – List of successful parameters

  • failures – List of failed parameters

Returns:

None

_update_modify_controls(partial_number: int, sysex_data: dict, successes: list = None, failures: list = None) None[source]

Update the UI components for tone common and modify parameters.

Parameters:
  • partial_number – int partial number

  • sysex_data – dict Dictionary containing SysEx data

  • successes – list List of successful parameters

  • failures – list List of failed parameters

Returns:

None

_update_partial_adsr_widgets(partial_no: int, param: jdxi_editor.midi.data.parameter.digital.DigitalPartialParam, midi_value: int, successes: list = None, failures: list = None)[source]

Update the ADSR widget for a specific partial based on the parameter and value.

Parameters:
  • partial_no – int Partial number

  • param – AddressParameter address

  • midi_value – int value

Returns:

None

_update_partial_pitch_env_widgets(partial_no: int, param: jdxi_editor.midi.data.parameter.digital.DigitalPartialParam, midi_value: int, successes: list = None, failures: list = None)[source]

Update the Pitch Env widget for a specific partial based on the parameter and value.

Parameters:
  • partial_no – int Partial number

  • param – AddressParameter address

  • midi_value – int value

  • successes – list = None,

  • failures – list = None,

Returns:

None

_update_pulse_width_widgets(partial_no: int, param: jdxi_editor.midi.data.parameter.digital.DigitalPartialParam, midi_value: int, successes: list = None, failures: list = None)[source]

Update the Pitch Env widget for a specific partial based on the parameter and value.

Parameters:
  • partial_no – int Partial number

  • param – AddressParameter address

  • midi_value – int value

  • successes – list = None,

  • failures – list = None,

Returns:

None

_update_partial_selection_switch(param: picomidi.sysex.parameter.address.AddressParameter, value: int, successes: list, failures: list) None[source]

Update the partial selection switches based on parameter and value.

Parameters:
  • param – AddressParameter

  • value – int

  • successes – list

  • failures – list

Returns:

None

_update_partial_selected_state(param: picomidi.sysex.parameter.address.AddressParameter, value: int, successes: list, failures: list) None[source]

Update the partial selected state based on parameter and value.

Parameters:
  • param – AddressParameter

  • value – int

  • successes – list

  • failures – list

  • debug – bool

Returns:

None

_update_waveform_buttons(partial_number: int, value: int)[source]

Update the waveform buttons based on the OSC_WAVE value with visual feedback

Parameters:
  • partial_number – int

  • value – int

Returns:

class jdxi_editor.ui.editors.digital.editor.DigitalSynth2Editor(midi_helper: jdxi_editor.midi.io.helper.MidiIOHelper | None = None, preset_helper: jdxi_editor.jdxi.preset.helper.JDXiPresetHelper = None, synth_number: int = 2, parent: PySide6.QtWidgets.QWidget = None)[source]

Bases: DigitalSynthEditor

class for Digital Synth Editor containing 3 partials

preset_changed[source]
class jdxi_editor.ui.editors.digital.editor.DigitalSynth3Editor(midi_helper: jdxi_editor.midi.io.helper.MidiIOHelper | None = None, preset_helper: jdxi_editor.jdxi.preset.helper.JDXiPresetHelper = None, synth_number: int = 3, parent: PySide6.QtWidgets.QWidget = None)[source]

Bases: DigitalSynthEditor

class for Digital Synth Editor containing 3 partials

preset_changed[source]