A terminal-based MIDI control panel meant to be simple and fast in use.
Basic use is very straightforward: midictl <config file> -d <client ID> -p <port> -c <MIDI channel>
.
You can determine client ID and port number of the device you want by executing aconnect -o
.
Configuration file format is described in the next section.
Please keep in mind that midictl
is in very early stage of its life. I literally just wrote it in the two past days. You may stumble upon weird bugs (if you do, please open an issue). Some things may change in future releases, including key bindings and config file format.
Key bindings:
Key | Action |
---|---|
Q | Quit |
K, ↑ | Move up |
J, ↓ | Move down |
PgUp | Move one page up |
PgDn | Move one page down |
Home | Jump to the beginning |
End | Jump to the end |
H, ← | Value -= 1 |
L, → | Value += 1 |
G, Shift + H, Shift + Z | Value -= 10 |
;, Shift + L, Shift + C | Value += 10 |
I, Enter | Enter value for the controller |
Z | Min value |
X | Center value |
C | Max value |
T | Transmit value to the MIDI device |
R | Default value |
Shift + T | Transmit all current values to the MIDI device |
Shift + R | Reset all controllers to their defaults |
Shift + D | Dump all controller values to file |
Shift + O | Load controller values from a dump file |
/ | Search for controller by name (leave empty to repeat search) |
[ | Move split to the left |
] | Move split to the right |
= | Hide/show left column |
The config file format is meant to be as simple and friendly as possible. Each line in the file represents one MIDI controller, a heading or a horizontal rule.
- Empty lines, preceding whitespace and comments are ignored
- Comments start at
#
character and end at the end of the line - Lines starting with
---
(or more-
characters) represent horizontal rules. If the---
is followed by text, it is placed over the horizontal rule and serves as heading. - Lines starting with numbers or square brackets are MIDI controllers. The number is the MIDI controller number. The number can be followed by optional square bracket pair containing metadata. Any text following the number or metadata block is treated as name of the controller.
It sounds much more complicated than it is:
--- Oscillator 1 # A comment
10 [slider = 0] Waveform
11 [min = 32, max = 96] Detune
12 [def = 127] Volume
--- LFO
[cc = 13] Rate
14 Fade
Valid metadata parameters are:
cc
- MIDI CC. Overrides the value specified outside the metadata block. As you can see, the controller number can be omitted as long as this parameter is set instead. In my opinion this syntax looks better actually.min
- Minimum value for the controllermax
- Maximum value for the controllerdef
- Default value.chan
- MIDI channel (overrides default MIDI channel)slider
- The slider is not displayed if set to 0update
- If non-zero, controller's default value is automatically transmitted whenmidictl
starts.
Development ideas and TODO list are here.
If you've found a bug, have a question or an idea, please open an issue. Pull requests are welcome too!