MIDI

Musical Instrument Digital Interface (MIDI) est un protocole standard permettant d'interconnecter des ordinateurs avec des instruments de musique, des éclairages de scène et d'autres médias orientés vers le 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 aucun rapport avec l'audio. Mais comme 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 appareil via les ports d'entrée et de sortie MIDI de l'appareil.

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 le MIDI sur USB et le MIDI sur Bluetooth Low Energy (BLE) .

MIDI pour Android

Android prend en charge USB On-The-Go , qui permet à un appareil Android d'agir comme un hôte USB pour piloter des périphériques USB. Les API du 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'existait aucune 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 dans la plate-forme. Android prend directement en charge les transports USB, BLE et virtuels (inter-applications). 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 dans la plate-forme.

Activation des transports MIDI 1.0

L'implémentation MIDI 1.0 dépend d'ALSA pour le mode hôte USB et les transports 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, prenez d'abord 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 du 1er novembre 1999 publiée par USB Implementers Forum, Inc.

Mode périphérique USB

Pour activer le MIDI pour le mode périphérique 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 les ConfigF (une nouvelle architecture pour les pilotes de gadgets USB), et ils ne sont pas non plus fusionnés en amont sur kernel.org .

Les correctifs sont affichés dans l'ordre de validation pour l'arborescence du noyau dans le 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 du développeur > 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 sur BLE est toujours activé, à condition que l'appareil prenne en charge BLE.

Virtuel (inter-application)

Le transport virtuel (inter-application) est toujours activé.

Réclamer 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 la prise en charge 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.