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
class for Digital Synth Editor containing 3 partials |
|
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.ui.preset.helper.JDXiPresetHelper = None, synth_number: int = 1, parent: jdxi_editor.ui.windows.jdxi.instrument.JDXiInstrument = None)[source]
Bases:
jdxi_editor.ui.editors.base.editor.BaseSynthEditorclass for Digital Synth Editor containing 3 partials
- _setup_tabs(container_layout: Any, 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 – MidiIOHelper instance for MIDI communication
- Returns:
None
- _on_partial_state_changed(partial: jdxi_editor.midi.data.digital.DigitalPartial, enabled: bool, selected: bool) None[source]
Handle the state change of a partial (enabled/disabled and selected/unselected).
- Parameters:
partial – DigitalPartial The partial to modify
enabled – bool Whether the partial is enabled (ON/OFF)
selected – Whether the partial is selected
- Returns:
None
- set_partial_state(partial: jdxi_editor.midi.data.digital.DigitalPartial, 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 (DigitalPartial enum)
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_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_partial_control(partial_no: int, param: jdxi_editor.midi.data.parameter.digital.DigitalPartialParam, midi_value: int, bindings: dict, successes: list, failures: list)[source]
- _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_new(partial_no: int, param: jdxi_editor.midi.data.parameter.digital.DigitalPartialParam, midi_value: int, successes: list = None, failures: list = None)[source]
- _update_partial_pitch_env_widgets_new(partial_no: int, param: jdxi_editor.midi.data.parameter.digital.DigitalPartialParam, midi_value: int, successes: list = None, failures: list = None)[source]
- _update_pulse_width_widgets_new(partial_no: int, param: jdxi_editor.midi.data.parameter.digital.DigitalPartialParam, midi_value: int, successes: list = None, failures: list = None)[source]
- _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
- _get_partial_param_control_map(partial_no: int) Dict[str, jdxi_editor.ui.common.QWidget][source]
Build param name -> widget map for this partial (same pattern as adsr_map / pitch_env_map). All section widgets are stored in the partial’s controls dict.
- _update_partial_slider_digital(partial_no: int, param: jdxi_editor.midi.data.parameter.digital.DigitalPartialParam, value: int, successes: list = None, failures: list = None) None[source]
Update a partial’s slider/control from SysEx. Uses the same param object as the sections (Digital.Param.<name>) so pe.controls.get(param) resolves the widget by key.
pe.controls (partial_editor.controls) is the panel’s shared dict, keyed by Digital.Param (DigitalPartialParam) class attributes. Sections (oscillator, filter, amp, LFO, mod LFO) add entries when they build widgets, e.g.: - Oscillator: OSC_WAVEFORM, OSC_WAVE_VARIATION, OSC_PITCH, OSC_DETUNE, … - Filter: FILTER_CUTOFF, FILTER_SLOPE, FILTER_RESONANCE, FILTER_* from
FilterWidget and from SLIDER_GROUPS[“filter”] sliders.
Amp, LFO, Mod LFO: their respective params.
Param must be the same object as the key (use getattr(Digital.Param, name)).
- _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:
- _update_filter_mode_buttons(partial_number: int, value: int)[source]
Update the filter mode buttons based on the FILTER_MODE_SWITCH 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.ui.preset.helper.JDXiPresetHelper = None, synth_number: int = 2, parent: jdxi_editor.ui.common.QWidget = None)[source]
Bases:
DigitalSynthEditorclass for Digital Synth Editor containing 3 partials