Program for mapping midi signals to shell commands
| include | ||
| src | ||
| example.mim | ||
| LICENSE | ||
| makefile | ||
| README | ||
Maps midi signals coming from ALSA midi devices to shell commands
For a release build: `$ make clean ; make -B RELEASE=true`
usage: midiMap <config file>
This is a daemon program, it does not start any background process by itself and needs to be constantly running for the mapping to be active
This program is in early stage but is fully functional without any major errors
TODO:
- Use integrated C MIDI control
- Support for multiple identical devices
- Support for system reserved commands
- Options
- Better error handling on wrong config file format
See 'example.mim' for an example config file
To scan for devices use `$ aseqdump -l`
To scan a device's inputs use `$ aseqdump -p <client name>`
-- [COMMAND FORMAT] --
Format is a regular shell format
-- Environment
- Note
$id: id of the note
$channel: channel of the note
$velocity: velocity of the note
- Controller
$value: value of the controller (remapped)
$id: id of the controller
$channel: channel of the controller
$rawvalue: original value of the controller
- Pitch
$value: value of the bend (remapped)
$rawvalue: original value of the bend
- System
$code: hexadecimal code of the system signal
-- [FILE FORMAT] --
[<device>,<device>]
- <device> format:
{
name=<name>
commands=[<command>,<command>]
}
-
*name: string referring to client name of the device
--<command> format (global):
{
<tag>=<value>
<tag>=<value>
...
}
-- COMMAND TAGS
[Global tags]
type=<note/controller/pitch/system>
shell=<shell command>
--
*type: type of the signal: note/controller/pitch
> mandatory
*shell: shell command to be executed
> mandatory
[Note tags]
id=<x/x:y/*>
channel=<*/x>
trigger=<x/x:y/*>
--
*id: value from 0 to 127 referring to id of note/controller
> optional, default 0:127
*channel: value from 0 to 16 for channel. Can use * for any channel
> optional, default *
*trigger: note velocity from 0 to 127 that triggers the command. Can enter an interval x:y or single value
> optional, default 1:127
[Controller tags]
id=<x/x:y/*>
channel=<*/x>
range=<x/x:y/*>
remap=<x/x:y/*>
float=<true/false>
--
*id: value from 0 to 127 referring to id of note/controller
> optional, default 0:127
*channel: value from 0 to 16 for channel. Can use * for any channel
> optional, default *
*range: controller value from 0 to 127 that triggers command. Can enter an interval x:y or single value
> optional, default 0:127
*remap: remaps the range to given interval. Interval can be inversed and float
> optional, default same as range
*float: boolean value defining if output is a floating point value
> optional, default false
[Pitch tags]
range=<x/x:y/*>
remap=<x/x:y/*>
float=<true/false>
--
*range: controller value from -8192 to 8191 that triggers command. Can enter an interval x:y or single value
> optional, default -8192:8191
*remap: remaps the range to given interval. Interval can be inversed and float
> optional, default same as range
*float: boolean value defining if output is a floating point value
> optional, default false
--Number Format
x:y range from x to y
x single value x
* all possible values
Comments can be done with //
note: // in value lines will not be ignored