from jdxi_editor.midi.conversion.adsr import ParamBinding
from jdxi_editor.midi.conversion.value import ValueTransform
from jdxi_editor.midi.data.digital.oscillator import DigitalOscillatorWidgetTypes
from jdxi_editor.midi.data.parameter.digital.spec import JDXiMidiDigital as Digital
[docs]
PWM_BINDINGS = {
Digital.Param.OSC_PULSE_WIDTH: ParamBinding(
ValueTransform.FRACTION,
lambda s, p: s.partial_editors[p]
.oscillator_tab.widget_for(DigitalOscillatorWidgetTypes.PWM)
.pulse_width_control,
),
Digital.Param.OSC_PULSE_WIDTH_MOD_DEPTH: ParamBinding(
ValueTransform.FRACTION,
lambda s, p: s.partial_editors[p]
.oscillator_tab.widget_for(DigitalOscillatorWidgetTypes.PWM)
.mod_depth_control,
),
}
[docs]
def resolve_pwm(s, p, param):
osc = s.partial_editors[p].oscillator_tab
if hasattr(osc, "controls") and param in osc.tuning:
return osc.tuning[param]
pwm_widget = osc.widget_for(DigitalOscillatorWidgetTypes.PWM)
if pwm_widget:
if param == Digital.Param.OSC_PULSE_WIDTH:
return pwm_widget.pulse_width_control
if param == Digital.Param.OSC_PULSE_WIDTH_MOD_DEPTH:
return pwm_widget.mod_depth_control