jdxi_editor.midi.utils.byte

byte data processing

Functions

split_16bit_value_to_bytes(→ list[int])

Splits a 16-bit integer into two 8-bit bytes: [LMB, LSB]

split_8bit_value_to_nibbles(→ list[int])

Splits an 8-bit integer into two 4-bit nibbles.

encode_roland_7bit(→ list[int])

Encodes a 28-bit value into 4x 7-bit MIDI bytes (MSB first).

decode_roland_4byte(→ int)

decode_roland_4byte

encode_roland_4byte(→ list[int])

encode_roland_4byte

split_16bit_value_to_nibbles(→ list[int])

Splits an integer into exactly 4 nibbles (4-bit values), padding with zeros if necessary

split_32bit_value_to_nibbles(→ list[int])

Splits an integer into 8 nibbles (4-bit values), for 32-bit Roland SysEx DT1 data.

join_nibbles_to_32bit(→ int)

Combines a list of 8 nibbles (4-bit values) into a 32-bit integer

join_nibbles_to_16bit(→ int)

Combines a list of 4 nibbles (4-bit values) into a 16-bit integer

encode_14bit_to_7bit_midi_bytes(→ list[int])

Encodes a 14-bit integer into two 7-bit MIDI-safe bytes.

Module Contents

jdxi_editor.midi.utils.byte.split_16bit_value_to_bytes(value: int) list[int][source]

Splits a 16-bit integer into two 8-bit bytes: [LMB, LSB]

Parameters:

value – int (0–65535)

Returns:

list[int] [Most Significant Byte, Least Significant Byte]

jdxi_editor.midi.utils.byte.split_8bit_value_to_nibbles(value: int) list[int][source]

Splits an 8-bit integer into two 4-bit nibbles.

Parameters:

value – int (0–255)

Returns:

list[int] with two 4-bit values [upper_nibble, lower_nibble]

jdxi_editor.midi.utils.byte.encode_roland_7bit(value: int) list[int][source]

Encodes a 28-bit value into 4x 7-bit MIDI bytes (MSB first).

jdxi_editor.midi.utils.byte.decode_roland_4byte(data_bytes: list[int]) int[source]

decode_roland_4byte

Parameters:

data_bytes – list[int]

Returns:

int

decode_roland_4byte([0x08, 0x00, 0x00, 0x01]) # → 1048577

jdxi_editor.midi.utils.byte.encode_roland_4byte(value: int) list[int][source]

encode_roland_4byte

Parameters:

value – int

Returns:

list[int]

>>> encode_roland_4byte(0)  # [0x00, 0x00, 0x00, 0x00]
[0, 0, 0, 0]
>>> encode_roland_4byte(1)  # [0x00, 0x00, 0x00, 0x01]
[0, 0, 0, 1]
>>> encode_roland_4byte(1048576)  # [0x00, 0x40, 0x00, 0x00]
[0, 64, 0, 0]
jdxi_editor.midi.utils.byte.split_16bit_value_to_nibbles(value: int) list[int][source]

Splits an integer into exactly 4 nibbles (4-bit values), padding with zeros if necessary

Parameters:

value – int

Returns:

list[int]

jdxi_editor.midi.utils.byte.split_32bit_value_to_nibbles(value: int) list[int][source]

Splits an integer into 8 nibbles (4-bit values), for 32-bit Roland SysEx DT1 data.

Parameters:

value – int

Returns:

list[int]

jdxi_editor.midi.utils.byte.join_nibbles_to_32bit(nibbles: list[int]) int[source]

Combines a list of 8 nibbles (4-bit values) into a 32-bit integer

Parameters:

nibbles – list[int]

Returns:

int

jdxi_editor.midi.utils.byte.join_nibbles_to_16bit(nibbles: list[int]) int[source]

Combines a list of 4 nibbles (4-bit values) into a 16-bit integer

Parameters:

nibbles – list[int]

Returns:

int

jdxi_editor.midi.utils.byte.encode_14bit_to_7bit_midi_bytes(value: int) list[int][source]

Encodes a 14-bit integer into two 7-bit MIDI-safe bytes. MIDI SysEx requires all data bytes to be in the range 0x00–0x7F. # Example usage:

>>> value = 0x1234  # 4660 in decimal
>>> data_bytes = encode_14bit_to_7bit_midi_bytes(value)
>>> print(data_bytes)  # Output: [0x24, 0x34] → [36, 52]
[36, 52]