MIDI monitor software is used to view the flow of MIDI data. This article describes a few of the MIDI monitor programs I’ve tried.
I found that I had a simple monitor available by using the command amidi that was already present on my system. Note that amidi is limited because it’s for ALSA MIDI only, not JACK MIDI.
First, I used amidi to list the available ALSA MIDI devices:
[steve@audio ~]$ amidi -l Dir Device Name IO hw:0,0 M Audio Audiophile 24/96 MIDI IO hw:2,0,0 E-MU Xboard25 MIDI 1
To monitor the E-MU Xboard25 keyboard, I entered the following command:
[steve@audio ~]$ amidi -p hw:2,0,0 -d
I then pressed middle C (MIDI note 60) and released it. The following output displayed:
90 3C 48 90 3C 00
The output is in hexadecimal.
amidi is not my monitor of choice but it’s useful for verifying that incoming ALSA MIDI is working.
I already had the mididings MIDI processor software installed and found that it could be used as a simple MIDI monitor. With JACK running I started mididings as follows:
[steve@audio ~]$ mididings "Print()"
I used QjackCtl to route my MIDI keyboard to mididings and then pressed and released middle C:
[ 1, 1] Note On: 60 64 (c3) [ 1, 1] Note Off: 60 64 (c3)
The output is in decimal.
I already had the QMidiRoute software installed, which contains a simple MIDI monitor.
After JACK was started I also started QMidiRoute. I used QjackCtl to route my MIDI keyboard to QMidiRoute. Once again, I pressed and released middle C:
I installed the dedicated MIDI monitor program midimon (version 0.3). With JACK already started I then started midimon. I used QjackCtl to route my MIDI keyboard to midimon. Once again, I pressed and released middle C:
midimon has some interesting features. It can log the MIDI stream to a file, which can be useful. It also has checkboxes to control the types of events to be monitored. That’s useful but doesn’t go far enough; I wasn’t able to find a way to disable Active Sensing events. Overall, midimon seems to work OK but it appears to be unfinished.
Other MIDI Monitors
I didn’t look at GMIDImonitor because it appeared to be very basic.
I wanted to look at midisnoop (version 0.1.2) and kmidimon (version 0.7.5) but I was unable to build either of them.
Useful tips on using amidi and mididings, thanks.
I have tried four midi monitoring programs:
Sadly all fail to deal with running-status from my synths. This can result in getting nonsense output (eg. you move pitch wheel and you get one pitch wheel message followed by a stream of erroneous note on/off messages).
Running-status is employed to maximise midi throughput. Midi basically consists of two types of bytes: command bytes (value 128-255) and data bytes (0-127), ie. command byte has top bit set.
If the midi message context does not change then there is no need to keep transmitting the command byte before the data. It assumes the last command prevails. ie. move the pitch wheel quickly and you get command-data-data-data…
Active-sensing (value 254, usually every 270mS) though can reset current running status often.
Retract last message, sadly I hadn’t suspected the USB-MIDI interface, see