MIDI

Musical Instrument Digital Interface (MIDI) ist ein Standardprotokoll für die Vernetzung von Computern mit Musikinstrumenten, Bühnenbeleuchtung und anderen zeitbezogenen Medien.

Ab Android 13 wird der USB-Transport MIDI 2.0 unterstützt. MIDI 2.0 ist ein neuerer MIDI-Standard, der 2020 definiert wurde. Dieses Protokoll bietet Funktionen wie Zwei-Wege-Kommunikation, eine höhere Auflösung und den Austausch von Unterkünften. MIDI 2.0 über den USB-Host-Modus ist immer aktiviert, wenn die MIDI-Unterstützung auf der Plattform aktiviert ist.

Streng genommen hat MIDI nichts mit Audio zu tun. Da MIDI jedoch häufig in Verbindung mit Musik verwendet wird, ist dieser Artikel im Bereich „Audio“ zu finden.

MIDI für NDK

Mit Android 10 ist es einfacher, professionelle Audio-Apps mit MIDI auf die Android-Plattform zu portieren.

AMidi ist eine NDK API, mit der App-Entwickler MIDI-Daten mit C/C++-Code senden und empfangen können.

Android-MIDI-Apps verwenden in der Regel die midi API, um mit dem Android-MIDI-Dienst zu kommunizieren. MIDI-Apps sind hauptsächlich von der MidiManager-Klasse abhängig, um ein oder mehrere MidiDevice-Objekte zu finden, zu öffnen und zu schließen und Daten über die MIDI-Eingabe- und ‑Ausgabeports der Geräte an jedes Gerät zu senden und von dort zu empfangen.

Transport

Die in der ursprünglichen MIDI 1.0-Spezifikation angegebene physische Transportschicht ist eine Stromschleife mit einem 5‑poligen DIN-Anschluss.

Seit MIDI 1.0 wurden zusätzliche Übertragungsmethoden definiert, darunter MIDI über USB und MIDI über Bluetooth Low Energy (BLE).

MIDI für Android

Android unterstützt USB On-The-Go, wodurch ein Android-Gerät als USB-Host zum Ansteuern von USB-Peripheriegeräten fungieren kann. Mit den APIs für den USB-Hostmodus können Entwickler MIDI über USB auf Anwendungsebene implementieren. Bis vor Kurzem gab es jedoch keine integrierten Plattform-APIs für MIDI.

Ab der Version 6.0 (Marshmallow) von Android können Gerätehersteller optionalen MIDI-Support auf der Plattform aktivieren. Android unterstützt direkt USB, BLE und virtuelle (interapp-)Transporte. Android unterstützt MIDI 1.0 über einen externen Adapter.

Weitere Informationen zur Anwendungsprogrammierung mit den MIDI APIs finden Sie im Paket android.media.midi.

Im Rest dieses Artikels wird beschrieben, wie ein Android-Gerätehersteller die MIDI-Unterstützung auf der Plattform aktivieren kann.

MIDI 1.0-Transporte aktivieren

Die Implementierung von MIDI 1.0 hängt von ALSA für den USB-Host-Modus und den USB-Peripheriegerätemodus ab. ALSA wird nicht für BLE- und virtuelle Transporte verwendet.

USB-Host-Modus

Wenn Sie MIDI für den USB-Host-Modus aktivieren möchten, müssen Sie zuerst den USB-Host-Modus allgemein unterstützen und dann CONFIG_SND_RAWMIDI und CONFIG_SND_USB_MIDI in Ihrer Kernelkonfiguration aktivieren.

Der MIDI-über-USB-Transport wird formal durch den Standard Universal Serial Bus Device Class Definition for MIDI Devices Release 1.0 Nov 1, 1999 definiert, der vom USB Implementers Forum, Inc veröffentlicht wurde.

USB-Peripheriegerätemodus

Wenn Sie MIDI für den USB-Peripheriegerätemodus aktivieren möchten, müssen Sie möglicherweise Patches auf Ihren Linux-Kernel anwenden, um drivers/usb/gadget/f_midi.c in den USB-Gadget-Treiber einzubinden. Diese Patches sind für die Linux-Kernel-Version 3.10 verfügbar. Diese Patches wurden noch nicht für ConfigFs (eine neue Architektur für USB-Gadget-Treiber) aktualisiert und sind auch nicht im Upstream-Repository kernel.org verfügbar.

Die Patches werden in der Commit-Reihenfolge für den Kernel-Baum im Projekt kernel/common, Branch android-3.10, angezeigt:

  1. https://android-review.googlesource.com/#/c/127450/
  2. https://android-review.googlesource.com/#/c/127452/
  3. https://android-review.googlesource.com/#/c/143714/

Außerdem müssen Sie eine der folgenden Aktionen ausführen:

  • Gehen Sie zu Einstellungen > Entwickleroptionen > Netzwerk und setzen Sie im Dialogfeld „USB-Konfiguration auswählen“ ein Häkchen bei „MIDI“.
  • Während das Gerät mit dem USB-Host verbunden ist, wischen Sie oben auf dem Bildschirm nach unten, wählen Sie den Eintrag USB für und dann MIDI aus.

BLE

MIDI over BLE ist immer aktiviert, sofern das Gerät BLE unterstützt.

Virtuell (interapp)

Der virtuelle (interapp-)Transport ist immer aktiviert.

Anspruch auf die Funktion erheben

Apps können mithilfe der Funktion android.software.midi prüfen, ob MIDI-Unterstützung vorhanden ist.

Wenn du MIDI-Unterstützung beanspruchen möchtest, füge deiner device.mk diese Zeile hinzu:

PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.software.midi.xml:system/etc/permissions/android.software.
midi.xml

Informationen zu den Anforderungen für die Inanspruchnahme der Funktion finden Sie im Android Compatibility Definition Document (CDD).

Fehlerbehebung im Hostmodus

Im USB-Hostmodus ist das Debugging über USB mit Android Debug Bridge (adb) nicht verfügbar. Eine Alternative finden Sie im Abschnitt Drahtlose Nutzung der Android Debug Bridge.