Source code for jdxi_editor.midi.data.parameter.digital.helpers.digital

"""Digital"""

from jdxi_editor.midi.data.parameter.digital.partial import (
    DigitalPartialParam,
)


[docs] def parse_digital_parameters(data: list) -> dict: """ Parses JD-Xi tone parameters from SysEx data, including Oscillator, Filter, and Amplitude parameters. :param data: bytes SysEx message containing tone parameters. :return: dict Parsed parameters. """ def safe_get(index: int, default: int = 0) -> int: """ Safely retrieve values from `data` :param index: int The index :param default: int The default value :return: int The value """ tone_name_length = 12 index = ( index + tone_name_length ) # shift the index by 12 to account for the tone name return data[index] if index < len(data) else default parameters = {} # Mapping DigitalParameter Enum members to their respective positions in SysEx data for param in DigitalPartialParam: # Use the parameter's address from the enum and fetch the value from the data parameters[param.name] = safe_get(param.address) return parameters