jdxi_editor.ui.windows.midi.debugger

MIDI Debugger for monitoring and interacting with MIDI commands and SysEx messages.

This class provides a graphical user interface (GUI) for sending, decoding, and logging MIDI messages, including SysEx messages. It allows the user to input MIDI commands in hexadecimal format, send them to a connected MIDI device, and view the decoded output for further analysis. The debugger supports both standard MIDI messages and Roland-specific address-based SysEx messages, including their parameters, values, and checksums.

Key Features: - Send MIDI messages in hexadecimal format to a MIDI device. - Decode Roland SysEx messages with detailed information, including areas, commands, and parameters. - Display decoded message data in a readable table format. - Log responses from MIDI devices, including message sending success and failure information. - Validate checksum for SysEx messages to ensure message integrity. - Provides an easy-to-use interface with instructions, buttons, and output areas for effective debugging.

jdxi_editor.ui.windows.midi.debugger.SYSEX_AREAS

Mappings for SysEx area IDs to their human-readable names.

Type:

dict

jdxi_editor.ui.windows.midi.debugger.COMMANDS

Mappings for SysEx command IDs to their human-readable names.

Type:

dict

jdxi_editor.ui.windows.midi.debugger.SECTIONS

Mappings for SysEx section IDs to their human-readable names.

Type:

dict

jdxi_editor.ui.windows.midi.debugger.GROUPS

Mappings for SysEx group IDs to their human-readable names.

Type:

dict

jdxi_editor.ui.windows.midi.debugger.PARAMETERS

Mappings for SysEx parameter IDs to their human-readable names.

Type:

dict

jdxi_editor.ui.windows.midi.debugger.__init__(self, midi_helper, parent=None)

Initializes the MIDI debugger with a MIDI helper.

jdxi_editor.ui.windows.midi.debugger._decode_sysex_new(self, message)

Decodes a SysEx message in the new format.

jdxi_editor.ui.windows.midi.debugger._decode_sysex_15(self, message)

Decodes a 15-byte SysEx address message.

jdxi_editor.ui.windows.midi.debugger._decode_sysex(self, message)

Decodes a general SysEx message.

jdxi_editor.ui.windows.midi.debugger._decode_current(self)

Decodes the currently entered MIDI message from the input field.

jdxi_editor.ui.windows.midi.debugger._send_commands(self)

Sends the entered MIDI commands to the connected MIDI device.

jdxi_editor.ui.windows.midi.debugger.log_response(self, text)

Logs a response message to the response log.

jdxi_editor.ui.windows.midi.debugger.handle_midi_response(self, message)

Handles incoming MIDI messages and logs them.

This class is useful for MIDI developers, musicians, and anyone working with MIDI devices, providing both real-time MIDI debugging and SysEx message analysis capabilities.

Attributes

T

Classes

EnumWithAddress

Base class for protocol classes.

MIDIDebugger

Functions

parse_sysex_byte(→ str)

Get the name of a SysEx byte value using a given enum class.

parse_sysex_message(→ Tuple[str, int])

Parse a SysEx message and return the name and byte value of the specified parameter.

parse_parameter(→ str)

Parses JD-Xi tone parameters from SysEx data for Digital, Analog, and Digital Common types.

Module Contents

jdxi_editor.ui.windows.midi.debugger.T[source]
class jdxi_editor.ui.windows.midi.debugger.EnumWithAddress[source]

Bases: Protocol

Base class for protocol classes.

Protocol classes are defined as:

class Proto(Protocol):
    def meth(self) -> int:
        ...

Such classes are primarily used with static type checkers that recognize structural subtyping (static duck-typing), for example:

class C:
    def meth(self) -> int:
        return 0

def func(x: Proto) -> int:
    return x.meth()

func(C())  # Passes static type check

See PEP 544 for details. Protocol classes decorated with @typing.runtime_checkable act as simple-minded runtime protocols that check only the presence of given attributes, ignoring their type signatures. Protocol classes can be generic, they are defined as:

class GenProto(Protocol[T]):
    def meth(self) -> T:
        ...
classmethod message_position() int[source]

Get the position of the message in the SysEx message. :return: int - the position of the message

classmethod get_parameter_by_address(address: int) T | None[source]

Get the enum member by address. :param address: int :return: Optional[T] - the enum member or None if not found

jdxi_editor.ui.windows.midi.debugger.parse_sysex_byte(byte_value: int, enum_cls: EnumWithAddress) str[source]

Get the name of a SysEx byte value using a given enum class.

Parameters:
  • byte_value – int

  • enum_cls – EnumWithAddress

Returns:

name of the parameter or “Unknown” if not found

jdxi_editor.ui.windows.midi.debugger.parse_sysex_message(message: bytes, enum_cls: EnumWithAddress) Tuple[str, int][source]

Parse a SysEx message and return the name and byte value of the specified parameter.

Parameters:
  • message – str

  • enum_cls – EnumWithAddress

Returns:

Tuple containing the name and byte value

jdxi_editor.ui.windows.midi.debugger.parse_parameter(offset: int, parameter_type: picomidi.sysex.parameter.address.AddressParameter) str[source]

Parses JD-Xi tone parameters from SysEx data for Digital, Analog, and Digital Common types.

Parameters:
  • offset – int - The offset in the SysEx message where the parameter starts.

  • parameter_type – AddressParameter - The parameter type to parse.

Returns:

str name

class jdxi_editor.ui.windows.midi.debugger.MIDIDebugger(midi_helper: jdxi_editor.midi.io.helper.MidiIOHelper, parent: PySide6.QtWidgets.QWidget = None)[source]

Bases: PySide6.QtWidgets.QMainWindow

midi_helper[source]
command_input[source]
send_button[source]
clear_button[source]
decode_button[source]
decoded_text[source]
response_log[source]
sysex_parser[source]
_decode_current()[source]

Decode the currently entered SysEx message(s)

_decode_sysex_15(message)[source]

Decode a 15-byte Roland address SysEx message.

_send_commands() None[source]

Send all valid SysEx MIDI messages from user-entered text input.

send_message(match: str) None[source]

Send a SysEx message based on the provided hex string.

Parameters:

match – str - Hex string representing the SysEx message

Returns:

None

log_response(text)[source]

Add text to response log

handle_midi_response(message)[source]

Handle incoming MIDI message