MIDI

Musical Instrument Digital Interface (MIDI) ist ein Standardprotokoll zur Verbindung von Computern mit Musikinstrumenten, Bühnenbeleuchtung und anderen zeitorientierten Medien.

Ab Android 13 wird der USB-Transport um MIDI 2.0- Unterstützung erweitert. MIDI 2.0 ist ein neuerer MIDI-Standard, der im Jahr 2020 definiert wurde. Dieses Protokoll fügt Funktionen wie bidirektionale Kommunikation, höhere Auflösung und Eigenschaftsaustausch hinzu. Der MIDI 2.0-über-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 bei Musik verwendet wird, befindet sich dieser Artikel im Abschnitt „Audio“.

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 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 sind in erster Linie auf die MidiManager Klasse angewiesen, 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 und von jedem Gerät weiterzuleiten.

Transporte

Die im ursprünglichen MIDI 1.0 spezifizierte physikalische Transportschicht 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ützt USB On-The-Go , was es einem Android-Gerät ermöglicht, als USB-Host zum Antreiben von USB-Peripheriegeräten zu fungieren. Die USB-Host-Modus-APIs ermöglichen es Entwicklern, MIDI über USB auf Anwendungsebene zu implementieren, aber bis vor kurzem gab es keine integrierten Plattform-APIs für MIDI.

Ab der Veröffentlichung von Android 6.0 (Marshmallow) können Gerätehersteller optionale MIDI-Unterstützung in der Plattform aktivieren. Android unterstützt direkt USB-, BLE- und virtuelle (Inter-App-)Transporte. Android unterstützt MIDI 1.0 über einen externen Adapter.

Einzelheiten zur Anwendungsprogrammierung mit den MIDI-APIs finden Sie im Paket android.media.midi .

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

Aktivieren von MIDI 1.0-Transporten

Die Implementierung von MIDI 1.0 hängt von ALSA für die Übertragung im USB-Host-Modus und im USB-Peripheriemodus ab. ALSA wird nicht für BLE und virtuelle Transporte verwendet.

USB-Host-Modus

Um MIDI für den USB-Host-Modus zu aktivieren, unterstützen Sie zunächst den USB-Host-Modus im Allgemeinen und aktivieren Sie dann CONFIG_SND_RAWMIDI und CONFIG_SND_USB_MIDI in Ihrer Kernel-Konfiguration. Siehe Android-Kernel-Konfiguration.

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

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 bei den Originalautoren von kernel.org zusammengeführt.

Die Patches werden in der Commit-Reihenfolge für den Kernelbaum 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/

Sie müssen außerdem einen der folgenden Schritte ausführen:

  • Gehen Sie zu Einstellungen > Entwickleroptionen > Netzwerk und aktivieren Sie das Kontrollkästchen für MIDI im Dialogfeld „USB-Konfiguration auswählen“.
  • Während Sie mit dem USB-Host verbunden sind, ziehen Sie vom oberen Bildschirmrand nach unten, wählen Sie den Eintrag USB für aus und wählen Sie dann MIDI aus.

BLE

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

Virtuell (interapp)

Der virtuelle (App-interne) 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.

Um 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 Inanspruchnahme der Funktion finden Sie im Android Compatibility Definition Document (CDD) .

Debuggen im Host-Modus

Im USB-Hostmodus ist das Debuggen von Android Debug Bridge (adb) über USB nicht verfügbar. Eine Alternative finden Sie im Abschnitt zur drahtlosen Nutzung von Android Debug Bridge.