MIDI

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/commonandroid-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 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.