MIDI

Musical Instrument Digital Interface (MIDI) to standardowy protokół umożliwiający łączenie komputerów z instrumentami muzycznymi, oświetleniem scenicznym i innymi mediami zorientowanymi na czas.

Począwszy od Androida 13, do transportu USB dodano obsługę MIDI 2.0 . MIDI 2.0 to nowszy standard MIDI zdefiniowany w 2020 roku. Protokół ten dodaje takie funkcje, jak dwukierunkowa komunikacja, 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.

Ściśle mówiąc, MIDI nie jest związane z dźwiękiem. Ponieważ jednak w muzyce powszechnie stosuje się standard MIDI, ten artykuł umieszczono w dziale audio.

MIDI dla NDK

Android 10 ułatwia przenoszenie profesjonalnych aplikacji audio korzystających z MIDI na platformę Android.

AMidi to interfejs API NDK , który umożliwia twórcom aplikacji wysyłanie i odbieranie danych MIDI w kodzie C/C++.

Aplikacje MIDI na Androida zwykle używają interfejsu API midi do komunikacji z usługą MIDI Androida. Aplikacje MIDI zależą przede wszystkim od klasy MidiManager do wykrywania, otwierania i zamykania jednego lub większej liczby obiektów MidiDevice oraz przekazywania danych 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

System Android obsługuje technologię USB On-The-Go , która pozwala urządzeniu z systemem Android działać jako host USB do obsługi urządzeń peryferyjnych USB. Interfejsy API trybu hosta USB umożliwiają programistom 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), producenci urządzeń mogą włączyć opcjonalną obsługę MIDI na platformie. Android bezpośrednio obsługuje transporty USB, BLE i wirtualne (interaplikacje). Android obsługuje MIDI 1.0 za pośrednictwem zewnętrznego adaptera.

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

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

Włączanie transportów MIDI 1.0

Implementacja MIDI 1.0 zależy od ALSA dla trybu hosta USB i transportów w trybie peryferyjnym USB. ALSA nie jest używana do transportów BLE i wirtualnych.

Tryb hosta USB

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

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

Tryb urządzenia peryferyjnego USB

Aby włączyć MIDI dla trybu 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 Linuksa w wersji 3.10. Te poprawki nie zostały jeszcze zaktualizowane dla ConfigFs (nowa architektura sterowników gadżetów USB) ani nie zostały połączone w witrynie kernel.org .

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

  • Przejdź do Ustawienia > Opcje programistyczne > Sieć i zaznacz pole MIDI w oknie dialogowym Wybierz konfigurację USB.
  • Po podłączeniu do hosta USB przeciągnij w dół z 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 (interaplikacja)

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

Zgłaszanie roszczeń do tej 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

Informacje na temat wymagań dotyczących korzystania z tej funkcji można znaleźć w dokumencie definicji zgodności systemu Android (CDD) .

Debugowanie w trybie hosta

W trybie hosta USB debugowanie Android Debug Bridge (adb) przez USB jest niedostępne. Aby zapoznać się z alternatywą, zobacz sekcję dotyczącą korzystania z sieci bezprzewodowej w programie Android Debug Bridge.