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

Android 10 erleichtert die Portierung professioneller Audio-Apps mithilfe von MIDI auf die Android-Plattform.

AMidi ist eine NDK API, die App-Entwicklern das Senden und Empfangen von MIDI-Daten mit C/C++ Code ermöglicht.

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-Version angegebene physische Transportschicht ist eine aktuelle Schleife 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. Damit kann ein Android-Gerät als USB-Host für USB-Peripheriegeräte fungieren. Mit den USB-Hostmodus-APIs 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 weiteren Verlauf dieses Artikels wird erläutert, wie ein Android-Gerätehersteller die MIDI-Unterstützung auf der Plattform aktivieren kann.

MIDI 1.0-Transporte aktivieren

Die MIDI 1.0-Implementierung hängt bei der Übertragung im USB-Hostmodus und im USB-Peripheriemodus von ALSA ab. ALSA wird nicht für die BLE- und virtuellen 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. Weitere Informationen finden Sie unter Android-Kernelkonfiguration.

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-Peripheriemodus

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 noch nicht auf der Upstream-Version von kernel.org zusammengeführt.

Die Patches werden in 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 (App-interne) Transport ist immer aktiviert.

Funktion beanspruchen

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 Nutzung 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.