midi

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

A partir de Android 13, se agrega compatibilidad con MIDI 2.0 al transporte USB. MIDI 2.0 es un estándar MIDI más nuevo definido en 2020. Este protocolo agrega características como comunicación bidireccional, mayor resolución e intercambio de propiedades. MIDI 2.0 a través del modo host USB siempre está habilitado cuando la compatibilidad con MIDI está habilitada en la plataforma.

Estrictamente hablando, MIDI no tiene relación con el audio. Pero debido a que MIDI se usa comúnmente con música, este artículo se ubica en la sección de audio.

MIDI para NDK

Android 10 facilita la transferencia de aplicaciones de audio profesionales mediante MIDI a la plataforma Android.

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

Las aplicaciones MIDI de Android suelen utilizar la API midi para comunicarse con el servicio MIDI de Android. Las aplicaciones MIDI dependen principalmente de la clase MidiManager para descubrir, abrir y cerrar uno o más objetos MidiDevice y 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ísico especificada en MIDI 1.0 original es un bucle de corriente con conector DIN de 5 pines .

Desde MIDI 1.0, se han definido transportes adicionales, incluidos MIDI sobre USB y MIDI sobre Bluetooth Low Energy (BLE) .

MIDI para Android

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

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

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

El resto de este artículo analiza cómo un fabricante de dispositivos Android puede habilitar la compatibilidad con MIDI en la plataforma.

Habilitación de transportes MIDI 1.0

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

Modo de host USB

Para habilitar MIDI para el modo de host USB, primero admita el modo de host USB en general y luego habilite CONFIG_SND_RAWMIDI y CONFIG_SND_USB_MIDI en la configuración de su kernel. Consulte Configuración del kernel de Android.

El transporte MIDI sobre USB está definido formalmente por el estándar Universal Serial Bus Device Class Definición para dispositivos MIDI versión 1.0 del 1 de noviembre de 1999 publicado por USB Implementers Forum, Inc.

Modo periférico USB

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

Los parches se muestran en orden de confirmación para el árbol del kernel en kernel/common 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 debe hacer cualquiera de las siguientes cosas:

  • Vaya a Configuración > Opciones de desarrollador > Redes y marque la casilla MIDI en el cuadro de diálogo Seleccionar configuración USB.
  • Mientras está conectado al host USB, desplácese hacia abajo desde la parte superior de la pantalla, seleccione la entrada USB para y luego seleccione MIDI .

BLE

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

Virtual (interaplicación)

El transporte virtual (interapp) siempre está habilitado.

Reclamando la característica

Las aplicaciones pueden detectar la presencia de soporte MIDI utilizando la función android.software.midi .

Para reclamar soporte MIDI, agregue esta línea a su device.mk :

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

Consulte 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 host

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