Android als MIDI sequenzer über Bluetooth

(English version available by Google Translate)

Um von einem Android-Handy über MIDI Musik zu erzeugen, gibt es verschiedene Möglichkeiten:

Über WLAN klingt das Resultat – je nach Router-Konfiguration – oft grausig, wegen der ungleichmäßigen Latenzzeiten und dem daraus entstehenden Jitter. Es gibt viele WLAN-MIDI-Adapter, aber alle sind recht teuer.

Über USB stört oft das Kabel. Hilfe verspricht zwar u.A. das CME Widi-XU, welches MIDI-Daten an einen CME WIDI-X8 sendet, aber erstens unterstützen die wenigsten Handys einen USB-Midi-Adapter und die drahtlose Variante ist auch sehr teuer.

Bluetooth wäre wegen der geringen Latenzzeiten und der geringen Kosten die beste Variante. Leider gibt es dafür keine Fertiggeräte. Aber Bluetooth-Module gibt es ab ca. 3€ und mit ein paar weiteren Bauteilen, Platine und Gehäuse ist schnell eine Selbstbau-Variante erstellt.

Zum Vergleich: Die Hardware für „BT MIDI-Out“ ist auch nur ein Bausatz, kostet aber mit Daten-Puffer über 100€ und ist damit zu teuer. Da Android-Handys im Millisekunden-Bereich alles andere als Echtzeit-fähig sind, muss ein (optionaler) Puffer aber m.E. schon sein!

Also: Einen eigenen Adapter-Bausatz entwickeln!

Optional könnte der eigene Bausatz auch das Protokoll von BT MIDI-Out unterstützen:

* Copyright(C) Paul und Scherer (mct.de/mct.net)
* Protocol:
* Master writes
*  4 bytes = delta (delay time [us]) followed by
*  n bytes (MIDI data) terminated by
*  2 bytes = ‚$‘ + anything except ‚ ‚.
*  Soft reset:
*  2 bytes = 0xff, 0xff.
*  ‚$‘ and 0xff within delta/MIDI data
*  are always followed by a dummy ‚ ‚.

Meine Meinung: Das ist unnötig umständlich. Durch die „delta delay time” kann ein verlorenes Daten-Byte dazu führen, dass die Wiedergabe aus dem Takt gerät und das Protokoll ist zu nichts kompatibel, bringt Sender oder Empfänger also durcheinander, falls sie z.B. das „followed by a dummy ‘ ‘“ oder die „4 bytes = delta“ nicht verstehen oder senden können.

Es geht viel Einfacher! Ich nutze das noch unbenutzte Midi Status Byte F9h = 249  (Reserved) und im Folge-Byte werden einfach die absoluten 100stel Sekunden übertragen.

Ein kleiner ATtiny1634 im Adapter puffert die Daten und sendet sie ohne Jitter an die Midi-Out-Buchse. Obwohl MIDI-Geräte durch das F9-Byte nicht durcheinander gebracht werden sollten, werden die F9-xx-Sequenzen natürlich nicht an Midi-Out vom Adapter ausgegeben.

Das Folge-Byte mit den 100stel Sekunden kann dabei also von 0..99 gehen, also bis 63h. Die Werte 64h..7Eh sind reserviert. Mit der Sequenz F9-7F kann man den Daten-Puffer löschen; dabei werden alle MIDI-Controller zurückgesetzt (Reset All Controllers = 79h), alle Töne gestoppt (All Notes Off = 7Bh) und der Buffer-Timer zurückgesetzt. Fertig!

Zum Testen der Android-App habe ich mir eine kleine Windows-Applikation programmiert, die die Bluetooth-Daten nach dem o.g. Prinzip puffert und über den „Microsoft GS Wavetable Synth” der Soundkarte wiedergibt. Die Applikation stelle ich bei Gelegenheit hier bei GitHub zur Verfügung.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s


%d Bloggern gefällt das: