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 dodano obsługę MIDI 2.0 w przypadku transportu USB. MIDI 2.0 to nowszy standard MIDI zdefiniowany w 2020 roku. Ten protokół dodaje funkcje takie jak komunikacja dwukierunkowa, wyższa rozdzielczość i wymiana właściwości. Tryb hosta MIDI 2.0 przez USB jest zawsze włączony, gdy na platformie włączona jest obsługa MIDI. MIDI 2.0 przez wirtualne połączenia jest obsługiwane na Androidzie 15 i nowszych wersjach.

Ściśle mówiąc, MIDI nie jest związane z dźwiękiem. Jednak ponieważ MIDI jest powszechnie 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 interfejs NDK API, który umożliwia programistom aplikacji wysyłanie i odbieranie danych MIDI za pomocą kodu C/C++.

Aplikacje MIDI na Androida zwykle używają interfejsu midi do komunikacji z usługą MIDI na Androida. Aplikacje MIDI zależą głównie od klasy MidiManager, która umożliwia wykrywanie, otwieranie i zamykanie co najmniej jednego obiektu MidiDevice oraz przesyłanie danych do i z każdego urządzenia przez porty wejściowe i wyjściowe MIDI.

Transporty

Fizyczna warstwa transportowa określona w oryginalnym standardzie MIDI 1.0 to pętla prądowa ze złączem DIN 5-pin.

Od czasu wprowadzenia standardu MIDI 1.0 zdefiniowano dodatkowe protokoły przesyłania, w tym MIDI przez USB i MIDI przez Bluetooth Low Energy (BLE).

MIDI na Androida

Android obsługuje USB On-The-Go, co pozwala urządzeniu z Androidem działać jako host USB do obsługi urządzeń peryferyjnych USB. Interfejsy API trybu hosta USB umożliwiają deweloperom implementowanie MIDI przez USB na poziomie aplikacji, ale do niedawna nie było wbudowanych interfejsów API platformy dla MIDI.

Od wersji Androida 6.0 (Marshmallow) producenci urządzeń mogą włączyć w platformie opcjonalną obsługę MIDI. Android obsługuje bezpośrednio transport USB, BLE i wirtualny (między aplikacjami). Android obsługuje MIDI 1.0 za pomocą zewnętrznego adaptera.

Szczegółowe informacje o programowaniu aplikacji za pomocą interfejsów MIDI API znajdziesz w android.media.midi.

W dalszej części tego artykułu opisujemy, 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 trybu hosta USB i trybu urządzenia peryferyjnego USB. W przypadku transportu BLE i wirtualnego nie jest używany interfejs ALSA.

Tryb hosta USB

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

Protokół MIDI przez USB jest formalnie zdefiniowany 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 systemu Linux w celu zintegrowania drivers/usb/gadget/f_midi.c ze sterownikiem urządzenia USB. Te poprawki są dostępne w przypadku jądra systemu Linux w wersji 3.10. Te poprawki nie zostały jeszcze zaktualizowane pod kątem ConfigFs (nowej architektury sterowników urządzeń USB) ani nie zostały scalone w kernel.org.

Patche są wyświetlane w kolejności zatwierdzania 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 w oknie dialogowym Wybierz konfigurację USB zaznacz pole MIDI.
  • Gdy urządzenie jest podłączone do hosta USB, przesuń palcem od góry ekranu w dół, wybierz wpis USB do, a potem kliknij MIDI.

BLE

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

Wirtualne (interapp)

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

Zgłaszanie funkcji

Aplikacje mogą sprawdzać, czy urządzenie obsługuje MIDI, za pomocą funkcji android.software.midi.

Aby zgłosić 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 dokumencie definicji zgodności Androida (CDD).

Debugowanie w trybie hosta

W trybie hosta USB debugowanie za pomocą Android Debug Bridge (adb) przez USB jest niedostępne. Alternatywne rozwiązanie znajdziesz w sekcji Używanie bezprzewodowe w artykule Android Debug Bridge.