MIDI

Musical Instrument Digital Interface (MIDI) to standardowy protokół do łączenia komputerów z instrumentami muzycznymi, oświetleniem scenicznym i innymi mediami zorientowanymi na czas.

Od Androida 13 obsługa MIDI 2.0 jest dodawana do transportu USB. MIDI 2.0 to nowszy standard MIDI zdefiniowany w 2020 roku. Ten protokół dodaje funkcje takie jak dwukierunkowa komunikacja, wyższa rozdzielczość i wymiana danych. Tryb hosta USB MIDI 2.0 jest zawsze włączony, gdy obsługa MIDI jest włączona na platformie.

Ściśle rzecz ujmując, MIDI nie ma nic wspólnego z dźwiękiem. Ponieważ jednak MIDI jest często używany w przypadku muzyki, ten artykuł znajduje się w sekcji dotyczącej dźwięku.

MIDI dla NDK

Android 10 ułatwia przenoszenie profesjonalnych aplikacji audio korzystających z MIDI na platformę Android.

AMidi to NDK API, które umożliwia deweloperom aplikacji wysyłanie i odbieranie danych MIDI za pomocą kodu C/C++.

Aplikacje MIDI na Androida zwykle komunikują się z usługą MIDI na Androida za pomocą interfejsu API midi. Aplikacje MIDI zależą głównie od klasy MidiManager, aby wykrywać, otwierać i zamykać co najmniej 1 obiekt MidiDevice oraz przesyłać dane do i z każdego urządzenia przez porty wejścia i wyjścia MIDI.

Transporty

Fizyczny warstw transportu określony w oryginalnym MIDI 1.0 to pętla prądowa z 5-stykowym złączem DIN.

Od czasu wydania MIDI 1.0 zdefiniowano dodatkowe metody przesyłania, w tym MIDI przez USB i MIDI przez Bluetooth Low Energy (BLE).

MIDI na Androida

Android obsługuje USB On-The-Go, która umożliwia urządzeniu z Androidem działanie jako host USB do obsługi urządzeń peryferyjnych USB. Interfejsy API w trybie hosta USB umożliwiają deweloperom implementowanie MIDI przez USB na poziomie aplikacji, ale do niedawna nie było wbudowanych interfejsów API dla MIDI na platformie.

Począwszy od wersji Androida 6.0 (Marshmallow) producenci urządzeń mogą włączyć opcjonalne obsługiwanie MIDI na platformie. Android obsługuje bezpośrednio interfejsy USB, BLE i wirtualne (międzyaplikacyjne). Android obsługuje MIDI 1.0 za pomocą zewnętrznego adaptera.

Szczegółowe informacje o programowaniu aplikacji z użyciem interfejsów MIDI znajdziesz w pakiecie android.media.midi.

Z dalszej części tego artykułu dowiesz się, jak producent urządzenia z Androidem może włączyć obsługę MIDI na platformie.

Włączanie transportów MIDI 1.0

Implementacja MIDI 1.0 zależy od ALSA w przypadku transportu w trybie hosta USB i w trybie urządzenia peryferyjnego USB. ALSA nie jest używana w przypadku BLE i transmisji wirtualnych.

Tryb hosta USB

Aby włączyć MIDI w trybie hosta USB, najpierw włącz ogólnie tryb hosta USB, a potem włącz CONFIG_SND_RAWMIDICONFIG_SND_USB_MIDI w konfiguracji jądra.

Przesyłanie MIDI przez USB jest formalnie zdefiniowane w standardzie Universal Serial Bus Device Class Definition for MIDI Devices Release 1.0 Nov 1, 1999 opublikowanym przez USB Implementers Forum, Inc.

Tryb urządzenia peryferyjnego USB

Aby włączyć MIDI w trybie urządzenia peryferyjnego USB, może być konieczne zastosowanie poprawek do jądra Linuksa w celu zintegrowania drivers/usb/gadget/f_midi.c ze sterownikiem gadżetu USB. Te poprawki są dostępne dla jądra Linux w wersji 3.10. Te poprawki nie zostały jeszcze zaktualizowane w ConfigFs (nowa architektura dla sterowników gadżetów USB) ani scalone w upstreamie kernel.org.

Aktualizacje są wyświetlane w kolejności zatwierdzeń w drzewie jądra w projekcie kernel/common na gałęzi android-3.10:

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

Musisz też wykonać jedną z tych czynności:

  • Otwórz Ustawienia > Opcje programisty > Sieć i zaznacz pole wyboru MIDI w oknie Wybieranie konfiguracji USB.
  • Po podłączeniu do hosta USB przeciągnij palcem od góry ekranu w dół, wybierz pozycję USB dla, a potem wybierz MIDI.

BLE

MIDI przez BLE jest zawsze włączone, o ile urządzenie obsługuje BLE.

Wirtualne (międzyaplikacjami)

Wirtualny transport (między aplikacjami) jest zawsze włączony.

Zgłaszanie własności

Aplikacje mogą sprawdzać obsługę MIDI za pomocą funkcji android.software.midi.

Aby włączyć obsługę MIDI, dodaj ten wiersz do pliku device.mk:

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

Więcej informacji o wymaganiach dotyczących korzystania z tej funkcji znajdziesz w dokumentacji dotyczącej zgodności z Androidem (CDD).

Debugowanie w trybie hosta

W trybie hosta USB debugowanie za pomocą Android Debug Bridge (adb) jest niedostępne. Alternatywą jest sekcja Korzystanie z połączenia bezprzewodowego w Android Debug Bridge.