Source code for jdxi_editor.midi.conversion.adsr

from dataclasses import dataclass
from typing import Any, Callable

from PySide6.QtWidgets import QWidget

from jdxi_editor.midi.conversion.value import ValueTransform
from jdxi_editor.midi.data.parameter.digital import DigitalPartialParam
from jdxi_editor.midi.data.parameter.digital.spec import JDXiMidiDigital as Digital


@dataclass(frozen=True)
[docs] class ParamBinding:
[docs] transform: ValueTransform
[docs] resolver: Callable[[Any, int], QWidget] # (self, partial_no) -> control
[docs] ADSR_BINDINGS: dict[DigitalPartialParam, ParamBinding] = { Digital.Param.AMP_ENV_ATTACK_TIME: ParamBinding( ValueTransform.MS, lambda s, p: s.partial_editors[p].amp_tab.adsr_widget.attack_control, ), Digital.Param.AMP_ENV_SUSTAIN_LEVEL: ParamBinding( ValueTransform.FRACTION, lambda s, p: s.partial_editors[p].amp_tab.adsr_widget.sustain_control, ), Digital.Param.FILTER_ENV_RELEASE_TIME: ParamBinding( ValueTransform.MS, lambda s, p: s.partial_editors[p].filter_tab.adsr_widget.release_control, ), }