Ein kleiner MIDI-Sequencer als JACK-Transport-Slave

Hier der Anfang eines kleinen Beat-exakten Sequencers, gesteuert mit Jack-Transport:

svn co svn://linuxfoo.de/tilt_sequencer

Zugriff per WebSVN

Abhängigkeiten:

  • libjack-dev
  • librtmidi-dev

Anmerkungen:

Zur Laufzeit muss ein Programm, z.B. Ardour oder klick den JACK Transport Timebase Master machen. Dann passt sich der Sequencer automatisch der BPM an, wobei allerdings zu beachten ist, dass das Update derzeit erst nach Ablauf des aktuellen Events wirksam wird.

TODO:

Klar, dass ich als nächstes eine Multithreaded-Anwendung mit Echtzeit-BPM-Update und Skew-Correction einbaue.

Für Vorschläge zum Input-Format bin ich dankbar, eine GUI zu bauen habe ich nicht vor, ich will erstmal eben genau nicht eine GUI sondern eine gescheite Notation.

Aufruf:

./tilt_sequencer test/data1.txt

Eingabe-Datenformat:

Derzeit lautet das Datenformat einfach (pro Zeile):

BEATS BYTES COMMAND_BYTE DATA_BYTE_1 DATA_BYTE_2

Zwischen den Tokens liegt jeweils genau ein ASCII Space character (0x20)

Am Zeilenende liegt ein UNIX Newline (0x0A). Leere Zeilen werden ignoriert.

Alle Werte sind in ASCII dezimal zu notieren. Es kann jede von sscanf(3)  unterstützte Notation für float (%f) bzw. int (%d) verwendet werden.

  • BEATS: float: Wie lange nach dem Senden dieses Events gewartet werden soll.
  • BYTES: int, 2 oder 3: Wieviele Bytes dieses Event hat.
  • COMMAND_BYTE, DATA_BYTE_1/2: int, 0-255: Die Bytes des MIDI-Events.