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.

Ogólnie rzecz biorąc, MIDI nie ma związku z dźwiękiem. Ponieważ jednak MIDI jest często używany do tworzenia 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 wykorzystują przede wszystkim klasę MidiManager, aby wykrywać, otwierać i zamykać obiekty MidiDevice oraz przekazywać dane do i z każdego urządzenia przez porty wejściowe i wyjściowe MIDI.

Transporty

Fizyczna warstwa transportu określona w pierwotnej wersji MIDI 1.0 to pętla bieżącej z 5-stykowym złączem DIN.

Od wersji 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, dzięki czemu urządzenie z Androidem może działać 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.

Począwszy od Androida 6.0 (Marshmallow) twórcy urządzeń mogą włączyć na platformie opcjonalną obsługę MIDI. 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.

W pozostałej części tego artykułu omawiamy, jak producent urządzeń 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 protokołu ALSA w przypadku korzystania z trybu hosta USB i transportu między urządzeniami peryferyjnymi 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_RAWMIDI i CONFIG_SND_USB_MIDI w konfiguracji jądra. Zobacz Konfigurację jądra Androida.

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

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

Wirtualnie (interapp)

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

Roszczenie do funkcji

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 zgłoszenia tej funkcji znajdziesz w dokumentacji zdefiniowanej zgodności Androida (CDD).

Debugowanie w trybie hosta

W trybie hosta USB debugowanie Android Debug Bridge (adb) przez USB jest niedostępne. Alternatywą jest sekcja Korzystanie z łączności bezprzewodowej w Android Debug Bridge.