Musical Instrument DigitalInterface (MIDI) ist ein Standardprotokoll zur Verbindung von Computern mit Musikinstrumenten, Bühnenbeleuchtung und anderen zeitorientierten Medien.
Streng genommen hat MIDI nichts mit Audio zu tun. Da MIDI aber häufig im Zusammenhang mit Musik verwendet wird, gehört dieser Artikel in den Bereich Audio.
MIDI für NDK
Android 10 macht es einfacher, professionelle Audio-Apps mit MIDI auf die Android-Plattform zu portieren.
AMidi
ist eineNDK-API, die App-Entwicklern die Möglichkeit gibt, MIDI-Daten mit C/C++-Code zu senden und zu empfangen.
Android-MIDI-Apps verwenden normalerweise die midi
-API, um mit dem Android-MIDI-Dienst zu kommunizieren. MIDI-Apps hängen in erster Linie von der MidiManager
-Klasse ab, um ein oder mehrere MidiDevice
Objekte zu erkennen, zu öffnen und zu schließen und Daten über die MIDI-Eingangs- und -Ausgangsports des Geräts an das jeweilige Gerät zu übergeben.
Transporte
Die im Original MIDI 1.0 ist eine Stromschleife mit 5-poligem DIN-Stecker.
Seit MIDI 1.0 wurden zusätzliche Transporte definiert, darunter MIDI über USB und MIDI über Bluetooth Low Energy (BLE).
MIDI für Android
Android unterstütztUSB On-The-Go, wodurch ein Android-Gerät als USB-Host fungieren kann, um USB-Peripheriegeräte zu betreiben. Die USB-Host-Modus-APIs erlauben es Entwicklern, MIDI über USB auf Anwendungsebene zu implementieren, aber bis vor kurzem gab es keine eingebauten Plattform-APIs für MIDI.
Beginnend mit der Android 6.0 (Marshmallow) Version können Gerätehersteller optional MIDI-Unterstützung in der Plattform aktivieren. Android unterstützt direkt USB-, BLE- und virtuelle (Interapp-)Transporte.
Details zur Anwendungsprogrammierung mit den MIDI-APIs finden Sie imandroid.media.midi
Paket.
Der Rest dieses Artikels beschreibt, wie ein Android-Gerätehersteller die MIDI-Unterstützung in der Plattform aktivieren kann.
Transporte aktivieren
Die MIDI-Implementierung hängt von ALSA für die Transporte im USB-Host-Modus und im USB-Peripherie-Modus ab.
Also wird ALSA nicht für die BLE- und virtuellen Transporte verwendet.
USB-Host-Modus
Um MIDI für den USB-Host-Modus zu aktivieren, müssen Sie zunächst den USB-Host-Modus generell unterstützen und dann CONFIG_SND_RAWMIDI
und CONFIG_SND_USB_MIDI
in Ihrer Kernelkonfiguration aktivieren. Siehe Android-Kernelkonfiguration.
Der MIDI-over-USB-Transport ist formal durch denUniversal Serial Bus Device Class Definition for MIDI Devices Release 1.0 Nov 1, 1999standard definiert, der vomUSB Implementers Forum, Inc.
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-Gadgettreiber zu integrieren. Diese Patches sind für Linux-Kernel Version3.10 verfügbar. Diese Patches wurden noch nicht fürConfigFs(eine neue Architektur für USB-Gadget-Treiber) aktualisiert, noch sind sie bei upstreamkernel.org eingebunden.
Die Patches werden in der Commit-Reihenfolge für den Kernel-Baum 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/
Sie müssen außerdem einen der folgenden Schritte durchführen:
- Gehen Sie zu Einstellungen > Entwickleroptionen > Vernetzung und setzen Sie das Häkchen für MIDI im Dialog USB-Konfiguration auswählen.
- Während Sie mit dem USB-Host verbunden sind, ziehen Sie vom oberen Bildschirmrand nach unten, wählen den EintragUSB für und wählen dann MIDI.
BLE
MIDI über BLE ist immer aktiviert, sofern das Gerät BLE unterstützt.
Virtuell (interapp)
Der virtuelle (interapp) Transport ist immer aktiviert.
Funktion beanspruchen
Apps können das Vorhandensein von MIDI-Unterstützung mit derandroid.software.midi
-Funktion überprüfen.
Um die MIDI-Unterstützung zu beanspruchen, fügen Sie diese Zeile zu Ihrem device.mk
hinzu:
PRODUCT_COPY_FILES += \frameworks/native/data/etc/android.software.midi.xml:system/etc/permissions/android.software.midi.xml
Informationen zu den Voraussetzungen für die Beanspruchung des Features finden Sie imAndroid Compatibility Definition Document (CDD).
Debugging im Host-Modus
Im USB-Host-Modus ist Android Debug Bridge (adb) Debugging über USB nicht verfügbar.
Eine Alternative finden Sie im Abschnitt „Drahtlose Nutzung von Android Debug Bridge“.