MIDI

La interfaz digital de instrumentos musicales (MIDI) es un protocolo estándar para interconectar computadoras con instrumentos musicales, iluminación de escenarios y otros medios orientados al tiempo.

A partir de Android 13, se admite MIDI 2.0 en el transporte USB. MIDI 2.0 es un estándar MIDI más reciente que se definió en 2020. Este protocolo agrega funciones como comunicación bidireccional, mayor resolución e intercambio de propiedades. El modo de host USB de MIDI 2.0 siempre está habilitado cuando la plataforma admite MIDI. MIDI 2.0 a través de transportes virtuales es compatible con Android 15 y versiones posteriores.

En sentido estricto, el MIDI no está relacionado con el audio. Sin embargo, como el MIDI se usa comúnmente con la música, este artículo se encuentra en la sección de audio.

MIDI para NDK

Android 10 facilita la portabilidad de apps de audio profesionales con MIDI en la plataforma de Android.

AMidi es una API del NDK que proporciona a los desarrolladores de apps la capacidad de enviar y recibir datos MIDI con código C/C++.

Por lo general, las apps MIDI de Android usan la API de midi para comunicarse con el servicio MIDI de Android. Las apps MIDI dependen principalmente de la clase MidiManager para descubrir, abrir y cerrar uno o más objetos MidiDevice, y para pasar datos hacia y desde cada dispositivo a través de los puertos de entrada y salida MIDI del dispositivo.

Transportes

La capa de transporte física especificada en el estándar MIDI 1.0 original es un bucle de corriente con un conector DIN de 5 pines.

Desde MIDI 1.0, se definieron transportes adicionales, incluidos MIDI a través de USB y MIDI a través de Bluetooth de bajo consumo (BLE).

MIDI para Android

Android admite USB On-The-Go, que permite que un dispositivo Android actúe como host USB para controlar periféricos USB. Las APIs del modo host USB permiten a los desarrolladores implementar MIDI a través de USB a nivel de la aplicación, pero hasta hace poco no había APIs de plataforma integradas para MIDI.

A partir de la versión de Android 6.0 (Marshmallow), los fabricantes de dispositivos pueden habilitar la compatibilidad opcional con MIDI en la plataforma. Android admite directamente los transportes USB, BLE y virtuales (entre apps). Android admite MIDI 1.0 a través de un adaptador externo.

Para obtener detalles sobre la programación de aplicaciones con las APIs de MIDI, consulta el paquete android.media.midi.

En el resto de este artículo, se explica cómo un fabricante de dispositivos Android puede habilitar la compatibilidad con MIDI en la plataforma.

Cómo habilitar los transportes MIDI 1.0

La implementación de MIDI 1.0 depende de ALSA para los transportes en modo host USB y en modo periférico USB. ALSA no se usa para los transportes virtuales y de BLE.

Modo de host USB

Para habilitar MIDI para el modo de host USB, primero debes admitir el modo de host USB en general y, luego, habilitar CONFIG_SND_RAWMIDI y CONFIG_SND_USB_MIDI en la configuración del kernel.

El transporte MIDI a través de USB se define formalmente en el estándar Universal Serial Bus Device Class Definition for MIDI Devices Release 1.0 Nov 1, 1999 publicado por el USB Implementers Forum, Inc.

Modo de periférico USB

Para habilitar MIDI para el modo periférico USB, es posible que debas aplicar parches al kernel de Linux para integrar drivers/usb/gadget/f_midi.c en el controlador de gadget USB. Estos parches están disponibles para la versión 3.10 del kernel de Linux. Estos parches aún no se actualizaron para ConfigFs (una nueva arquitectura para los controladores de dispositivos USB) ni se combinaron en kernel.org.

Los parches se muestran en orden de confirmación para el árbol del kernel en la rama android-3.10 del proyecto kernel/common:

  1. https://android-review.googlesource.com/#/c/127450/
  2. https://android-review.googlesource.com/#/c/127452/
  3. https://android-review.googlesource.com/#/c/143714/

También debes realizar una de las siguientes acciones:

  • Ve a Configuración > Opciones para desarrolladores > Redes y marca la casilla de MIDI en el diálogo Seleccionar configuración de USB.
  • Mientras el dispositivo está conectado al host USB, desliza el dedo hacia abajo desde la parte superior de la pantalla, selecciona la entrada USB para y, luego, MIDI.

BLE

MIDI over BLE siempre está habilitado, siempre y cuando el dispositivo sea compatible con BLE.

Virtual (interapp)

El transporte virtual (entre apps) siempre está habilitado.

Cómo reclamar la función

Las apps pueden verificar la presencia de compatibilidad con MIDI a través de la función android.software.midi.

Para reclamar la compatibilidad con MIDI, agrega esta línea a tu device.mk:

PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.software.midi.xml:system/etc/permissions/android.software.
midi.xml

Consulta el Documento de definición de compatibilidad de Android (CDD) para obtener información sobre los requisitos para reclamar la función.

Depuración en modo de host

Cuando está en modo de host USB, no está disponible la depuración de Android Debug Bridge (adb) a través de USB. Consulta la sección Uso inalámbrico de Android Debug Bridge para ver una alternativa.