jdxi_editor.ui.editors.effects.common

Module: effects_editor

This module defines the EffectsEditor class, which provides a PySide6-based user interface for editing effects parameters on the Roland JD-Xi synthesizer. It extends SynthEditor and allows users to modify various effects settings, including Effect 1, Effect 2, Delay, and Reverb.

Classes:
  • EffectsEditor: A QWidget subclass for managing and editing JD-Xi effect parameters.

Dependencies:
  • os

  • logging

  • PySide6.QtWidgets (etc.)

  • PySide6.QtCore (Qt)

  • PySide6.QtGui (QPixmap)

  • jdxi_manager modules for MIDI and parameter handling

Features:
  • Displays effects parameters with interactive controls.

  • Supports updating instrument images dynamically.

  • Sends MIDI messages to update effect settings in real-time.

  • Organizes effect parameters into categorized tabs.

    AddressParameterEffect1.EFX1_PARAM_17, AddressParameterEffect1.EFX1_PARAM_18, AddressParameterEffect1.EFX1_PARAM_19, AddressParameterEffect1.EFX1_PARAM_20, AddressParameterEffect1.EFX1_PARAM_21, AddressParameterEffect1.EFX1_PARAM_22, AddressParameterEffect1.EFX1_PARAM_23, AddressParameterEffect1.EFX1_PARAM_24, AddressParameterEffect1.EFX1_PARAM_25, AddressParameterEffect1.EFX1_PARAM_26, AddressParameterEffect1.EFX1_PARAM_27, AddressParameterEffect1.EFX1_PARAM_28, AddressParameterEffect1.EFX1_PARAM_29, AddressParameterEffect1.EFX1_PARAM_30, AddressParameterEffect1.EFX1_PARAM_31,

    AddressParameterEffect1.EFX2_PARAM_17, AddressParameterEffect1.EFX2_PARAM_18, AddressParameterEffect1.EFX2_PARAM_19, AddressParameterEffect1.EFX2_PARAM_20, AddressParameterEffect1.EFX2_PARAM_21, AddressParameterEffect1.EFX2_PARAM_22, AddressParameterEffect1.EFX2_PARAM_23, AddressParameterEffect1.EFX2_PARAM_24, AddressParameterEffect1.EFX2_PARAM_25, AddressParameterEffect1.EFX2_PARAM_26, AddressParameterEffect1.EFX2_PARAM_27, AddressParameterEffect1.EFX2_PARAM_28, AddressParameterEffect1.EFX2_PARAM_29, AddressParameterEffect1.EFX2_PARAM_30, AddressParameterEffect1.EFX2_PARAM_31,

Classes

EffectsCommonEditor

Effects Editor Window

Module Contents

class jdxi_editor.ui.editors.effects.common.EffectsCommonEditor(midi_helper: jdxi_editor.midi.io.helper.MidiIOHelper, preset_helper: jdxi_editor.ui.preset.helper.JDXiPresetHelper = None, parent=None)[source]

Bases: jdxi_editor.ui.editors.synth.simple.BasicEditor

Effects Editor Window

tab_widget = None[source]
midi_helper[source]
preset_helper = None[source]
_sysex_dispatcher[source]
EFX1_PARAMETERS[source]
EFX2_PARAMETERS[source]
midi_requests[source]
delay_params = None[source]
efx2_additional_params[source]
base_widget[source]
editor_helper[source]
tabs = None[source]
address[source]
sysex_composer[source]
showEvent(event: PySide6.QtGui.QShowEvent) None[source]

Request current settings from the instrument when the editor is shown.

_apply_effect_tooltips() None[source]

Set tooltips for effect controls from EffectsData.effect_tooltips.

update_flanger_rate_note_controls() None[source]

Update Flanger rate/note controls based on rate note switch.

update_phaser_rate_note_controls() None[source]

Update Phaser rate/note controls based on rate note switch.

update_efx1_labels(effect_type: int)[source]

Switch Effect 1 polymorphic stack to the page for the selected effect type.

Parameters:

effect_type – int (0=Thru, 1=Distortion, 2=Fuzz, 3=Compressor, 4=Bit Crusher)

update_efx2_labels(effect_type: int)[source]

Switch Effect 2 polymorphic stack to the page for the selected effect type.

Parameters:

effect_type – int - SysEx value (0, 5, 6, 7, 8) or combo index (0-4)

_build_effect1_common_layout_spec() jdxi_editor.ui.widgets.layout.WidgetLayoutSpec[source]

Common Effect 1 controls (Type, Level, sends, Output Assign).

_build_effect1_layout_spec_for_type(effect_type: int) jdxi_editor.ui.widgets.layout.WidgetLayoutSpec[source]

Build layout spec for a specific Effect 1 type (polymorphic).

_build_widgets_from_spec(spec: jdxi_editor.ui.widgets.layout.WidgetLayoutSpec) jdxi_editor.ui.widgets.group.WidgetGroups[source]

Build WidgetGroups from a layout spec (same paradigm as Arpeggiator).

_wrap_section(title: str, content: jdxi_editor.ui.common.QWidget) PySide6.QtWidgets.QGroupBox[source]

Wrap a section in a QGroupBox for the 2-column grid layout.

_create_effect1_section()[source]

Create Effect 1 section (polymorphic: stacked pages per effect type).

_build_effect2_common_layout_spec() jdxi_editor.ui.widgets.layout.WidgetLayoutSpec[source]

Common Effect 2 controls (Type, Level, sends).

_build_effect2_layout_spec_for_type(effect_type: int) jdxi_editor.ui.widgets.layout.WidgetLayoutSpec[source]

Build layout spec for a specific Effect 2 type (polymorphic).

_create_effect2_section()[source]

Create Effect 2 section (polymorphic: stacked pages per effect type).

_build_delay_layout_spec() jdxi_editor.ui.widgets.layout.WidgetLayoutSpec[source]

Build layout spec for Delay tab (spec-driven widgets).

_create_delay_tab()[source]

Create Delay tab (spec-driven).

_update_delay_time_note_controls() None[source]

Enable Time [ms] or Note based on Time/Note mode switch.

_build_reverb_layout_spec() jdxi_editor.ui.widgets.layout.WidgetLayoutSpec[source]

Build layout spec for Reverb tab (spec-driven widgets).

_create_reverb_section()[source]

Create Reverb section (spec-driven).

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

Handle parameter value changes from UI controls.

send_midi_parameter(param: picomidi.sysex.parameter.address.AddressParameter, value: int) bool[source]

Send MIDI parameter with error handling

Parameters:
  • param – AddressParameter

  • value – int value

Returns:

bool True on success, False otherwise

dispatch_sysex_to_area(json_sysex_data: str) None[source]

Thin adapter: parse → validate → dispatch