Skip to main content

CLI tool for working with the Mega Drive MIDI Interface (MDMI)

Project description

Mega Drive MIDI Interface CLI

PyPI PyPI - Python Version PyPI - License Build

CLI for controlling the Mega Drive MIDI Interface (MDMI). Helps you load presets from instrument files, clear presets, list WOPN instruments, and test connectivity.

Features

  • Load presets from instrument files:
    • DefleMask preset versions 8, 9 and 11
    • WOPN versions 1 and 2, as used by libOPNMIDI
    • TFI
  • Dump presets from MDMI to files (DMP or TFI format)
  • Dump FM channel parameters from MDMI to files (DMP or TFI format)
  • Clear presets. Individual user presets or all presets at once
  • List WOPN instruments
  • Connectivity testing: Ping/pong functionality to test MDMI connectivity
  • Performance testing: Continuous latency measurement with statistics and histogram generation

Installation

Latest version from PyPI:

pip install mdmi-cli

Usage

Load a preset

# Load TFI preset to program 0
mdmi load-preset example.tfi --program 0

# Load DMP preset to program 5
mdmi load-preset example.dmp --program 5

# Load specific WOPN instrument to program 10
mdmi load-preset soundbank.wopn --program 10 --bank 0 --instrument 5 --bank-type melody

Dump presets

# Dump preset from program 5 to DMP file
mdmi dump-preset --program 5 --format dmp --filename my_preset.dmp

# Dump preset with auto-generated filename (preset_5.dmp)
mdmi dump-preset --program 5

# Dump preset to TFI file
mdmi dump-preset --program 10 --format tfi --filename my_preset.tfi

Dump FM channel parameters

# Dump FM channel parameters from MIDI channel 5 to DMP file
mdmi dump-channel --channel 5 --format dmp --filename channel_5.dmp

# Dump with auto-generated filename (channel_05.dmp)
mdmi dump-channel --channel 5

# Dump to TFI file
mdmi dump-channel --channel 3 --format tfi --filename channel_3.tfi

WOPN file management

# List contents of a WOPN file (first 10 instruments per bank)
mdmi list-wopn soundbank.wopn

# List all instruments in WOPN file
mdmi list-wopn soundbank.wopn --full

# Load percussion instrument from WOPN
mdmi load-preset soundbank.wopn --program 20 --bank 0 --instrument 3 --bank-type percussion

Clear presets

# Clear preset at program 5
mdmi clear-preset --program 5

# Clear all presets (with confirmation)
mdmi clear-all-presets

# Clear all presets (skip confirmation)
mdmi clear-all-presets --confirm

Test connectivity

# Continuously ping MDMI (stop with Ctrl+C)
mdmi ping

# Send exactly 5 pings
mdmi ping -n 5

# Add 16 bytes of extra packet data
mdmi ping --size 16

# Use a custom timeout
mdmi ping --timeout 10.0

ping now behaves like a standard network ping: it runs continuously by default, supports -n/--count to stop after a fixed number of packets, and supports --size to append additional packet data after the ping ID.

Performance testing

# Run continuous ping/pong latency test (stop with Ctrl+C)
mdmi perf-test

# Run test for specific duration with custom interval
mdmi perf-test --duration 30 --interval 0.05

# Customize histogram filename
mdmi perf-test --hist-filename my_latency_test.png

# Test with custom timeout for individual pings
mdmi perf-test --timeout 1.0 --duration 60

List available MIDI ports

# List all available MIDI input and output ports
mdmi list-ports

Common Options

All commands support these common options:

MIDI Port Selection

# Use specific MIDI ports instead of environment variables
mdmi load-preset example.tfi --program 0 --midi-out "IAC Driver Bus 1"

# Commands with bidirectional communication support input ports
mdmi ping --midi-out "IAC Driver Bus 1" --midi-in "IAC Driver Bus 2"
mdmi dump-preset --program 5 --midi-out "Port 1" --midi-in "Port 2"

Dry Run

# Test with fake interface (no real MIDI hardware required)
mdmi load-preset example.tfi --program 0 --dry-run
mdmi perf-test --dry-run --duration 5
mdmi ping --dry-run

Timeout

# Custom timeouts for bidirectional commands
mdmi ping --timeout 10.0
mdmi dump-preset --program 3 --timeout 5.0

Configuration

Environment Variables

  • MDMI_MIDI_OUT: Default MIDI output port name
  • MDMI_MIDI_IN: Default MIDI input port name
  • MDMI_MIDI_PORT: Legacy fallback for MIDI output port

Command-line Options

  • --midi-out TEXT: MIDI output port name (overrides environment variables)
  • --midi-in TEXT: MIDI input port name for bidirectional commands (overrides MDMI_MIDI_IN)
  • --dry-run: Use fake MIDI interface for testing
  • --timeout FLOAT: Timeout for bidirectional commands (default varies by command)

Development

Build

# Install cli (from source)
make install

# Run tests
make test

Release

  1. Bump the version in mdmi/__init__.py
  2. Add a version tag: git tag v...
  3. Push the tags: git push --tags

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mdmi_cli-1.0.1.tar.gz (38.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mdmi_cli-1.0.1-py3-none-any.whl (31.5 kB view details)

Uploaded Python 3

File details

Details for the file mdmi_cli-1.0.1.tar.gz.

File metadata

  • Download URL: mdmi_cli-1.0.1.tar.gz
  • Upload date:
  • Size: 38.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mdmi_cli-1.0.1.tar.gz
Algorithm Hash digest
SHA256 ea8f61c987790bdb640879f66a8e53824e4a98f75cb868a035ef356e5360b3f5
MD5 bc221e9bd85abf2fac1a6f9e44d840cc
BLAKE2b-256 f0f4ed44ade2e99e74428ac6517b57a1b98a38b03b919536b2ad13a341e0068e

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdmi_cli-1.0.1.tar.gz:

Publisher: publish.yml on rhargreaves/mdmi-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mdmi_cli-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: mdmi_cli-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 31.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mdmi_cli-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 21eaa6a0830510c39863a79bd48433392665af908b13a24637bebf708fefe151
MD5 df34aa9085b4e23c718fb9fca7abe462
BLAKE2b-256 60aea94c01d1b163c9695a300cade0b3dcbd547200b7f4f017f0d9c7ebf1ac00

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdmi_cli-1.0.1-py3-none-any.whl:

Publisher: publish.yml on rhargreaves/mdmi-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page