La Interfaz Digital de Instrumentos Musicales (MIDI) es un protocolo estándar para interconectar ordenadores con instrumentos musicales, iluminación de escenario y otros medios orientados al tiempo.
En sentido estricto, MIDI no está relacionado con el audio. Pero debido a que el MIDI se utiliza comúnmente con la música, este artículo se coloca en la sección de audio.
MIDI para NDK
Android 10 hace que sea más fácil portar aplicaciones de audio profesionales que utilizan MIDI a la plataforma Android.
AMidi
es una API del NDK que ofrece a los desarrolladores de aplicaciones la posibilidad de enviar y recibir datos MIDI con código C/C++.
Las aplicaciones MIDI de Android suelen utilizar la midi
API para comunicarse con el servicio MIDI de Android. Las MIDIapps dependen principalmente de la clase MidiManager
para descubrir, abrir y cerrar uno o más MidiDevice
objetos, y pasar los 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 MIDI original 1.0 es un bucle de corriente con un conector DIN de 5 pines.
Desde MIDI 1.0, se han definido transportes adicionales, incluyendo MIDI sobre USBy MIDI sobreBluetooth Low Energy(BLE).
MIDI para Android
Android soportaUSB On-The-Go, lo que permite que un dispositivo Android actúe como un host USB para manejar periféricos USB. Las API del modo anfitrión USB permiten a los desarrolladores implementar MIDI a través de USB a nivel de aplicación, pero hasta hace poco no existían API de plataforma integradas para MIDI.
A partir de la versión de Android 6.0 (Marshmallow), los fabricantes de dispositivos pueden habilitar el soporte opcional de MIDI en la plataforma. Android admite directamente los transportes USB, BLE y virtual (interapp).Android admite MIDI 1.0 a través de un adaptador externo.
Para obtener detalles sobre la programación de aplicaciones con las API de MIDI, consulte elandroid.media.midi
paquete.
El resto de este artículo analiza cómo un fabricante de dispositivos Android puedehabilitar la compatibilidad con MIDI en la plataforma.
Habilitar los transportes
La implementación de MIDI depende de ALSA para los transportes en modo host USB y en modo periférico USB.ALSA no se utiliza para los transportes BLE y virtual.
Modo host USB
Para habilitar el MIDI para el modo host USB, primero soporta el modo host USB en general, y luego habilita CONFIG_SND_RAWMIDI
y CONFIG_SND_USB_MIDI
en la configuración de tu kernel. Consulte la configuración del kernel de Android.
El transporte MIDI sobre USB está formalmente definido por el estándarUniversal Serial Bus Device Class Definition for MIDI Devices Release 1.0 Nov 1, 1999 publicado por elUSB Implementers Forum, Inc.
Modo periférico USB
Para habilitar el 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 gadgetdriver USB. Estos parches están disponibles para la versión 3.10 del kernel de Linux. Estos parches aún no han sido actualizados paraConfigFs(una nueva arquitectura para los controladores de gadgets USB), ni están fusionados en upstreamkernel.org.
Los parches se muestran en orden de commit para el árbol del kernel en el proyecto kernel/common
branch android-3.10
:
- https://android-review.googlesource.com/#/c/127450/
- https://android-review.googlesource.com/#/c/127452/
- https://android-review.googlesource.com/#/c/143714/
También tienes que hacer cualquiera de las siguientes cosas:
- Ir a Configuración > Opciones de desarrollador > Redes y marcar la casilla de MIDI en el cuadro de diálogo Seleccionar configuración USB.
- Mientras está conectado al host USB, tire hacia abajo desde la parte superior de la pantalla, seleccione la entradaUSB para, y luego seleccione MIDI.
BLE
El MIDI sobre BLE está siempre activado, siempre que el dispositivo sea compatible con BLE.
Virtual (interapp)
El transporte virtual (interapp) está siempre activado.
Reclamación de la función
Las aplicaciones pueden comprobar la presencia de soporte MIDI mediante la funciónandroid.software.midi
.
Para reclamar la compatibilidad con MIDI, añade 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 (CDD) de Android para obtener información sobre los requisitos para reclamar la función.
Depuración en modo anfitrión
Mientras esté en modo anfitrión USB, la depuración de Android Debug Bridge (adb) a través de USB no está disponible.