Nichts als die varheit

MIDI-Controller macht Sachen

2026-01-30-20-31 (MIDI, OpenBSD, sh)

Wenn man mit den Tasten eines MIDI-Controllers nicht nur ein Audio-Programm steuern, sondern beliebige Befehle ausführen will, reicht in der Regel ein kleines Shellskript wie midiact [1].

Läßt man das Skript laufen und drückt eine beliebige Taste auf dem MIDI-Controller, wird man nach einem Befehl gefragt, der mit der entsprechenden Taste verknüpft werden soll. Drückt man daraufhin dieselbe Taste, wird der Befehl ausgeführt. Beim nächsten Aufruf des Skriptes bleiben alle bisher gelernten Zuweisungen erhalten. Ein Riesenspaß.

#!/bin/sh

CONF=$HOME/.midiact.conf
if [ -f $CONF ]; then
	. $CONF
fi

exec 3<&0
midicat -d -q midi/0 -o /dev/null 2>&1 | while read ev; do
	tail=${ev##* }
	if [ "$tail" != "f7" -a "$tail" != "7f" ]; then continue; fi
	ev=${ev% *}
	ev=$(echo $ev | tr -d ' ')
	eval v=\${act_$ev}
	if [ -n "$v" ]; then
		eval $v &
		continue
	fi
	echo -n "Command for event $ev: "
	read cmd <&3
	eval act_$ev="$cmd"
	echo "act_$ev=\"$cmd\"" >>$CONF
done
exec 3<&

Gleich mal ausprobieren:

$ cd
$ wget varheit.de/midiact
Prepended http:// to 'varheit.de/midiact'
URL transformed to HTTPS due to an HSTS policy
HTTP request sent, awaiting response... 200 OK
Length: 445 [application/octet-stream]
Saving to: ‘midiact’

midiact                                              100%[======================================================================================================================>]     445  1.49KB/s    in 0.3s    

Last-modified header invalid -- time-stamp ignored.
2026-02-01 19:00:09 (1.49 KB/s) - ‘midiact’ saved [445/445]

$ sh midiact
[1] midiact