MIDI

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

A partire da Android 13, il supporto MIDI 2.0 viene aggiunto al trasporto USB. MIDI 2.0 è un nuovo standard MIDI definito nel 2020. Questo protocollo aggiunge funzionalità come comunicazione bidirezionale, risoluzione più elevata e scambio di proprietà. La modalità host MIDI 2.0 tramite USB è sempre abilitata quando il supporto MIDI è abilitato sulla piattaforma.

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

MIDI per NDK

Android 10 semplifica il porting di app audio professionali tramite MIDI sulla piattaforma Android.

AMidi è un'API NDK che offre agli sviluppatori di app la possibilità di inviare e ricevere dati MIDI con codice C/C++.

Le app MIDI Android in genere utilizzano l'API midi per comunicare con il servizio MIDI Android. Le app MIDI dipendono principalmente dalla classe MidiManager per individuare, aprire e chiudere uno o più oggetti MidiDevice e passare dati da e verso ciascun dispositivo tramite le porte di ingresso e uscita 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 .

A partire dal MIDI 1.0, sono stati definiti trasporti aggiuntivi, inclusi 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 gestire periferiche USB. Le API della modalità host USB consentono agli sviluppatori di implementare il MIDI su USB a livello di applicazione, ma fino a poco tempo fa non esistevano API della piattaforma integrate per il MIDI.

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

Per dettagli sulla programmazione dell'applicazione con le API MIDI, vedere il pacchetto android.media.midi .

Nella parte restante di questo articolo viene illustrato come un produttore di dispositivi Android può abilitare il supporto MIDI nella piattaforma.

Abilitazione dei trasporti MIDI 1.0

L'implementazione del MIDI 1.0 dipende da ALSA per la modalità host USB e per i trasporti in modalità periferica USB. ALSA non viene utilizzato per BLE e per i trasporti virtuali.

Modalità host USB

Per abilitare il MIDI per la modalità host USB, supportare innanzitutto la modalità host USB in generale, quindi abilitare CONFIG_SND_RAWMIDI e CONFIG_SND_USB_MIDI nella configurazione del kernel. Vedi Configurazione del kernel Android.

Il trasporto MIDI su USB è formalmente definito dallo standard Universal Serial Bus Device Class Definition for MIDI Devices Release 1.0 del 1 novembre 1999 pubblicato da 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 il kernel Linux versione 3.10. Queste patch non sono ancora state aggiornate per ConfigFs (una nuova architettura per i driver dei gadget USB), né sono riunite nel sito upstream kernel.org .

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

È inoltre necessario effettuare una delle seguenti operazioni:

  • Vai su Impostazioni > Opzioni sviluppatore > Rete e seleziona la casella MIDI nella finestra di dialogo Seleziona configurazione USB.
  • Mentre sei 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 abilitato, a condizione che il dispositivo supporti BLE.

Virtuale (interapp)

Il trasporto virtuale (interapp) è sempre abilitato.

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 documento di definizione della compatibilità Android (CDD) per informazioni sui requisiti per richiedere la funzionalità.

Debug in modalità host

In modalità host USB, il debug di Android Debug Bridge (adb) su USB non è disponibile. Consulta la sezione Utilizzo wireless di Android Debug Bridge per un'alternativa.