La MIDI (Musical Instrument Digital Interface) est un protocole standard permettant d'interconnecter des ordinateurs avec des instruments de musique, des éclairages de scène et d'autres supports synchrones.
À partir d'Android 13, la prise en charge de 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. MIDI 2.0 via le mode hôte USB est toujours activé lorsque la compatibilité MIDI est activée sur la plate-forme.
À strictement parler, le MIDI n'a rien à voir avec l'audio. Cependant, comme le MIDI est couramment utilisé avec la musique, cet article est placé dans la section audio.
MIDI pour le NDK
Android 10 facilite le portage des applications audio professionnelles utilisant MIDI vers la plate-forme Android.
AMidi
est une API NDK qui permet aux développeurs d'applications 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 les données vers et depuis chaque appareil via les ports d'entrée et de sortie MIDI de l'appareil.
Transports
La couche transport physique spécifiée dans la version MIDI 1.0 d'origine est une boucle de courant avec un connecteur DIN à 5 broches.
Depuis MIDI 1.0, d'autres transports ont été définis, y compris le MIDI via USB et le MIDI via Bluetooth à basse consommation (BLE).
MIDI pour Android
Android est compatible avec USB On-The-Go, ce qui permet à un appareil Android d'agir en tant qu'hôte USB pour piloter les périphériques USB. Les API en mode hôte USB permettent aux développeurs d'implémenter MIDI sur USB au niveau de l'application, mais jusqu'à récemment, il n'existait aucune API de plate-forme intégrée pour MIDI.
À partir de la version Android 6.0 (Marshmallow), les fabricants d'appareils peuvent activer la prise en charge facultative du MIDI sur la plate-forme. Android est compatible directement avec les transports USB, BLE et virtuels (inter-applications). Android est compatible avec MIDI 1.0 via un adaptateur externe.
Pour en savoir plus sur la programmation d'applications avec les API MIDI, consultez le package android.media.midi
.
La suite de cet article explique comment un fabricant d'appareils Android peut activer la prise en charge du MIDI sur la plate-forme.
Activer les transports MIDI 1.0
L'implémentation 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 les transports BLE et 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 du noyau. Consultez la section Configuration du kernel Android.
Le transport MIDI sur USB est officiellement défini par la norme Universal Serial Bus Device Class Definition for MIDI Devices Release 1.0 Nov 1, 1999 publiée par le 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 kernel Linux pour intégrer drivers/usb/gadget/f_midi.c
au 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 en amont sur kernel.org.
Les correctifs sont affichés dans l'ordre de validation pour l'arborescence du noyau au niveau de la branche android-3.10
du projet kernel/common
:
- https://android-review.googlesource.com/#/c/127450/.
- https://android-review.googlesource.com/#/c/127452/.
- https://android-review.googlesource.com/#/c/143714/.
Vous devez également effectuer l'une des opérations suivantes:
- Accédez à Settings > Developer options > Networking (Paramètres > Options pour les développeurs > Mise en réseau), puis cochez la case MIDI dans la boîte de dialogue "Select USB Configuration" (Sélectionner la configuration USB).
- Une fois connecté à l'hôte USB, faites glisser votre doigt de haut en bas sur l'écran, sélectionnez l'entrée USB for (USB pour), puis MIDI (MIDI).
BLE
Le MIDI sur BLE est toujours activé, à condition que l'appareil soit compatible avec le BLE.
Virtuel (inter-application)
Le transport virtuel (interappli) est toujours activé.
Revendiquer la fonctionnalité
Les applications peuvent vérifier la présence de la prise en charge MIDI à l'aide de la fonctionnalité android.software.midi
.
Pour demander 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 en savoir plus sur les exigences à respecter pour revendiquer la fonctionnalité.
Déboguer en mode hôte
En mode hôte USB, le débogage Android Debug Bridge (adb) via USB n'est pas disponible. Pour une autre méthode, consultez la section Usage sans fil d'Android Debug Bridge.