Musical Instrument Digital Interface (MIDI) è un protocollo standard per interconnettere computer con strumenti musicali, illuminazione scenica e altri contenuti multimediali basati sul tempo.
A partire da Android 13, il supporto di MIDI 2.0 è stato aggiunto al trasporto USB. MIDI 2.0 è un nuovo standard MIDI definito nel 2020. Questo protocollo aggiunge funzionalità come la comunicazione bidirezionale, una risoluzione più elevata e lo scambio di proprietà. MIDI 2.0 tramite modalità host USB è sempre attivo quando il supporto MIDI è attivo sulla piattaforma.
Tecnicamente, il MIDI non è correlato all'audio. Tuttavia, poiché il MIDI viene utilizzato comunemente con la musica, questo articolo è inserito nella sezione Audio.
MIDI per NDK
Android 10 semplifica la portabilità delle app audio professionali che utilizzano MIDI sulla piattaforma Android.
AMidi
è un'API NDK che consente agli sviluppatori di app di inviare e ricevere dati MIDI con codice C/C++.
In genere, le app MIDI per Android utilizzano l'API
midi
per comunicare con il servizio MIDI per Android. Le app MIDI dependono principalmente sulla classe
MidiManager
per rilevare, aprire e chiudere uno o più oggetti
MidiDevice
e trasmettere dati a e da ciascun dispositivo tramite le porte di input e output MIDI del dispositivo.
Trasporti
Il livello di trasporto fisico specificato nel MIDI 1.0 originale è un anello di corrente con connettore DIN a 5 pin.
A partire da MIDI 1.0, sono stati definiti altri protocolli di trasporto, tra cui MIDI tramite USB e MIDI tramite Bluetooth Low Energy (BLE).
MIDI per Android
Android supporta la funzionalità USB On-The-Go, che consente a un dispositivo Android di fungere da host USB per gestire le periferiche USB. Le API in modalità host USB consentono agli sviluppatori di implementare MIDI tramite USB a livello di applicazione, ma fino a poco tempo fa non erano disponibili API di piattaforma integrate per MIDI.
A partire dalla release Android 6.0 (Marshmallow), i produttori di dispositivi possono attivare il supporto facoltativo MIDI nella piattaforma. Android supporta direttamente i trasporti USB, BLE e virtuali (interapp). Android supporta MIDI 1.0 tramite un adattatore esterno.
Per informazioni dettagliate sulla programmazione delle applicazioni con le API MIDI, consulta il
package android.media.midi
.
Il resto di questo articolo illustra come un produttore di dispositivi Android può attivare il supporto MIDI nella piattaforma.
Attivazione dei trasporti MIDI 1.0
L'implementazione di MIDI 1.0 dipende da ALSA per i trasporti in modalità host USB e in modalità periferica USB. ALSA non viene utilizzato per i trasporti virtuali e BLE.
Modalità host USB
Per attivare il MIDI per la modalità host USB, supporta innanzitutto la modalità host USB in generale e poi attiva CONFIG_SND_RAWMIDI
e CONFIG_SND_USB_MIDI
nella configurazione del kernel.
Il trasporto MIDI tramite USB è definito formalmente dalla Universal Serial Bus Device Class Definition for MIDI Devices Release 1.0 Nov 1, 1999 standard pubblicata da USB Implementers Forum, Inc.
Modalità periferica USB
Per attivare il MIDI per la modalità periferica USB, potrebbe essere necessario applicare patch al kernel Linux per integrare drivers/usb/gadget/f_midi.c
nel driver del gadget USB. Queste patch sono disponibili per la versione 3.10 del kernel Linux. Queste patch non sono ancora state aggiornate per
ConfigFs
(una nuova architettura
per i driver di gadget USB) né sono state unite in upstream
kernel.org.
Le patch vengono mostrate in ordine di commit per l'albero del kernel nel ramo kernel/common
android-3.10
del progetto:
- https://android-review.googlesource.com/#/c/127450/
- https://android-review.googlesource.com/#/c/127452/
- https://android-review.googlesource.com/#/c/143714/
Devi anche eseguire una delle seguenti operazioni:
- Vai a Impostazioni > Opzioni sviluppatore > Rete e controlla la casella MIDI nella finestra di dialogo Seleziona configurazione USB.
- Mentre è collegato all'host USB, scorri verso il basso dalla parte superiore dello schermo, seleziona la voce USB per e poi MIDI.
BLE
MIDI over BLE è sempre attivo, a condizione che il dispositivo supporti BLE.
Virtuale (interapp)
Il trasporto virtuale (interapp) è sempre attivo.
Rivendicazione della funzionalità
Le app possono verificare la presenza del supporto MIDI utilizzando la funzionalitàandroid.software.midi
.
Per richiedere il supporto MIDI, aggiungi questa riga al tuo device.mk
:
PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.software.midi.xml:system/etc/permissions/android.software. midi.xml
Consulta il Compatibility Definition Document (CDD) di Android per informazioni sui requisiti per richiedere la funzionalità.
Eseguire il debug in modalità host
In modalità host USB, il debug Android Debug Bridge (adb) tramite USB non è disponibile. Per un'alternativa, consulta la sezione Utilizzo wireless di Android Debug Bridge.