Skip to content

Terminal-based MIDI control panel meant to be fast and simple in use

License

Notifications You must be signed in to change notification settings

Jacajack/midictl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

midictl

A terminal-based MIDI control panel meant to be simple and fast in use.

Using midictl

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

Config file format

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 controller
  • max - Maximum value for the controller
  • def - Default value.
  • chan - MIDI channel (overrides default MIDI channel)
  • slider - The slider is not displayed if set to 0
  • update - If non-zero, controller's default value is automatically transmitted when midictl starts.

Contributing / Roadmap

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!