Musical Instrument Digital Interface (MIDI) ist ein Standardprotokoll für die Verbindung von Computern mit Musikinstrumenten, Bühnenbeleuchtung und anderen zeitbezogenen Medien.
Ab Android 13 wird der USB-Transport um die Unterstützung von MIDI 2.0 erweitert. MIDI 2.0 ist ein neuerer MIDI-Standard, der 2020 definiert wurde. Dieses Protokoll bietet zusätzliche Funktionen wie Zwei-Wege-Kommunikation, höhere Auflösung und Austausch von Eigenschaften. MIDI 2.0 über den USB-Hostmodus ist immer aktiviert, wenn die MIDI-Unterstützung auf der Plattform aktiviert ist. MIDI 2.0 über virtuelle Transporte wird in Android 15 und höher unterstützt.
Streng genommen hat MIDI nichts mit Audio zu tun. Da MIDI jedoch häufig für Musik verwendet wird, ist dieser Artikel im Audiobereich 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 Klasse
MidiManager
abhängig, um ein oder mehrere
MidiDevice
-Objekte zu erkennen, zu öffnen und zu schließen und Daten über die MIDI-Ein- und ‑Ausgabeports des Geräts an und von jedem Gerät zu übertragen.
Transport
Die physische Transportschicht, die im ursprünglichen MIDI 1.0 angegeben ist, ist eine Stromschleife mit einem 5-poligen DIN-Anschluss.
Seit MIDI 1.0 wurden zusätzliche Übertragungsarten 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 fungieren und USB-Peripheriegeräte ansteuern kann. 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 Android 6.0 (Marshmallow) können Gerätehersteller optional MIDI-Unterstützung in der Plattform aktivieren. Android unterstützt direkt USB-, BLE- und virtuelle (Inter-App-)Übertragungen. 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-Transports aktivieren
Die MIDI 1.0-Implementierung hängt von ALSA für USB-Hostmodus- und USB-Peripheriemodus-Transports ab. ALSA wird nicht für BLE- und virtuelle Transporte verwendet.
USB-Hostmodus
Wenn Sie MIDI für den USB-Hostmodus aktivieren möchten, müssen Sie zuerst den USB-Hostmodus im Allgemeinen unterstützen und dann CONFIG_SND_RAWMIDI
und CONFIG_SND_USB_MIDI
in Ihrer Kernelkonfiguration aktivieren.
Der MIDI-over-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
Um MIDI für den USB-Peripheriemodus zu aktivieren, müssen Sie möglicherweise Patches auf Ihren Linux-Kernel anwenden, um drivers/usb/gadget/f_midi.c
in den USB-Gadget-Treiber zu integrieren. 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-kernel.org zusammengeführt.
Die Patches werden in der Commit-Reihenfolge für den Kernelbaum im Projekt kernel/common
, Branch android-3.10
angezeigt:
- https://android-review.googlesource.com/#/c/127450/
- https://android-review.googlesource.com/#/c/127452/
- 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“.
- Ziehen Sie, während das Gerät mit dem USB-Host verbunden ist, das Benachrichtigungsfeld vom oberen Bildschirmrand 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-übergreifende) Transport ist immer aktiviert.
Funktion in Anspruch nehmen
Apps können mit dem Feature android.software.midi
prüfen, ob MIDI unterstützt wird.
Wenn Sie MIDI-Unterstützung beanspruchen möchten, fügen Sie diese Zeile in Ihre device.mk
ein:
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 der Android Debug Bridge (adb) nicht verfügbar. Eine Alternative finden Sie im Abschnitt Drahtlose Nutzung von Android Debug Bridge.