MIDI

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:

  1. https://android-review.googlesource.com/#/c/127450/
  2. https://android-review.googlesource.com/#/c/127452/
  3. 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.