MIDI routing and filtering
Filter events depending on their event type, channel, note number, velocity, etc., and freely route them between an arbitrary number of input and output ports.
Modifying and converting MIDI events
Transpose notes, apply velocity curves, change controller values and ranges, or convert events to any other MIDI event type. mididings also includes more complex functions like a diatonic harmonizer, floating split points, latched notes, and more.
Seamless switching between patches
Set up different "scenes", each with its own MIDI routing and processing, and switch between them at any time, even while playing. Switching scenes does not affect notes already held, and does not result in dropouts or stuck notes!
MIDI event monitoring, running external commands
Print MIDI event data to the console to help debugging your patches and configuring your MIDI controllers. In addition to its MIDI output, mididings can also execute shell commands and send OSC or DBUS messages.
A mididings script running in a terminal, while being edited in vim. Also shown is QjackCtl's patchbay, used to automatically connect MIDI ports when mididings is started.
Some links that might also be of interest:
There is now a mailing list for any discussion concerning mididings, including help requests and bug reports.
To post to the list, send mail to firstname.lastname@example.org. You can subscribe by entering your email address here:
- Python ≥ 2.5 (also works with 3.x)
- JACK ≥ 0.116.0
- Boost ≥ 1.34.1 (Boost.Python, Boost.Thread)
- pyliblo (to send or receive OSC messages)
- dbus-python (to send DBUS messages)
- pyinotify ≥ 0.8 (to automatically restart when a script changes)
- Tkinter (for the livedings GUI)
- libsmf (to read/write standard MIDI files using the process_file() function)
./setup.py build [--disable-jack-midi] [--disable-alsa-seq] [--enable-smf] ./setup.py install