Program for mapping midi signals to shell commands
Find a file
2019-06-16 14:11:18 +02:00
include Fix symbolic links 2019-06-15 23:21:56 +02:00
src Fixed 'channel' tag being mandatory 2019-06-16 00:13:18 +02:00
example.mim init 2019-06-15 21:07:32 +02:00
LICENSE Initial commit 2019-06-15 21:02:57 +02:00
makefile Fixed obj and bin not existing and not created 2019-06-16 14:11:18 +02:00
README Added details for device scanning 2019-06-16 00:55:14 +02:00

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
- Global
$channel: channel of the
$id: id of the note/controller

- Note
$velocity: velocity of the note

- Controller
$value: value of the controller (remapped)
$rawvalue: original value of the controller


-- FILE FORMAT --
[<device>,<device>]

- <device> format:
{
name=<name>
commands=[<command>,<command>]
}
-
*name: string referring to client name of the device

- command format (global):
{
type=<note/controller>
id=<x>
shell=<shell command>
channel=<*/x>
}
-
*id: value from 0 to 127 referring to id of note/controller
  > mandatory
*shell: shell command to be executed
  > mandatory
*channel: value from 0 to 16 for channel. Can use * for any channel
  > optional, default *


- <command> format (note)
{
trigger=<x:y/x>
}
-
*trigger: note velocity from 0 to 127 that triggers the command. Can enter an interval x:y or single value
  > optional, default 1:127

- <command> format (note)
{
range=<x:y>
remap=<x:y>
float=<true/false>
}
-
*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

- Comments can be written inside {} by doing //=<COMMENT>