fbpx

SendMIDI and ReceiveMIDI

Categories: Software Prototypes/Non-Commercial Products

Submitted by:Geert Bevin

24 May 2023

Elevator Pitch

SendMIDI and ReceiveMIDI

SendMIDI and ReceiveMIDI are multi-platform command-line tools that make it very easy to quickly send, receive and monitor MIDI messages

Product Description

SendMIDI and ReceiveMIDI

SendMIDI and ReceiveMIDI open the whole world of MIDI up to the computer command line and scripting. It's very easy to quickly send messages for configuration or testing; to store scripts for repeated operation; or to monitor and receive particular filtered MIDI streams for troubleshooting or later reproduction.

The command line arguments of SendMIDI and ReceiveMIDI have be carefully chosen to allow for fluid expression of the intended use case.

The websites are:
https://github.com/gbevin/SendMIDI
https://github.com/gbevin/ReceiveMIDI

List of SendMIDI commands:

  dev   name           Set the name of the MIDI output port
  virt  (name)         Use virtual MIDI port with optional name (Linux/macOS)
  list                 Lists the MIDI output ports
  panic                Sends all possible Note Offs and relevant panic CCs
  file  path           Loads commands from the specified program file
  dec                  Interpret the next numbers as decimals by default
  hex                  Interpret the next numbers as hexadecimals by default
  ch    number         Set MIDI channel for the commands (1-16), defaults to 1
  omc   number         Set octave for middle C, defaults to 3
  on    note velocity  Send Note On with note (0-127) and velocity (0-127)
  off   note velocity  Send Note Off with note (0-127) and velocity (0-127)
  pp    note value     Send Poly Pressure with note (0-127) and value (0-127)
  cc    number value   Send Control Change number (0-127) with value (0-127)
  cc14  number value   Send 14-bit CC number (0-31) with value (0-16383)
  pc    number         Send Program Change number (0-127)
  cp    value          Send Channel Pressure value (0-127)
  pb    value          Send Pitch Bend value (0-16383 or value/range)
  rpn   number value   Send RPN number (0-16383) with value (0-16383)
  nrpn  number value   Send NRPN number (0-16383) with value (0-16383)
  clock bpm            Send 2 beats of MIDI Timing Clock for a BPM (1-999)
  mc                   Send one MIDI Timing Clock
  start                Start the current sequence playing
  stop                 Stop the current sequence
  cont                 Continue the current sequence
  as                   Send Active Sensing
  rst                  Send Reset
  syx   bytes          Send SysEx from a series of bytes (no F0/F7 delimiters)
  syf   path           Send SysEx from a .syx file
  tc    type value     Send MIDI Time Code with type (0-7) and value (0-15)
  spp   beats          Send Song Position Pointer with beat (0-16383)
  ss    number         Send Song Select with song number (0-127)
  tun                  Send Tune Request
  mpe   zone range     Send MPE Configuration for zone (1-2) with range (0-15)
  mpetest              Send a sequence of MPE messages to test a receiver
  raw   bytes          Send raw MIDI from a series of bytes
  -h  or  --help       Print Help (this message) and exit
  --version            Print version information and exit
  --                   Read commands from standard input until it's closed

List of ReceiveMIDI commands:

  dev   name       Set the name of the MIDI input port
  virt  (name)     Use virtual MIDI port with optional name (Linux/macOS)
  pass  name       Set name of MIDI output port for MIDI pass-through
  list             Lists the MIDI input ports
  file  path       Loads commands from the specified program file
  dec              Interpret the next numbers as decimals by default
  hex              Interpret the next numbers as hexadecimals by default
  ch    number     Set MIDI channel for the commands (0-16), defaults to 0
  ts               Output a timestamp for each received MIDI message
  nn               Output notes as numbers instead of names
  omc   number     Set octave for middle C, defaults to 3
  voice            Show all Channel Voice messages
  note             Show all Note messages
  on    (note)     Show Note On, optionally for note (0-127)
  off   (note)     Show Note Off, optionally for note (0-127)
  pp    (note)     Show Poly Pressure, optionally for note (0-127)
  cc    (number)   Show Control Change, optionally for controller (0-127)
  cc14  (number)   Show 14-bit CC, optionally for controller (0-63)
  nrpn  (number)   Show NRPN, optionally for parameter (0-16383)
  nrpnf (number)   Show full NRPN (MSB+LSB), optionally for parameter (0-16383)
  rpn   (number)   Show RPN, optionally for parameter (0-16383)
  rpnf  (number)   Show full RPN (MSB+LSB), optionally for parameter (0-16383)
  pc    (number)   Show Program Change, optionally for program (0-127)
  cp               Show Channel Pressure
  pb               Show Pitch Bend
  sr               Show all System Real-Time messages
  clock            Show Timing Clock
  start            Show Start
  stop             Show Stop
  cont             Show Continue
  as               Show Active Sensing
  rst              Show Reset
  sc               Show all System Common messages
  syx              Show System Exclusive
  syf   path       Store SysEx into a .syx file
  tc               Show MIDI Time Code Quarter Frame
  spp              Show Song Position Pointer
  ss               Show Song Select
  tun              Show Tune Request
  q                Don't show the received messages on standard output
  js    code       Execute this script for each received MIDI message
  jsf   path       Execute the script in this file for each message
  -h  or  --help   Print Help (this message) and exit
  --version        Print version information and exit
  --               Read commands from standard input until it's closed

How It's Innovative

MIDI has mostly been used by hardware or UI-driven software. With SendMIDI and ReceiveMIDI, any command line use is fully supported, even in combination with other command line tools, honoring the unix legacy.

See MIDI Innovation In Action

Most Inspiring Use Cases

It completely changes how an engineers develops MIDI products, using SendMIDI and ReceiveMIDI as multi-platform tools on the command line significantly streamlines the creation and testing process.

Expansion Plans

MIDI 2.0 support

Commercialization

SendMIDI and ReceiveMIDI are free and open-source under the GPLv3 license.