jdxi_editor.ui.editors
Editor modules for JD-Xi parameters
Submodules
- jdxi_editor.ui.editors.address
- jdxi_editor.ui.editors.analog
- jdxi_editor.ui.editors.arpeggio
- jdxi_editor.ui.editors.base
- jdxi_editor.ui.editors.config
- jdxi_editor.ui.editors.digital
- jdxi_editor.ui.editors.drum
- jdxi_editor.ui.editors.effects
- jdxi_editor.ui.editors.helpers
- jdxi_editor.ui.editors.main
- jdxi_editor.ui.editors.midi_player
- jdxi_editor.ui.editors.pattern
- jdxi_editor.ui.editors.playlist
- jdxi_editor.ui.editors.preset
- jdxi_editor.ui.editors.program
- jdxi_editor.ui.editors.synth
- jdxi_editor.ui.editors.validation
Classes
Analog Synth Editor UI. |
|
Arpeggio Editor Window |
|
class for Digital Synth Editor containing 3 partials |
|
Editor for JD-Xi Drum Kit parameters |
|
Effects Editor Window |
|
Vocal Effects Window Class |
|
Program Editor Window |
Package Contents
- class jdxi_editor.ui.editors.AnalogSynthEditor(midi_helper: jdxi_editor.midi.io.helper.MidiIOHelper | None = None, preset_helper: jdxi_editor.ui.preset.helper.JDXiPresetHelper | None = None, parent: PySide6.QtWidgets.QWidget | None = None)[source]
Bases:
jdxi_editor.ui.editors.base.editor.BaseSynthEditorAnalog Synth Editor UI.
- SUB_OSC_TYPE_MAP
- SYNTH_SPEC
- preset_helper = None
- main_window = None
- analog = True
- adsr_mapping
- pitch_env_mapping
- pwm_mapping
- refresh_shortcut
- filter_switch_map
- osc_waveform_map
- _create_sections()[source]
Create the sections for the Analog Synth Editor. Each section in its own try/except so one failure does not prevent others from showing.
- _build_parameter_mappings()[source]
Populate adsr_mapping, pitch_env_mapping, pwm_mapping only when the corresponding sections exist.
- class jdxi_editor.ui.editors.ArpeggioEditor(midi_helper: jdxi_editor.midi.io.helper.MidiIOHelper, preset_helper: jdxi_editor.ui.preset.helper.JDXiPresetHelper | None = None, parent: jdxi_editor.ui.windows.jdxi.instrument.JDXiInstrument | None = None)[source]
Bases:
jdxi_editor.ui.editors.synth.simple.BasicEditorArpeggio Editor Window
- EDITOR_PARAM
- midi_helper
- preset_helper = None
- address
- partial_number = 0
- controls: Dict[picomidi.sysex.parameter.address.AddressParameter, jdxi_editor.ui.common.QWidget]
- base_widget
- editor_helper
- midi_requests
- showEvent(event: PySide6.QtGui.QShowEvent) None[source]
Request current settings from the instrument when the editor is shown.
- dispatch_sysex_to_area(json_sysex_data: str) None[source]
Parse SysEx JSON and update Arpeggio controls.
- class jdxi_editor.ui.editors.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
- preset_changed
- FILTER_MODE_MAP
- main_layout = None
- partial_number = None
- current_data = None
- preset_helper = None
- main_window = None
- synth_number = 1
- adsr_parameters
- pitch_env_parameters
- pwm_parameters
- refresh_shortcut
- _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.DrumCommonEditor(midi_helper: jdxi_editor.midi.io.helper.MidiIOHelper | None = None, preset_helper: jdxi_editor.ui.preset.helper.JDXiPresetHelper | None = None, parent: jdxi_editor.ui.windows.jdxi.instrument.JDXiInstrument | None = None)[source]
Bases:
jdxi_editor.ui.editors.synth.editor.SynthEditorEditor for JD-Xi Drum Kit parameters
- presets_parts_tab_widget = None
- preset_helper = None
- midi_helper = None
- partial_number = 0
- sysex_current_data = None
- sysex_previous_data = None
- partial_mapping
- main_window = None
- partial_editors
- partial_tab_widget
- instrument_image_label = None
- instrument_title_label = None
- refresh_shortcut
- _handle_program_change(channel: int, program: int)[source]
Handle program change messages by requesting updated data
- Parameters:
channel – int
program – int
- update_partial_number(index: int)[source]
Update the current partial number based on tab index
- Parameters:
index – int partial number
- _update_controls(partial_no: int, sysex_data: dict, successes: list, failures: list) None[source]
apply partial ui updates
- Parameters:
partial_no – int
sysex_data – dict
successes – list
failures – list
- Returns:
- _update_common_controls(partial: int, sysex_data: Dict, successes: list = None, failures: list = None)[source]
Update the UI components for tone common and modify parameters.
- Parameters:
partial – int
sysex_data – Dictionary containing SysEx data
successes – List of successful parameters
failures – List of failed parameters
- Returns:
None
- class jdxi_editor.ui.editors.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.BasicEditorEffects Editor Window
- tab_widget = None
- midi_helper
- preset_helper = None
- _sysex_dispatcher
- EFX1_PARAMETERS
- EFX2_PARAMETERS
- midi_requests
- delay_params = None
- efx2_additional_params
- base_widget
- editor_helper
- tabs = None
- address
- sysex_composer
- 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).
- _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).
- _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.
- class jdxi_editor.ui.editors.VocalFXEditor(midi_helper: jdxi_editor.midi.io.helper.MidiIOHelper | None = None, preset_helper: jdxi_editor.ui.preset.helper.JDXiPresetHelper = None, parent: jdxi_editor.ui.common.QWidget | None = None)[source]
Bases:
jdxi_editor.ui.editors.synth.simple.BasicEditorVocal Effects Window Class
- preset_helper = None
- address
- base_widget
- editor_helper
- controls: Dict[picomidi.sysex.parameter.address.AddressParameter, jdxi_editor.ui.common.QWidget]
- tab_widget = None
- midi_requests
- showEvent(event: PySide6.QtGui.QShowEvent) None[source]
Request current settings from the instrument when the editor is shown.
- dispatch_sysex_to_area(json_sysex_data: str) None[source]
Parse SysEx JSON and update Vocal FX controls.
- _apply_vocal_effect_tooltips() None[source]
Set tooltips for vocal effect controls from VocalEffectsData.
- _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/Effects).
- _build_common_layout_spec() jdxi_editor.ui.widgets.layout.WidgetLayoutSpec[source]
Build layout spec for Common tab.
- _update_vocal_effect_stack(index: int) None[source]
Switch Vocoder & Auto Pitch stack to the page for the selected effect type.
- _create_vocal_effect_stack_section() jdxi_editor.ui.common.QWidget[source]
Create Vocoder & Auto Pitch tab with QStackedWidget (OFF/VOCODER/AUTO-PITCH).
- _build_vocal_effect_layout_spec() jdxi_editor.ui.widgets.layout.WidgetLayoutSpec[source]
Build layout spec for Vocal FX tab (Vocoder settings).
- _create_vocal_effect_section() jdxi_editor.ui.common.QWidget[source]
Create Vocal FX tab (spec-driven).
- _build_mixer_layout_spec() jdxi_editor.ui.widgets.layout.WidgetLayoutSpec[source]
Build layout spec for Mixer tab.
- _build_auto_pitch_layout_spec() jdxi_editor.ui.widgets.layout.WidgetLayoutSpec[source]
Build layout spec for Auto Pitch tab.
- class jdxi_editor.ui.editors.ProgramEditor(midi_helper: jdxi_editor.midi.io.helper.MidiIOHelper | None = None, parent: jdxi_editor.ui.common.QWidget | None = None, preset_helper: jdxi_editor.ui.preset.helper.JDXiPresetHelper = None)[source]
Bases:
jdxi_editor.ui.editors.synth.simple.BasicEditorProgram Editor Window
- TEMPORARY_AREA_HANDLERS
- program_changed
- title_right_vlayout = None
- program_list = None
Initialize the ProgramEditor
- Parameters:
midi_helper – Optional[MidiIOHelper]
parent – Optional[QWidget]
preset_helper – JDXIPresetHelper
- midi_helper = None
- preset_helper = None
- channel
- midi_requests
- spec
- default_image = ''
- instrument_icon_folder = ''
- instrument_title_label
- layout = None
- midi_channel = 0
- genre_label = None
- program_name = ''
- bank_combo_box = None
- save_button = None
- title_label = None
- bank_label = None
- program_label = None
- genre_combo_box = None
- program_preset: jdxi_editor.ui.editors.preset.widget.PresetWidget | None = None
- preset_type = None
- programs
- _actual_preset_list
- controls: Dict[picomidi.sysex.parameter.address.AddressParameter, jdxi_editor.ui.common.QWidget]
- mixer_widget: jdxi_editor.ui.editors.program.mixer.section.ProgramMixer | None = None
- program_group_widget: jdxi_editor.ui.editors.program.group.ProgramGroup | None = None
- user_programs_widget: jdxi_editor.ui.editors.program.user_programs_widget.UserProgramsWidget | None = None
- playlist_widget: jdxi_editor.ui.editors.playlist.table.PlaylistTable | None = None
- playlist_editor_widget: jdxi_editor.ui.editors.playlist.editor.PlaylistEditor | None = None
- on_category_changed(_: int) None[source]
Handle category selection change - no longer needed, handled by SearchableFilterableComboBox.
- on_preset_type_changed(index: int) None[source]
on_preset_type_changed
- Parameters:
index – int
Handle preset type selection change Note: This delegates to PresetWidget’s on_preset_type_changed, but also updates ProgramEditor’s internal state.
- set_channel_and_preset_lists(preset_type: str) None[source]
set_channel_and_preset_lists
- Parameters:
preset_type
- Returns:
None
- _update_preset_combo_box() None[source]
Update the SearchableFilterableComboBox with current preset list. Called when preset type changes. Note: This method is now handled by PresetWidget._update_preset_combo_box(), but kept here for backward compatibility if needed.
- _populate_programs(search_text: str = '') None[source]
Populate the program list with available presets. Now delegates to populate_programs() which uses _update_program_combo_box().
- Parameters:
search_text – str
- Returns:
None
- _populate_presets(search_text: str = '') None[source]
Populate the program list with available presets. Now handled by SearchableFilterableComboBox, so this just updates the combo box.
- Parameters:
search_text – str (ignored, handled by SearchableFilterableComboBox)
- Returns:
None
- _init_synth_data(synth_type: str = JDXiSynth.DIGITAL_SYNTH_1, partial_number: int | None = 0) None[source]
- Parameters:
synth_type – JDXiSynth
partial_number – int
- Returns:
None
Initialize synth-specific data
- update_tone_name_for_synth(tone_name: str, synth_type: str) None[source]
Update the tone name.
- Parameters:
tone_name – str
synth_type – str
- set_current_program_name(program_name: str, synth_type: str = None) None[source]
Set the current program name in the file label
- Parameters:
program_name – str
synth_type – str (optional), discarded for now
- Returns:
None
- _update_program_combo_box() None[source]
Update the SearchableFilterableComboBox with current program list. Handles both ROM banks (A-D) and user banks (E-H) with SQLite integration.
- populate_programs(search_text: str = '')[source]
Populate the program list with available presets. Now handled by SearchableFilterableComboBox, so this just updates the combo box. Uses SQLite database to ensure all user bank programs are loaded correctly.
- add_user_banks(filtered_list: list, bank: str, search_text: str = None) None[source]
Add user banks to the program list. Only adds generic entries for programs that don’t exist in the database. Uses SQLite database for reliable lookups. :param search_text: :param filtered_list: list of programs already loaded from database :param bank: str
- _get_table_style() str[source]
Get custom styling for tables with rounded corners and charcoal embossed cells.
- Returns:
str CSS style string
- _on_user_program_loaded(program: jdxi_editor.midi.program.program.JDXiProgram) None[source]
Handle when a user program is loaded from the table.
- Parameters:
program – JDXiProgram that was loaded
- _on_playlist_changed() None[source]
Handle when a playlist is created, deleted, or updated. Refreshes the playlist editor combo if it exists.
- _on_playlist_program_loaded(program: jdxi_editor.midi.program.program.JDXiProgram) None[source]
Handle when a program is loaded from the playlist editor. Updates UI to reflect the loaded program.
- Parameters:
program – JDXiProgram that was loaded
- _populate_playlist_editor_combo() None[source]
Populate the playlist editor combo (callback for playlist editor widget).
- _get_parent_instrument() jdxi_editor.ui.common.QWidget | None[source]
Get the parent instrument widget for accessing MidiFileEditor.
- Returns:
Optional[QWidget] parent instrument or None
- on_bank_changed(_: int) None[source]
Handle bank selection change - no longer needed, handled by SearchableFilterableComboBox.
- on_program_number_changed(index: int) None[source]
Handle program number selection change. :param index: int
- load_program()[source]
Load the selected program based on bank and number. Delegates to ProgramGroupWidget’s load_program method.
- update_current_synths(program_details: jdxi_editor.midi.program.program.JDXiProgram) None[source]
Update the current synth labels in the mixer widget. :param program_details: JDXiProgram :return: None
- load_preset(program_number: int) None[source]
Load preset by program change and refresh UI.
- Parameters:
program_number – Preset ID (e.g., 1 for “001”)
- Returns:
None
- on_genre_changed(_: int) None[source]
Handle genre selection change - no longer needed, handled by SearchableFilterableComboBox.
- _normalize_program_common(sysex_data: dict) dict[source]
Normalize special Program Common address case.
- dispatch_sysex_to_area(json_sysex_data: str) None[source]
Dispatch SysEx data to the appropriate area for processing.
- Parameters:
json_sysex_data
- Returns:
None
- _handle_sliders(sysex_data: dict, temporary_area: str | None, successes: list[Any], failures: list[Any])[source]
Slider handling
- get_mixer_slider_by_param(slider_param: picomidi.sysex.parameter.address.AddressParameter) jdxi_editor.ui.common.QWidget | None[source]
get mixer slider
- _update_common_controls(partial_number: int, sysex_data: Dict, successes: list = None, failures: list = None, temporary_area: str = 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
temporary_area – str TEMPORARY_PROGRAM, DIGITAL_SYNTH_1, etc.
- Returns:
None
- _update_slider(param: picomidi.sysex.parameter.address.AddressParameter, midi_value: int, successes: list = None, failures: list = None, slider: PySide6.QtWidgets.QSlider = None) None[source]
Update slider based on parameter and value.
- Parameters:
param – AddressParameter
midi_value – int value
successes – list
failures – list
- Returns:
None