Le problème
Le Set 10 de Teamfight Tactics a introduit une bande-son modulaire : la chanson de chaque groupe est découpée en pistes que le jeu superpose selon votre plateau. Hors du jeu, impossible d'en profiter. Je voulais une table de mixage qui joue ces pistes parfaitement synchronisées, permette de les arranger et, à terme, suive mon plateau en direct comme le fait le jeu.
Ce que j'ai construit
Une application de bureau Windows sur ow-electron, la version d'Electron d'Overwolf, avec une interface React et TypeScript. La table de mixage joue n'importe quelle combinaison des 60 pistes ; une piste cochée en cours de lecture entre en rythme. Une seconde fenêtre, l'éditeur de morceaux, place les pistes sur une timeline : chaque clip ouvre sa piste sur un passage du morceau, s'aligne sur la grille rythmique et s'enregistre au fil de l'eau. L'application se connecte aussi au Game Events Provider d'Overwolf et affiche l'état de la partie et le plateau en direct. À côté, des outils Python transcrivent les pistes et repèrent accords, phrases et points de coupe propres, mesure par mesure.
Défis techniques
- Une synchronisation à l'échantillon près. Chaque piste suit un compteur unique dans un AudioWorklet. Les décodeurs travaillent jusqu'à deux secondes en avance et envoient des blocs marqués de l'instant exact où ils doivent être joués.
- Démarrer n'importe où. Pour lancer une piste en cours de morceau, j'indexe moi-même ses paquets Ogg Vorbis, en lisant la taille des blocs dans l'en-tête du codec comme le fait FFmpeg, et je vérifie le total sur chaque page du fichier.
- Deux tempos. Les premières pistes sont à 140 BPM et bouclent sur 3:29, les suivantes à 90 BPM sur 2:53 : boucles et grilles sont définies par phase.
- Des fondus propres. Le volume glisse sur 6 ms dès qu'une piste entre, sort ou reprend, pour éviter tout clic.
Résultat
La table de mixage et l'éditeur de morceaux fonctionnent, et le plateau s'affiche en direct pendant la partie. Prochaine étape : suivre le plateau automatiquement.