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. Dodaje on funkcje takie jak komunikacja dwukierunkowa, większa rozdzielczość i wymiana usług. 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ą Android MIDI 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.

Transport

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 wersji Androida 6.0 (Marshmallow) producenci urządzeń mogą włączyć na platformie opcjonalne obsługi 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 dalszej części tego artykułu omawiamy, jak producent urządzenia z Androidem może włączyć obsługę MIDI na platformie.

Włączanie transportu 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. Algorytm ALSA nie jest używany w przypadku BLE ani transportu wirtualnego.

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. 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

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.

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 za pomocą Android Debug Bridge (adb) jest niedostępne. Możesz to znaleźć w sekcji Wykorzystanie sieci bezprzewodowej w narzędziu Android Debug Bridge.