MIDI

Musical Instrument Digital Interface (MIDI) est un protocole standard pour interconnecter des ordinateurs avec des instruments de musique, un éclairage de scène et d'autres médias orientés temps.

À partir d'Android 13, la prise en charge MIDI 2.0 est ajoutée au transport USB. MIDI 2.0 est une norme MIDI plus récente définie en 2020. Ce protocole ajoute des fonctionnalités telles que la communication bidirectionnelle, une résolution plus élevée et l'échange de propriétés. Le mode hôte MIDI 2.0 via USB est toujours activé lorsque la prise en charge MIDI est activée sur la plate-forme.

À proprement parler, le MIDI n'a rien à voir avec l'audio. Mais parce que le MIDI est couramment utilisé avec la musique, cet article est placé dans la section audio.

MIDI pour NDK

Android 10 facilite le portage d'applications audio professionnelles utilisant MIDI sur la plate-forme Android.

AMidi est une API NDK qui donne aux développeurs d'applications la possibilité d'envoyer et de recevoir des données MIDI avec du code C/C++.

Les applications Android MIDI utilisent généralement l'API midi pour communiquer avec le service Android MIDI. Les applications MIDI dépendent principalement de la classe MidiManager pour découvrir, ouvrir et fermer un ou plusieurs objets MidiDevice , et transmettre des données vers et depuis chaque périphérique via les ports d'entrée et de sortie MIDI du périphérique.

Les transports

La couche de transport physique spécifiée dans le MIDI 1.0 d'origine est une boucle de courant avec un connecteur DIN à 5 broches .

Depuis MIDI 1.0, des transports supplémentaires ont été définis, notamment MIDI sur USB et MIDI sur Bluetooth Low Energy (BLE) .

MIDI pour Android

Android prend en charge USB On-The-Go , qui permet à un appareil Android d'agir en tant qu'hôte USB pour piloter des périphériques USB. Les API en mode hôte USB permettent aux développeurs d'implémenter le MIDI sur USB au niveau de l'application, mais jusqu'à récemment, il n'y avait pas d'API de plate-forme intégrée pour le MIDI.

À partir de la version Android 6.0 (Marshmallow), les fabricants d'appareils peuvent activer la prise en charge MIDI en option sur la plate-forme. Android prend directement en charge les transports USB, BLE et virtuels (interapp). Android prend en charge MIDI 1.0 via un adaptateur externe.

Pour plus de détails sur la programmation d'applications avec les API MIDI, consultez le package android.media.midi .

Le reste de cet article explique comment un fabricant d'appareils Android peut activer la prise en charge MIDI sur la plate-forme.

Activation des transports MIDI 1.0

L'implémentation de MIDI 1.0 dépend d'ALSA pour les transports en mode hôte USB et en mode périphérique USB. ALSA n'est pas utilisé pour le BLE et les transports virtuels.

Mode hôte USB

Pour activer le MIDI pour le mode hôte USB, commencez par prendre en charge le mode hôte USB en général, puis activez CONFIG_SND_RAWMIDI et CONFIG_SND_USB_MIDI dans la configuration de votre noyau. Voir Configuration du noyau Android.

Le transport MIDI sur USB est formellement défini par la norme Universal Serial Bus Device Class Definition for MIDI Devices Release 1.0 Nov 1, 1999 publiée par USB Implementers Forum, Inc .

Mode périphérique USB

Pour activer le mode périphérique MIDI pour USB, vous devrez peut-être appliquer des correctifs à votre noyau Linux pour intégrer drivers/usb/gadget/f_midi.c dans le pilote du gadget USB. Ces correctifs sont disponibles pour la version 3.10 du noyau Linux. Ces correctifs n'ont pas encore été mis à jour pour ConfigFs (une nouvelle architecture pour les pilotes de gadgets USB), ni fusionnés sur kernel.org en amont.

Les correctifs sont affichés dans l'ordre de validation pour l'arborescence du noyau au niveau du projet kernel/common branch 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/

Vous devez également effectuer l'une des opérations suivantes :

  • Accédez à Paramètres > Options pour les développeurs > Mise en réseau et cochez la case MIDI dans la boîte de dialogue Sélectionner la configuration USB.
  • Une fois connecté à l'hôte USB, déroulez depuis le haut de l'écran, sélectionnez l'entrée USB pour , puis sélectionnez MIDI .

BLE

MIDI over BLE est toujours activé, à condition que l'appareil prenne en charge BLE.

Virtuel (interapp)

Le transport virtuel (interapp) est toujours activé.

Revendiquer la fonctionnalité

Les applications peuvent détecter la présence de la prise en charge MIDI à l'aide de la fonctionnalité android.software.midi .

Pour réclamer le support MIDI, ajoutez cette ligne à votre device.mk :

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

Consultez le document de définition de compatibilité Android (CDD) pour plus d'informations sur les conditions requises pour revendiquer la fonctionnalité.

Débogage en mode hôte

En mode hôte USB, le débogage Android Debug Bridge (adb) via USB n'est pas disponible. Consultez la section Utilisation sans fil d'Android Debug Bridge pour une alternative.