jdxi_editor.ui.editors.helpers.program

MIDI Program Management and Calculation Utilities

This module provides utilities for retrieving and calculating information related to MIDI programs, including the ability to get program details by ID, calculate MSB (Most Significant Byte), LSB (Least Significant Byte), and Program Change (PC) values based on bank and program numbers,

as well as logging useful program and MIDI data.

Functions:
  • get_program_index_by_id(program_id: str) -> Optional[int]:

    Retrieves the index of a program by its ID from the PROGRAM_LIST.

  • get_program_by_id(program_id: str) -> Optional[Dict[str, str]]:

    Retrieves a program by its ID from the PROGRAM_LIST.

  • calculate_midi_values(bank: str, program_number: int) -> tuple:

    Calculates the MSB, LSB, and PC based on the given bank and program number.

  • calculate_index(bank: str, program_number: int) -> int:

    Calculates the program index based on the bank and program number.

  • log_midi_info(msb: int, lsb: int, pc: int):

    Logs the MSB, LSB, and PC values for MIDI operations.

  • log_program_info(program_name: str, program_id: Optional[str] = None, program_details: Optional[Dict] = None):

    Logs information about the loaded program.

  • get_msb_lsb_pc(program_number: int) -> tuple:

    Retrieves the MSB, LSB, and PC for a specific program number from the PROGRAM_LIST.

Constants:
  • PROGRAM_LIST: A list of dictionaries containing MIDI program information used throughout the functions.

Logging:

This module uses Python’s logging module to log key operations and errors, such as retrieving programs, calculating MIDI values, and verifying program values within valid ranges.

Usage Example:
>>> msb, lsb, pc = calculate_midi_values("A", 5)
>>> log_midi_info(msb, lsb, pc)

Functions

get_program_index_by_id(→ Optional[int])

Retrieve the index of a program by its ID.

get_program_by_id(...)

Retrieve a program by its ID from the database.

get_program_by_bank_and_number(...)

Retrieve a program by its bank letter and number

get_program_id_by_name(→ Optional[str])

get_program_id_by_name

add_program(→ bool)

add_program

load_programs(→ List[Dict[str, str]])

load programs

save_programs(→ None)

save_programs

get_program_number_by_name(→ Optional[int])

Retrieve a program's number (without bank letter) by its name from JDXiProgramList.PROGRAM_LIST

get_program_name_by_id(→ Optional[str])

Retrieve a program name by its ID from JDXiProgramList.PROGRAM_LIST

get_program_parameter_value(→ Optional[str])

Retrieve a specific parameter value from a program by its ID

calculate_midi_values(→ tuple[int, int, int])

Calculate MSB, LSB, and PC based on bank and program number

calculate_index(→ int)

Calculate the index based on bank and program number

get_msb_lsb_pc(→ tuple[int, int, int])

Get MSB, LSB, and PC values for a program at the given index.

Module Contents

jdxi_editor.ui.editors.helpers.program.get_program_index_by_id(program_id: str) int | None[source]

Retrieve the index of a program by its ID.

Parameters:

program_id – str

Returns:

int

jdxi_editor.ui.editors.helpers.program.get_program_by_id(program_id: str) jdxi_editor.jdxi.program.program.JDXiProgram | None[source]

Retrieve a program by its ID from the database. Uses SQLite for faster lookups.

Parameters:

program_id – str

Returns:

Optional[JDXiProgram]

jdxi_editor.ui.editors.helpers.program.get_program_by_bank_and_number(bank: str, program_number: int) jdxi_editor.jdxi.program.program.JDXiProgram | None[source]

Retrieve a program by its bank letter and number

Parameters:
  • bank – str

  • program_number – int

Returns:

Optional[JDXiProgram]

jdxi_editor.ui.editors.helpers.program.get_program_id_by_name(name: str) str | None[source]

get_program_id_by_name

Parameters:

name – str

Returns:

Optional[str]

jdxi_editor.ui.editors.helpers.program.add_program(program_list: List[jdxi_editor.jdxi.program.program.JDXiProgram], new_program: jdxi_editor.jdxi.program.program.JDXiProgram) bool[source]

add_program

Parameters:
  • program_list – List[JDXiProgram]

  • new_program – JDXiProgram

Returns:

jdxi_editor.ui.editors.helpers.program.load_programs() List[Dict[str, str]][source]

load programs

Returns:

list

jdxi_editor.ui.editors.helpers.program.save_programs(program_list: List[Dict[str, str]]) None[source]

save_programs

Parameters:

program_list – List[Dict[str, str]]

Returns:

None

jdxi_editor.ui.editors.helpers.program.get_program_number_by_name(program_name: str) int | None[source]

Retrieve a program’s number (without bank letter) by its name from JDXiProgramList.PROGRAM_LIST

Parameters:

program_name – str

Returns:

int

jdxi_editor.ui.editors.helpers.program.get_program_name_by_id(program_id: str) str | None[source]

Retrieve a program name by its ID from JDXiProgramList.PROGRAM_LIST

Parameters:

program_id – int

Returns:

str

jdxi_editor.ui.editors.helpers.program.get_program_parameter_value(parameter: str, program_id: str) str | None[source]

Retrieve a specific parameter value from a program by its ID

Parameters:
  • parameter – str

  • program_id – str

Returns:

jdxi_editor.ui.editors.helpers.program.calculate_midi_values(bank: str, program_number: int) tuple[int, int, int][source]

Calculate MSB, LSB, and PC based on bank and program number

Parameters:
  • bank – str

  • program_number – int (1-based, should be 1-64)

Returns:

tuple[int, int, int] msb lsb pc

jdxi_editor.ui.editors.helpers.program.calculate_index(bank: str, program_number: int) int[source]

Calculate the index based on bank and program number

Parameters:
  • bank – str

  • program_number

Returns:

int

jdxi_editor.ui.editors.helpers.program.get_msb_lsb_pc(program_number: int) tuple[int, int, int][source]

Get MSB, LSB, and PC values for a program at the given index.

Parameters:

program_number – Index in the program list (0-based).

Returns:

Tuple of (MSB, LSB, PC) values as integers.

Raises:
  • IndexError – If the index is out of range.

  • ValueError – If any of the values can’t be converted to int.