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