Emacs als Rapid Prototyping Platform für Midieingaben LilyPond ist ein Notensatzprogramm mit einer textbasierten Eingabesprache. Zwar kann man mit einer handelsüblichen Tastatur auch die Hauptsubstanz eines Notentexts (nämlich die Noten selbst), etwa als { \key d \major a'4 fis' fis'2 | g4' e' e'2 | d'4 e' fis' g' | a' a' a'2 | } vergleichsweise zügig eingeben, allerdings bleibt man dabei meist deutlich hinter der Geschwindigkeit und Treffsicherheit eines geübten Musikers auf einem Tasteninstrument zurück. Die Nutzung eines mit der Computerschnittstelle Midi ausgestatteten Instrumentes, hier ein Akkordeon, bietet sich deswegen als Eingabeergänzung zumindest der Tonhöhen an. Es zeigt sich, daß die Bordmittel der Editierplattform Emacs tatsächlich für erste Schritte ausreichen. Nach Einstecken einer USB/Midischnittstelle findet sich im Alsa-Geräteverzeichnis ein "/dev/snd/midiC1D0". Ein Antesten mit "hexdump" zeigt, daß diese Schnittstelle beim Spielen am Instrument ohne weitere Maßnahmen einen Mididatenstrom abliefert. Hier kann man den Hebel mit Namen Emacs ansetzen: Emacs kann sich unter anderem mit seriellen Schnittstellen und Netzwerkports in Verbindung setzen. Es zeigt sich, daß das Kommando "make-serial-process" tatsächlich eine Midischnittstelle zu öffnen und Daten zu empfangen vermag, solange man die Baudrateneinstellung mit dem Parameter ":speed nil" außerkraft setzt. Der nächste Schritt ist dann die Dekodierung des Mididatenstroms in eine zur Weiterverarbeitung geeignetere Form. Da die Eingaben parallel zu Tastatureingaben genutzt werden sollen, bietet es sich an, diese als "Events" zu nutzen, die Emacs mit Hilfe von "Keymaps" dann mit Funktionen ausstatten kann. Existierende Events sind etwa Tastatureingaben, Sondertasten, Mausklicks, Fensterwechsel in der Grafikoberfläche und anderes. In Analogie zu den Tonhöhennamen in Emacs' symbolischem Rechner "Calc" werden die Eventname "C_-1", "Csharp_-1" ... "Fsharp_9" "G_9" gewählt. Zur zügigen Dekodierung der Mididaten wird ein "CCL-Programm" statt des bei solchen Operationen etwas behäbig daherkommenden "Emacs Lisp" verwendet. Programme für diesen Bytecodeinterpreter werden mit einer assemblerähnlichen Sprache erzeugt und sind auf die Konvertierung von Byteströmen spezialisiert, was früher bei der Umwandlung externer Dateien in die Emacs-interne Zeichenkodierung intensiv genutzt, aber mittlerweile weitgehend durch festverdrahtete oder tabellengesteuerte Konvertierungen ersetzt wurde. Für Midi kommt es aber gerade richtig. Nachdem erste Versuche erfolgreich verlaufen und die ersten Zeichen zu finden sind, kommt es aber immer wieder zu Aussetzern. Besonders auffällig ist dies bei Verwendung eines Softwarekeyboards, dessen Mididatenstrom unter Verwendung des Kernelmoduls "snd-virmidi" bereitgestellt wird: beim Betätigen mehrerer Tasten gleichzeitig fehlen Töne. Ein Blick auf die Rohdaten zeigt, woran es liegt. Tatsächlich muß der Midi-Dekodierer noch mehrfach nachgearbeitet werden, um mit Tücken des Midiprotokolls wie "running status" (weggelassene Kommandobytes) und "real time commands" (Kommandos inmitten anderer Kommandos) klarzukommen. Mittelfristig ist eine Erweiterung von Emacs um weiterverarbeitende Bibliotheken oder Schnittstellen, die die Aufbereitung der Mididaten bereits übernehmen und eventuell plattformübergreifend verfügbar sind, sinnvoll. Die Rohdaten haben aber zumindest den Vorteil, ohne Neukompilierung von Emacs direkt verfügbar zu sein.