Source code for jdxi_editor.midi.data.address.jdxi_addresses

"""
sysex utils:
# Get full address for Temporary Drum Kit (Offset from TEMP_TONE_BASE)
base = JDXiMemoryAddress.TEMP_TONE_BASE
drum_offset = (0x10, 0x00, 0x00)
drum_address = base.offset(drum_offset)

# Build a DT1 message to write data to it
data = [0x01, 0x02, 0x03]
sysex_msg = JDxiSysExBuilder.build_dt1(drum_address, data)
"""

from enum import Enum
from typing import List, Tuple


[docs] class JDXiAddress(Enum): """Base Addresses (4-byte addresses)"""
[docs] SETUP = (0x01, 0x00, 0x00, 0x00)
[docs] SYSTEM = (0x02, 0x00, 0x00, 0x00)
[docs] TEMP_PROGRAM = (0x18, 0x00, 0x00, 0x00)
[docs] TEMP_TONE_BASE = (0x19, 0x00, 0x00, 0x00)
[docs] TEMP_TONE_PART1 = (0x19, 0x00, 0x00, 0x00)
[docs] TEMP_TONE_PART2 = (0x19, 0x20, 0x00, 0x00)
[docs] TEMP_TONE_ANALOG = (0x19, 0x40, 0x00, 0x00)
[docs] TEMP_TONE_DRUMS = (0x19, 0x60, 0x00, 0x00)
[docs] PROGRAM = (0x18, 0x00, 0x00, 0x00)
[docs] def offset(self, offset: Tuple[int, int, int]) -> Tuple[int, int, int, int]: base = self.value full = [base[0], base[1] + offset[0], base[2] + offset[1], base[3] + offset[2]] return tuple(full)
# Address Offsets for Sub-sections
[docs] SYSTEM_OFFSETS = { "common": (0x00, 0x00, 0x00), "controller": (0x00, 0x03, 0x00), }
[docs] TEMP_TONE_OFFSETS = { "supernatural": (0x01, 0x00, 0x00), "analog": (0x02, 0x00, 0x00), "drums": (0x10, 0x00, 0x00), }
[docs] PROGRAM_OFFSETS = { "common": (0x00, 0x00, 0x00), "vocal_effect": (0x00, 0x01, 0x00), "effect_1": (0x00, 0x02, 0x00), "effect_2": (0x00, 0x04, 0x00), "delay": (0x00, 0x06, 0x00), "reverb": (0x00, 0x08, 0x00), "part_digital1": (0x00, 0x20, 0x00), "part_digital2": (0x00, 0x21, 0x00), "part_analog": (0x00, 0x22, 0x00), "part_drums": (0x00, 0x23, 0x00), "zone_digital1": (0x00, 0x30, 0x00), "zone_digital2": (0x00, 0x31, 0x00), "zone_analog": (0x00, 0x32, 0x00), "zone_drums": (0x00, 0x33, 0x00), "controller": (0x00, 0x40, 0x00), }
[docs] class JDxiSysExBuilder: """JDxiSysExBuilder"""
[docs] MODEL_ID = [0x00, 0x00, 0x00, 0x0E]
@staticmethod
[docs] def build_dt1(address: Tuple[int, int, int, int], data: List[int]) -> List[int]: return [ 0xF0, 0x41, 0x10, 0x00, 0x00, 0x00, 0x0E, 0x12, # DT1 command *address, *data, 0xF7, ]