MIDI

Musical Instrument Digital Interface (MIDI) è un protocollo standard per l'interconnessione di computer con strumenti musicali, illuminazione scenica e altri media orientati al tempo.

A partire da Android 13, il supporto di MIDI 2.0 viene aggiunto al trasporto USB. MIDI 2.0 è uno standard MIDI più recente definito nel 2020. Questo protocollo aggiunge funzionalità come la comunicazione bidirezionale, una risoluzione più elevata e lo scambio di proprietà. MIDI 2.0 tramite la modalità host USB è sempre abilitato quando il supporto MIDI è abilitato sulla piattaforma. MIDI 2.0 su trasporti virtuali è supportato in Android 15 e versioni successive.

A rigor di termini, il MIDI non è correlato all'audio. Tuttavia, poiché il MIDI viene comunemente utilizzato con la musica, questo articolo è stato inserito nella sezione audio.

MIDI per NDK

Android 10 semplifica il porting di 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++.

Le app MIDI per Android di solito utilizzano l'API midi per comunicare con il servizio MIDI per Android. Le app MIDI dipendono principalmente dalla classe MidiManager per rilevare, aprire e chiudere uno o più oggetti MidiDevice e trasferire dati da e verso ogni dispositivo tramite le porte di input e output MIDI del dispositivo.

Trasporti

Il livello di trasporto fisico specificato nel MIDI 1.0 originale è un loop di corrente con connettore DIN a 5 pin.

Dalla versione MIDI 1.0 sono stati definiti ulteriori trasporti, tra cui MIDI su USB e MIDI su Bluetooth Low Energy (BLE).

MIDI per Android

Android supporta USB On-The-Go, che consente a un dispositivo Android di fungere da host USB per controllare le periferiche USB. Le API per la modalità host USB consentono agli sviluppatori di implementare MIDI su USB a livello di applicazione, ma fino a poco tempo fa non esistevano API della piattaforma integrate per MIDI.

A partire dalla release Android 6.0 (Marshmallow), i produttori di dispositivi possono attivare il supporto MIDI opzionale nella piattaforma. Android supporta direttamente i trasporti USB, BLE e virtuali (tra app). Android supporta MIDI 1.0 tramite un adattatore esterno.

Per informazioni dettagliate sulla programmazione di applicazioni con le API MIDI, consulta il pacchetto android.media.midi.

Il resto di questo articolo spiega 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 le modalità di trasporto host USB e periferica USB. ALSA non viene utilizzato per i trasporti virtuali e BLE.

Modalità host USB

Per abilitare MIDI per la modalità host USB, devi prima supportare la modalità host USB in generale e poi abilitare CONFIG_SND_RAWMIDI e CONFIG_SND_USB_MIDI nella configurazione del kernel.

Il trasporto MIDI su USB è definito formalmente dallo standard Universal Serial Bus Device Class Definition for MIDI Devices Release 1.0 del 1° novembre 1999 pubblicato dall'USB Implementers Forum, Inc.

Modalità periferica USB

Per abilitare 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 del kernel Linux 3.10. Queste patch non sono ancora state aggiornate per ConfigFs (una nuova architettura per i driver dei gadget USB) e non sono state unite al kernel kernel.org upstream.

Le patch vengono mostrate nell'ordine di commit per l'albero del kernel nel progetto kernel/common ramo 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/

Devi inoltre eseguire una delle seguenti operazioni:

  • Vai a Impostazioni > Opzioni sviluppatore > Rete e seleziona 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, quindi seleziona MIDI.

BLE

MIDI over BLE è sempre attivo, a condizione che il dispositivo supporti BLE.

Virtuale (interapp)

Il trasporto virtuale (tra app) è sempre attivo.

Rivendicare la 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à.

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.