MIDI

Digital de instrumentos musicales (MIDI) es un protocolo estándar para interconectar computadoras con música instrumentos, iluminación escénica 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 formato MIDI más reciente definido en 2020. Este protocolo agrega funciones como comunicación bidireccional, mayor la resolución y el intercambio de propiedades. MIDI 2.0 a través del modo de host USB siempre está habilitado cuando se admite MIDI esté habilitado en la plataforma.

En sentido estricto, el MIDI no está relacionado con el audio. Sin embargo, como el MIDI se usa comúnmente con 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 usando MIDI en la plataforma de Android.

AMidi es un La API de NDK que brinda la app a los desarrolladores 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. MIDI Las apps dependen principalmente de la clase MidiManager para descubrir, abrir y cerrar uno o más MidiDevice. y pasar datos hacia y desde cada dispositivo a través de los puertos de entrada y salida MIDI del dispositivo.

Transporte

El transporte físico capa especificado en el MIDI original 1.0 es un bucle de corriente con conector DIN de 5 pines.

A partir de MIDI 1.0, se definieron transportes adicionales, incluido MIDI mediante USB. y MIDI en Bluetooth de bajo consumo (BLE).

MIDI para Android

Android es compatible USB Sobre la marcha, que permite que un dispositivo Android funcione como host USB para almacenar USB periféricos. Las APIs del modo de host USB desarrolladores implementarán MIDI mediante USB a nivel de la aplicación, pero hasta que hace poco no ha habido APIs de plataforma integradas para MIDI.

A partir de la versión de Android 6.0 (Marshmallow), los fabricantes de dispositivos pueden habilitar el formato MIDI opcional en la plataforma. Android admite directamente transportes USB, BLE y virtuales (interapp). 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 la android.media.midi .

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

Habilitar transportes de MIDI 1.0

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

Modo de host USB

Para habilitar MIDI para el modo de host USB, primero debes admitir el modo de host USB en general. Luego, habilita CONFIG_SND_RAWMIDI y CONFIG_SND_USB_MIDI en tu kernel configuración. Consulta Configuración del kernel de Android.

El MIDI por transporte USB se define formalmente por el Definición de clase de dispositivo de bus universal en serie para dispositivos MIDI versión 1.0 1 de noviembre de 1999 estándar publicado por el USB Implementers Forum, Inc.

Modo periférico USB

Si quieres habilitar el modo MIDI para periférico USB, es posible que debas aplicar parches al kernel de Linux para integrar drivers/usb/gadget/f_midi.c en el gadget USB controlador. Estos parches están disponibles para la versión de kernel de Linux 3.10. Aún no se actualizaron estos parches para ConfigF (una nueva arquitectura para controladores de gadgets USB), ni se fusionan en el flujo ascendente kernel.org

Los parches se muestran en orden de confirmación para el árbol del kernel en el proyecto kernel/common. rama 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/

También debes realizar una de las siguientes acciones:

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

BLE

MIDI por BLE siempre está habilitado, siempre que el dispositivo sea compatible con BLE.

Virtual (interapp)

El transporte virtual (interapp) siempre está habilitado.

Reclamación de la función

Las apps pueden detectar la presencia de compatibilidad con MIDI a través del android.software.midi.

Para reclamar 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 la Documento de definición de compatibilidad de Android (CDD) para obtener información sobre los requisitos para reclamar el elemento.

Cómo depurar en el modo de host

La depuración de Android Debug Bridge (adb) a través de USB no está disponible mientras se está en el modo de host USB. Consulta el Uso inalámbrico de Android Debug Bridge para obtener una alternativa.