Un fichier .stems d'Engine DJ est un conteneur MP4 ordinaire — les mêmes boîtes ftyp, mdat, moov qu'une vidéo — dont la piste audio est de l'AAC à huit canaux : deux par partie, quatre parties. Rien d'exotique jusque-là. La particularité est que chaque unité d'accès AAC est chiffrée en AES-128. Le conteneur, lui, reste en clair : n'importe quel outil lit la durée, le débit, le nombre de canaux — il n'entend simplement rien.
Aucun nom de partie n'est écrit dans le fichier : l'ordre des canaux fait foi, et il a été déterminé à l'oreille sur des fichiers produits par Engine. Le nom du fichier est <identifiant de piste> <identifiant de base>.stems, dans le dossier Engine Library/Stems : il n'y a rien d'autre à faire pour qu'Engine le voie. Sa seule présence compte.
Engine DJ range tout dans une base SQLite, Database2/m.db, une par disque : celle de l'ordinateur dans Musique, une à la racine de chaque disque ou clé. Une musique est rangée dans la base du disque où est son fichier. Une playlist est une chaîne d'entrées liées entre elles par l'identifiant de la suivante ; la pochette est un fichier à part, nommé d'après son empreinte.
Track, une entrée de playlist recousue dans la chaîne, une pochette déposée et référencée, et des déclencheurs SQL qu'Engine a posés lui-même et qui se rejouent à chaque insertion. StemsPrime rejoue le schéma d'Engine dans son banc d'essai à chaque version, pour que ce qu'il écrit soit exactement ce qu'Engine aurait écrit.Une règle sans exception : StemsPrime ne touche jamais à la base quand Engine DJ est ouvert. SQLite le refuserait de toute façon, et une base à moitié écrite est le pire qui puisse arriver à une bibliothèque.
Séparer une musique en voix, basse, batterie et mélodie est le travail d'un réseau de neurones, Demucs, entraîné sur des milliers de morceaux dont on connaissait les pistes. StemsPrime l'exécute par ONNX Runtime, une bibliothèque qui fait tourner ces modèles sans Python ni dépendance lourde : le modèle est un fichier de quelques centaines de mégaoctets, téléchargé une seule fois.
Le modèle a été entraîné en 44,1 kHz : StemsPrime fait une copie de travail à cette fréquence, la découpe en segments, les passe au modèle, et recolle les résultats avec un recouvrement pour qu'aucune coupure ne s'entende. Le fichier d'origine n'est jamais modifié.
Un réseau de neurones, c'est des milliards de multiplications. Un processeur les fait une par une, ou presque ; une carte graphique NVIDIA en fait des milliers en parallèle. StemsPrime emploie la carte quand elle est là, par CUDA, et retombe sur le processeur sinon — le résultat est identique, seule la durée change : quelques secondes contre plusieurs minutes par morceau.
Le moteur CUDA pèse plus de deux gigaoctets ; il s'installe à part, d'un clic, et se laisse désinstaller de même. Il n'a rien de magique : ce sont les bibliothèques de calcul de NVIDIA, posées dans le dossier de StemsPrime.
Aucune musique ne quitte votre ordinateur. Tous les calculs — séparation, alignement, encodage — se font chez vous. StemsPrime ne se connecte que pour trois choses : télécharger les modèles et le moteur CUDA la première fois, vérifier s'il existe une mise à jour, et compter les téléchargements sur le site de l'éditeur — sans rien d'autre que le numéro de version.
Rédigé par l'auteur de StemsPrime, développeur indépendant. Le logiciel est gratuit pour un usage personnel ; tout ce qui est décrit ici a été écrit pour lui, sans bibliothèque de séparation ou de karaoké toute faite.