Source code for jdxi_editor.midi.message.jdxi
"""
JD-Xi Model ID and Header List Constants
=======================================
This module contains constants for JD-Xi model IDs and header lists.
Constants Used:
- ModelID: Model ID constants
- RolandID: Roland ID constants
Usage Example:
[<ModelID.MODEL_ID_1: 0x00>, <ModelID.MODEL_ID_1: 0x00>, <ModelID.MODEL_ID_1: 0x00>, <ModelID.MODEL_ID_4: 0x0E>]
>>> JDXiSysexHeader.to_list()
[<RolandID.ROLAND_ID: 65>, <RolandID.DEVICE_ID: 16>, <ModelID.MODEL_ID_1: 0x00>, <ModelID.MODEL_ID_1: 0x00>, <ModelID.MODEL_ID_1: 0x00>, <ModelID.MODEL_ID_4: 0x0E>]
"""
from jdxi_editor.midi.data.address.address import ModelID
from jdxi_editor.midi.data.address.sysex import RolandID
[docs]
JD_XI_MODEL_ID = [
ModelID.MODEL_ID_1,
ModelID.MODEL_ID_2,
ModelID.MODEL_ID_3,
ModelID.MODEL_ID_4,
]
[docs]
class JDXiSysexHeader:
"""
JD-Xi System Exclusive Message Header
This class provides a structured way to work with JD-Xi SysEx headers,
replacing the old JD_XI_HEADER_LIST constant.
Usage:
>>> header = JDXiSysexHeader.to_list()
>>> header_bytes = JDXiSysexHeader.to_bytes()
>>> header_len = len(JDXiSysexHeader.to_list())
"""
@classmethod
[docs]
def to_list(cls) -> list[int]:
"""
Convert the header to a list of integers.
:return: list[int] Header bytes as a list [RolandID, DeviceID, ModelID1-4]
"""
return [
cls.ID.ROLAND_ID,
cls.ID.DEVICE_ID,
cls.MODEL.MODEL_ID_1,
cls.MODEL.MODEL_ID_2,
cls.MODEL.MODEL_ID_3,
cls.MODEL.MODEL_ID_4,
]
@classmethod
[docs]
def to_bytes(cls) -> bytes:
"""
Convert the header to bytes.
:return: bytes Header bytes
"""
return bytes(cls.to_list())
@classmethod
[docs]
def length(cls) -> int:
"""
Get the length of the header in bytes.
:return: int Number of bytes in the header
"""
return len(cls.to_list())
# Deprecated: Use JDXiSysexHeader.to_list() instead