Musical Instrument DigitalInterface (MIDI) jest standardowym protokołem do łączenia komputerów z instrumentami muzycznymi, oświetleniem scenicznym i innymi mediami zorientowanymi na czas.
Prawdę mówiąc, MIDI nie jest związane z audio. Ale ponieważ MIDI jest powszechnie używane z muzyką, ten artykuł jest umieszczony w sekcji audio.
MIDI dla NDK
Android 10 ułatwia przenoszenie profesjonalnych aplikacji audio wykorzystujących MIDI na platformę Android.
AMidi
to API NDK, które daje programistom możliwość wysyłania i odbierania danych MIDI za pomocą kodu C/C++.
Androidowe aplikacje MIDI zazwyczaj używają midi
API do komunikacji z Androidową usługą MIDI. MIDIapps głównie zależą od klasy MidiManager
do odkrywania, otwierania i zamykania jednego lub więcej MidiDevice
obiektów, i przekazywania danych do i z każdego urządzenia poprzez porty wejściowe i wyjściowe MIDI urządzenia.
Transporty
Fizyczny transportplayerpecified w oryginalnym MIDI 1.0 jest pętla prądowa z 5-pinowym złączem DIN.
Od MIDI 1.0 zostały zdefiniowane dodatkowe transporty, w tym MIDI over USB i MIDI overBluetooth Low Energy(BLE).
MIDI dla Androida
Android wspieraUSB On-The-Go, który 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 wydania Android 6.0 (Marshmallow), producenci urządzeń mogą włączyć opcjonalne wsparcie MIDI w platformie. Android bezpośrednio obsługuje USB, BLE, i wirtualne (interapp) transporty.Android obsługuje MIDI 1.0 poprzez zewnętrzny adapter.
Dla szczegółów na temat programowania aplikacji z MIDI API, zobaczandroid.media.midi
package.
Reszta tego artykułu omawia jak producent urządzeń z Androidem może włączyć wsparcie MIDI w platformie.
Włączanie transportów
Implementacja MIDI zależy od ALSA dla transportów USB host mode i USB peripheral mode.ALSA nie jest używana dla BLE i transportów wirtualnych.
Tryb hosta USB
Aby włączyć MIDI dla trybu hosta USB, najpierw wspieraj tryb hosta USB ogólnie, a następnie włącz CONFIG_SND_RAWMIDI
i CONFIG_SND_USB_MIDI
w konfiguracji kernela. Zobacz Android Kernel Configuration.
Transport MIDI over USB jest formalnie zdefiniowany przezUniversal Serial Bus Device Class Definition for MIDI Devices Release 1.0 Nov 1, 1999standard opublikowany przezUSB Implementers Forum, Inc.
Tryb peryferyjny USB
Aby włączyć MIDI dla trybu peryferyjnego USB, możesz potrzebować zastosować poprawki do jądra Linuksa by zintegrować drivers/usb/gadget/f_midi.c
do gadgetdrivera USB. Te poprawki są dostępne dla jądra Linux w wersji 3.10. Łatki te nie zostały jeszcze uaktualnione dla ConfigFs (nowa architektura dla sterowników gadżetów USB), ani nie są połączone na upstreamkernel.org.
Łatki są pokazane w kolejności commitów dla drzewa jądra w projekcie kernel/common
branch android-3.10
:
- https://android-review.googlesource.com/#/c/127450/
- https://android-review.googlesource.com/#/c/127452/
- https://android-review.googlesource.com/#/c/143714/
Musisz również wykonać jedną z następujących czynności:
- Przejść do Ustawienia > Opcje deweloperskie > Sieć i zaznaczyć pole dla MIDI w oknie dialogowym Wybierz konfigurację USB.
- Podłączając się do hosta USB, pociągnij w dół od góry ekranu, wybierz pozycjęUSB for, a następnie wybierz MIDI.
BLE
MIDI over BLE jest zawsze włączone, pod warunkiem, że urządzenie obsługuje BLE.
Virtual (interapp)
Transport wirtualny (interapp) jest zawsze włączony.
Zgłoszenie funkcji
Aplikacje mogą sprawdzać obecność obsługi MIDI za pomocą funkcjiandroid.software.midi
.
Aby zażądać obsługi MIDI, dodaj tę linię do swojej aplikacji device.mk
:
PRODUCT_COPY_FILES += \frameworks/native/data/etc/android.software.midi.xml:system/etc/permissions/android.software.midi.xml
Zapoznaj się z dokumentem CDD (Android Compatibility Definition Document), aby uzyskać informacje na temat wymagań, które należy spełnić, aby zażądać tej funkcji.
Debugowanie w trybie hosta
W trybie hosta USB, debugowanie Android Debug Bridge (adb) przez USB jest niedostępne.Zobacz sekcję Wireless usage w Android Debug Bridge, aby uzyskać alternatywę.
Debugowanie w trybie hosta USB jest niedostępne.