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.

Mówiąc ściśle, MIDI nie ma związku z dźwiękiem. Ale ponieważ MIDI jest powszechnie używany w muzyce, ten artykuł znajduje się w sekcji audio.

MIDI dla NDK

Android 10 ułatwia przenoszenie profesjonalnych aplikacji audio za pomocą MIDI na platformę Android.

AMidi to interfejs API NDK , który daje programistom aplikacji możliwość wysyłania i odbierania danych MIDI z kodem C/C++.

Aplikacje Android MIDI zwykle używają interfejsu midi API do komunikowania się z usługą Android MIDI. Aplikacje MIDI zależą przede wszystkim od klasy MidiManager , aby wykrywać, otwierać i zamykać jeden lub więcej obiektów MidiDevice oraz przekazywać dane do i z każdego urządzenia przez porty wejściowe i wyjściowe MIDI urządzenia.

Transporty

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

Od wersji MIDI 1.0 zdefiniowano dodatkowe transporty, w tym MIDI przez USB i MIDI przez Bluetooth Low Energy (BLE) .

MIDI dla 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 pozwalają programistom na implementację MIDI przez USB na poziomie aplikacji, ale do niedawna nie było wbudowanych interfejsów API platformy dla MIDI.

Począwszy od wersji Androida 6.0 (Marshmallow), twórcy urządzeń mogą włączyć opcjonalną obsługę MIDI na platformie. Android bezpośrednio obsługuje transporty USB, BLE i wirtualne (interapp). Android obsługuje MIDI 1.0 poprzez zewnętrzny adapter.

Szczegółowe informacje na temat programowania aplikacji za pomocą interfejsów API MIDI można znaleźć w pakiecie android.media.midi .

W dalszej części tego artykułu omówiono, w jaki sposób producent urządzeń z systemem Android może włączyć obsługę MIDI na platformie.

Umożliwienie transportów

Implementacja MIDI zależy od ALSA dla trybu hosta USB i transportu w trybie urządzeń peryferyjnych USB. ALSA nie jest używana do BLE i transportów wirtualnych.

Tryb hosta USB

Aby włączyć MIDI dla trybu hosta USB, najpierw ogólnie obsługuj tryb hosta USB, a następnie włącz CONFIG_SND_RAWMIDI i CONFIG_SND_USB_MIDI w konfiguracji jądra. Zobacz Konfiguracja jądra systemu Android.

Transport MIDI przez USB jest formalnie zdefiniowany w standardzie Universal Serial Bus Device Class Definition for MIDI Devices Release 1.0 1 listopada 1999 opublikowanym przez USB Implementers Forum, Inc.

Tryb urządzeń peryferyjnych USB

Aby włączyć MIDI dla trybu urządzeń peryferyjnych USB, może być konieczne zastosowanie poprawek w jądrze 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 dla ConfigFs (nowej architektury sterowników gadżetów USB), ani nie są scalone na stronie kernel.org .

Poprawki są pokazane w kolejności zatwierdzania dla drzewa jądra w projekcie kernel/common branch 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 także wykonać jedną z następujących czynności:

  • Przejdź do Ustawienia > Opcje programisty > Sieć i zaznacz pole MIDI w oknie dialogowym Wybierz konfigurację USB.
  • Po podłączeniu do hosta USB przeciągnij w dół od góry ekranu, wybierz wpis USB dla , a następnie wybierz MIDI .

BLE

MIDI przez BLE jest zawsze włączone, pod warunkiem, że urządzenie obsługuje BLE.

Wirtualny (interapp)

Transport wirtualny (interapp) jest zawsze włączony.

Przejmowanie funkcji

Aplikacje mogą sprawdzać obecność obsługi MIDI za pomocą funkcji android.software.midi .

Aby ubiegać się o obsługę MIDI, dodaj tę linię do swojego device.mk :

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

Zapoznaj się z dokumentem definicji zgodności z systemem Android (CDD) , aby uzyskać informacje na temat wymagań dotyczących korzystania z funkcji.

Debugowanie w trybie hosta

W trybie hosta USB debugowanie Android Debug Bridge (adb) przez USB jest niedostępne. Alternatywę można znaleźć w sekcji Korzystanie z sieci bezprzewodowej w Android Debug Bridge.