Source code for jdxi_editor.core.synth.data

"""
JDXISynthData

Data Model for JDXi Synth

"""

from dataclasses import dataclass, field
from typing import Dict, Optional, Union

from jdxi_editor.core.synth.instrument_display import InstrumentDisplayConfig
from jdxi_editor.core.synth.midi_config import MidiSynthConfig
from jdxi_editor.midi.data.address.address import (
    Address,
    JDXiSysExAddress,
    JDXiSysExOffsetProgramLMB,
)
from jdxi_editor.midi.data.parameter.analog.address import AnalogParam
from jdxi_editor.midi.data.parameter.digital import DigitalCommonParam
from jdxi_editor.midi.data.parameter.drum.common import DrumCommonParam
from picomidi.constant import Midi


@dataclass
[docs] class JDXISynthData(MidiSynthConfig, InstrumentDisplayConfig): """Synth Data"""
[docs] msb: int
[docs] umb: int
[docs] lmb: int
[docs] address: JDXiSysExAddress = field(init=False)
[docs] common_parameters: Optional[ Union[DrumCommonParam, AnalogParam, DigitalCommonParam] ] = None
[docs] def __post_init__(self) -> None: """Post Init""" self.address = JDXiSysExAddress( msb=self.msb, umb=self.umb, lmb=self.lmb, lsb=Midi.value.ZERO )
@property
[docs] def group_map(self) -> Dict[int, Address]: """ Group Map :return: Dict[int, AddressOffsetProgramLMB] The group map Default: Only common address (override in subclasses). """ return {0: JDXiSysExOffsetProgramLMB.COMMON}
[docs] def get_partial_lmb(self, partial_number: int) -> JDXiSysExOffsetProgramLMB: """ Resolve the address for a given partial number. :param partial_number: int The partial number :return: AddressOffsetProgramLMB The address offset """ return self.group_map.get(partial_number, JDXiSysExOffsetProgramLMB.COMMON)