129 lines
3.2 KiB
Text
129 lines
3.2 KiB
Text
|
|
Maps midi signals coming from ALSA midi devices to shell commands
|
|
|
|
Build: $ make && sudo make install
|
|
|
|
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 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/connect/disconnect>
|
|
shell=<shell command>
|
|
--
|
|
*type: type of the signal: note/controller/pitch/system/connect/disconnect
|
|
> 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
|