Web MIDI : quand le navigateur dialogue avec un synthé vintage
Le Syndrome de la Machine à Remonter le Temps dans Ton Navigateur
Tu работал sur une application web qui communique avec du matériel MIDI vintage ? Felicidades, tu viens de découvrir pourquoi ton synthé se comporte comme un joueur d'échecs face à un supercalculateur.
Concrètement : ton navigateur envoie des données à la vitesse d'une connexion USB moderne, tandis que ton DX7 de 1983 les traite à la vitesse d'un modem des années 90. Le résultat ? Des patches corrompus, des silences inexpliqués, ou pire — un clavier qui ne répond plus et qu'il faut débrancher pour le reset.
Et ce n'est pas de la science-fiction. Les développeurs qui construisent des DAW dans le navigateur, des bibliothèques d'instruments virtuels ou des interfaces de contrôle pour matériel analogique se cognent régulièrement contre ce mur invisible.
Ce Problème de Buffer Qu'On Ignore
Le protocole MIDI date de 1981. Sa vitesse de transmission ? 31 250 bits par seconde. Oui, tu as bien lu — à peine plus rapide qu'un fax.
Les fabricants de l'époque n'avaient aucune raison de prévoir des buffers généreux. Pourquoi gaspiller de la RAM quand tu envoies à peine quelques kilobits par seconde ? Le Yamaha DX7, par exemple, fonctionne avec un buffer ridicule de 256 octets.
Ton navigateur, lui, s'en fiche royalement. Via l'interface USB-to-MIDI, il balance les données à la vitesse du port USB. Pas de ralentissement. Pas de pause. Le synthé receive tout ce que le navigateur lui envoie, mais ne peut pas dire "eh, attends, je suis submergé".
Le crash silencieux qui suit ? Ta banque de sons HS, ton DX7 transformé en presse-papiers à 1500 euros parce que ton code web était trop impatient.
Pourquoi MIDI n'a Pas de Handshaking Matériel
En communication série classique, tu as des signaux de contrôle — les pins RTS/CTS qui permettent à un appareil de dire "stop, je suis prêt" ou "continue, j'ai de la place".
Le cable MIDI ? Cinq pins. Zéro pour le dialogue. La spécification originale ne prévoyait tout simplement pas que quelqu'un aurait un jour besoin de négocier la vitesse de transmission.
Résultat : une rue à sens unique. Ton navigateur envoie plus vite que le synthé ne peut traiter, et le synthé n'a aucun moyen de dire "ralentis". C'est ton code qui doit compenser ce que le hardware ne peut pas gérer.
// Le minimum vital pour ne pas tout casser
async function envoyerSysExPacé(sortie, donnees) {
const MORCEAUX = 128;
const PAUSE = 80;
for (let i = 0; i < donnees.length; i += MORCEAUX) {
sortie.send(donnees.slice(i, i + MORCEAUX));
await dormir(PAUSE);
}
}
function dormir(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
Ces chiffres ne sont pas magiques. Certains synthés ont besoin de plus de temps entre chaque bloc, notamment lors d'écritures en EEPROM. Il faudra expérimenter — il n'existe pas de standard universel parce que Yamaha, Roland et les autres n'avaient pas imaginé qu'on enverrait des SysEx depuis Chrome en 2024.
Le Chaos des Formats Propriétaires
Tu as résolu le problème de vitesse ? Bravo. Maintenant, bienvenue dans le far west des System Exclusive.
Le spec MIDI définit les notes, les contrôleurs, les changements de programme. Mais les messages SysEx — ces gros transfers de données contenant les paramètres de son — sont le jardin secret de chaque fabricant.
Yamaha, Roland, Korg : chacun a inventé sa propre structure de données, ses propres algorithmes de checksum, ses propres formats de dump. Ton application web doit non seulement détecter l'appareil connecté, mais aussi connaître l'exact agencement d'octets qu'il attend.
Le DX7 attend précisément 4104 octets pour un dump de voix complet. 4103 ? Il refuse. 4105 ? Il valide les 4104 premiers et corrompt la suite.
Le Roland Juno-106, lui, refuse d'envoyer quoi que ce soit à moins qu'un humain n'ait physiquement lancé le dump depuis le panneau avant. Sympa pour l'automatisation.
Et Korg dans tout ça ? Leur compression 7-bit ajoute une couche de complexité supplémentaire. Comme le bit de poids fort des octets MIDI sert au statut, Korg compresse les paramètres en mots de 7 bits. Récupérer les vraies valeurs demande des opérations de bit-shifting et du déballage d'octets qui donne envie de pleurer sur nos architectures 8-bit modernes.
Le Casse-Tête de la Sécurité Navigateur
L'API Web MIDI est puissante précisément parce qu'elle peut envoyer des données brutes à du hardware externe. Cette puissance la rend dangereuse.
Un site malveillant pourrait flasher un firmware, envoyer des SysEx corrompus qui brickent un synthé. Les navigateurs le savent.
Chrome et Edge exigent donc une permission explicite de l'utilisateur avant toute communication MIDI. Firefox n'a jamais implémenté l'API — les risques de fingerprinting et d'exploits hardware les ont convaincus de zapper. Safari a changé de position plusieurs fois, mais dans la pratique : si tu veux du Web MIDI fiable, compte sur Chromium.
Pour la planification produit, c'est crucial. Tes outils ciblent des musiciens et des passionnés de hardware vintage — et une bonne partie de ton audience utilise Safari ou Firefox par défaut. La mise en place progressive, où les fonctionnalités MIDI marchent pour les utilisateurs Chrome mais se dégradent élégiquement pour les autres, passe de "nice-to-have" à nécessité absolue.
Pourquoi Ça Devrait T'intéresser
Le marché du synthé vintage n'est pas un créneau de niche. Le hardware classique se vend à prix d'or sur le marché de l'occasion parce que les musiciens prefèrent le son, le toucher, le workflow des appareils des années 80. Construire des outils web qui interagissent avec ce gear représente une vraie opportunité — mais uniquement si tu comprends les contraintes.
Chaque octet que ton application envoie traverse un pont entre deux époques informatiques. Tes choix en matière de pacing, de chunking, de gestion des formats peuvent faire la différence entre un outil que les musiciens adorent et un autre qui grille 2000 euros de synthé.
Si tu travailles sur une application MIDI web, commence par la vitesse de transmission la plus lente possible, teste avec du vrai hardware dès que tu peux, et ne t'avoue jamais vaincu par "ça marchait dans mon émulateur". L'émulateur n'a pas de buffer de 256 octets qui déborde. Les synthés de tes utilisateurs, eux, si.