MIDI (Musical Instrument Digital Interface) è un protocollo standard per interconnettere computer con strumenti musicali, luci da palcoscenico e altri media orientati al 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 Android MIDI utilizzano l'API
midi
per comunicare con il servizio Android MIDI. Le app MIDI dipendono principalmente dalla classe
MidiManager
per rilevare, aprire e chiudere uno o più oggetti
MidiDevice
e trasferire i dati da e verso ogni dispositivo tramite le porte di ingresso e uscita MIDI.
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 MIDI facoltativo nella piattaforma. Android supporta direttamente i trasporti USB, BLE e virtuali (interapp). Android supporta MIDI 1.0 tramite un adattatore esterno.
Per maggiori dettagli sulla programmazione di applicazioni con le API MIDI, consulta il pacchetto android.media.midi
.
Nella parte rimanente di questo articolo viene descritto in che modo 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 abilitare la modalità MIDI per la modalità host USB, devi prima supportare la modalità host USB in generale, quindi abilitare CONFIG_SND_RAWMIDI
e CONFIG_SND_USB_MIDI
nella configurazione del kernel. Consulta la sezione Configurazione del kernel Android.
Il trasporto MIDI su USB è definito formalmente dallo standard Universal Serial Bus Device Class Definition for MIDI Devices Release 1.0 1 novembre 1999 pubblicato dallo standard 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 kernel Linux
3.10. Queste patch non sono ancora state aggiornate per
ConfigF
(una nuova architettura per i driver dei gadget USB) né sono state unite a
kernel.org a monte.
Le patch vengono mostrate in ordine di commit per l'albero del kernel nel kernel/common
branch 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 inoltre effettuare una delle seguenti operazioni:
- Vai a Impostazioni > Opzioni sviluppatore > Networking e seleziona la casella per 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
La tecnologia MIDI over BLE è sempre attiva, a condizione che il dispositivo supporti la tecnologia BLE.
Virtuale (interapp)
Il trasporto virtuale (interapp) è sempre attivato.
Richiesta della funzionalità
Le app possono filtrare la presenza di 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 di Android Debug Bridge (adb) tramite USB non è disponibile. Per un'alternativa, consulta la sezione Utilizzo wireless di Android Debug Bridge.