Audio Decomposition - un open source qui sépare la musique en notes et en instruments
(matthew-bird.com)- Audio Decomposition est un programme open source qui vise à découper l’audio en notes et en instruments constitutifs afin de transcrire la musique en partition
- Les échantillons d’instruments proviennent de la base de données d’instruments des Electronic Music Studios de l’Université de l’Iowa, et la transformée de Fourier ainsi que l’enveloppe de chaque forme d’onde sont enregistrées pour servir de référence de comparaison
- Le fichier musical est analysé par tranches de 0,1 seconde pour produire un spectrogramme, puis les transformées de Fourier stockées pour chaque instrument sont combinées afin d’estimer l’amplitude de chaque instrument sur l’intervalle concerné
- L’analyse de l’enveloppe sépare les phases attack·sustain·release ainsi que les décroissances statiques et dynamiques, puis calcule un coût par instrument dans les bandes de notes filtrées
- Au lieu de régénérer l’audio, le résultat est affiché sous forme de nuage de points matplotlib ressemblant à une partition, ce qui facilite la résolution des problèmes et l’affichage de données clairsemées
Décomposition audio pour la transcription en partition
- Audio Decomposition est né de l’objectif de créer un programme capable de transformer la musique en partition
- L’auteur voulait personnellement transcrire de la musique en notation et était motivé par le manque d’algorithmes open source simples de séparation de sources audio
- Des vidéos de démonstration sont disponibles sur YouTube
- Le dépôt GitHub est mbird1258/Audio-Decomposition
- Les échantillons d’instruments sont tirés de la base de données d’instruments des Electronic Music Studios de l’Université de l’Iowa
- Pour chaque fichier, la transformée de Fourier de la forme d’onde complète et son enveloppe sont calculées puis enregistrées
Transformée de Fourier par pas de 0,1 seconde
- L’idée est que le son d’un instrument peut principalement être caractérisé par la transformée de Fourier et l’enveloppe, et que ces deux informations permettent d’estimer quel instrument joue quelle note
- Le fichier musical est traité toutes les 0,1 seconde via une transformée de Fourier, sous forme de spectrogramme
- Pour reconstituer la transformée de Fourier de chaque segment de 0,1 seconde, on additionne les transformées de Fourier préenregistrées de chaque instrument
- L’amplitude de chaque instrument est calculée en résolvant la matrice issue des dérivées partielles par fréquence de la fonction de coût MSE
- Chaque ligne de la matrice correspond à la dérivée partielle d’un instrument, comme le cello, le piano, etc.
- L’exemple porte sur le calcul du coût pour des valeurs par fréquence, comme la valeur de la transformée de Fourier à 5 Hz
Enveloppe et séparation des segments de notes
- L’enveloppe est la courbe supérieure de la forme d’onde, et comme les fonctions existantes fonctionnaient mal dans certains cas à cause du bruit ou de certaines formes d’onde, une méthode distincte a été utilisée
- Le calcul consiste à découper la forme d’onde en segments, puis à prendre la valeur maximale de chaque segment
- On affine ensuite le résultat en ajoutant de nouveaux points là où l’enveloppe passe sous la forme d’onde d’origine
- L’enveloppe est divisée en attack, sustain et release
- attack : le son initial de la note
- sustain : la partie pendant laquelle la note est maintenue
- release : la partie où la note s’arrête
- Pour les échantillons d’instruments, la première valeur non nulle est utilisée comme point de départ de l’attack
- La frontière entre attack et sustain est définie comme le premier point où la fonction devient concave vers le bas ou décroissante
- La frontière entre sustain et release est définie en remontant depuis la fin jusqu’au premier point où la fonction croît ou devient concave vers le bas
- La fin du release est trouvée en remontant depuis la fin jusqu’au premier point non nul
Types de décroissance et appariement des instruments
- Pour distinguer les principales formes d’onde, décroissance statique et décroissance dynamique sont prises en compte
- Certains instruments comme le piano ont une décroissance statique qui suit généralement une forme de décroissance exponentielle
- D’autres instruments comme le violon peuvent voir leur volume augmenter ou diminuer même pendant le sustain
- Parmi les échantillons d’instruments, certains fichiers sont maintenus jusqu’à extinction naturelle du son, tandis que d’autres sont relâchés plus tôt
- Le caractère statique ou dynamique de la décroissance est déterminé selon que le coefficient de décroissance est supérieur à 1 ou que l’écart à la courbe de décroissance devient trop important
- Le fait que l’enveloppe comporte ou non un release, c’est-à-dire qu’elle soit de type AS ou ASR, est jugé en comparant les taux moyens de variation du sustain et du release
- Si le taux de variation du release est plus faible, on considère qu’il n’y a pas de release
- Lors du traitement du fichier musical, un filtre passe-bande est appliqué à chaque fréquence de note
- Sur la forme d’onde filtrée, on parcourt chaque instrument et on calcule la corrélation croisée de l’attack et du release normalisés pour trouver le début et la fin de la note
- On calcule ensuite la MSE entre la forme d’onde de l’instrument et l’audio filtré, et on l’utilise comme coût d’instrument pour cet instant
- L’amplitude finale est calculée en multipliant l’amplitude issue de l’étape de transformée de Fourier par
1 / coûtde l’étape d’enveloppe
Affichage des résultats avec un nuage de points
- Le résultat est représenté avec le scatter plot de matplotlib, sous forme de points en
-qui ressemblent à une partition - Au départ, l’objectif était de régénérer l’audio à partir des amplitudes calculées, mais cela posait de nombreux problèmes, prenait du temps et rendait le débogage difficile
- imshow de matplotlib a aussi été essayé, mais c’était très inefficace quand la plupart des valeurs étaient à 0
- Lors des déplacements ou zooms à l’écran, tous les points devaient être redessinés, qu’ils soient visibles ou non
- Au final, cela peut servir à mieux reconstruire une partition, en particulier lorsqu’il est difficile de trouver la bonne hauteur ou les bons accords
- Par exemple, l’outil a été utilisé pour reproduire une partition Noteflight à partir de cette vidéo YouTube
- Le temps d’exécution reste également dans des limites raisonnables
1 commentaires
Avis de Hacker News
Le titre prête un peu à confusion. Écrire open-source separation peut se lire comme de la séparation de sources (source separation), mais en réalité ce n’est pas cela : c’est un algorithme de détection de hauteur, qui classe ensuite de quel instrument provient la hauteur détectée.
C’est assez impressionnant, mais si l’on a vraiment besoin d’un résultat précis, corriger la sortie pourrait prendre plus de temps que de le faire à la main.
Pour quelque chose produit à cet âge, c’est étonnant.
Quand des musiciens essaient de reconstituer, à partir d’un seul fichier audio, quelque chose de proche des pistes originales avant mixage — autrement dit les stems — il me semble entendre plus souvent le second terme.
Je ne l’ai pas vu mentionné directement dans l’article, mais pour les personnes intéressées, la transcription musicale automatique, c’est-à-dire la conversion de l’audio en MIDI, est un sous-domaine assez important du deep learning et de la recherche d’information musicale.
Il y a aussi eu plusieurs modèles réussis pour la transcription musicale multipiste, dont le projet MT3 de Google : https://research.google/pubs/mt3-multi-task-multitrack-music...
Pour la transcription de piano, on en est désormais presque à une précision parfaite, même avec un audio de très mauvaise qualité : https://github.com/EleutherAI/aria-amt
À noter que je suis l’auteur du dépôt ci-dessus.
Les transcripteurs audio-vers-MIDI identifient bien les hauteurs et les instants de début, mais la durée et l’intensité sont beaucoup moins stables.
Pour le rendre plus facile à utiliser, j’ai porté leur Colab en runtime, mais la sortie MIDI était assez étrange.
Même avec des stems simples en entrée, certaines pistes avaient une sortie MIDI mal alignée avec l’audio et des problèmes de timing au point d’être inutilisables, alors que cela fonctionnait correctement avec d’autres audios.
Si la séparation audio ou la séparation de stems vous intéresse, RipX vaut le coup d’œil : https://hitnmix.com/ripx-daw-pro/
Il peut aussi exporter les pistes séparées en fichiers MIDI. Il reste quelques problèmes, mais cela fonctionne plutôt bien.
La séparation de stems est en train de devenir une fonctionnalité standard dans les logiciels de musique, et presque tous les DAW la proposent.
Pour mon usage, moises s’est révélé facile à utiliser : https://moises.ai/
Il prend en charge la transposition et l’étirement temporel de morceaux entiers, et propose une interface simple pour la séparation de stems ainsi que la mise en sourdine et le réglage du volume par piste. Il détecte automatiquement le tempo et les accords.
Je n’y suis pas affilié ; je suis simplement un utilisateur satisfait qui s’en sert presque tous les jours pour apprendre et travailler des morceaux. En général, j’augmente la partie de basse originale et je baisse le reste à moins de 10 % du volume pour entendre clairement la basse, ce qui montre à quel point les partitions en ligne, y compris payantes, se trompent souvent. Une fois la partie apprise, je coupe la basse et je joue par-dessus le morceau original comme un bassiste.
0 : https://www.stemroller.com/
Ableton Live - non
Bitwig - non
Cubase - non
FL - oui
Logic - oui
Pro Tools - non
Reason - non
Reaper - non
Studio One - oui
Polymath est efficace pour séparer et extraire des pistes d’instruments individuelles à partir de MP3, et fonctionne très bien.
C’est vraiment impressionnant, mais il existe une physique des instruments réels qu’un simple gabarit de transformée de Fourier ne capturera pas. Par exemple, pour une trompette, le spectre d’harmoniques peut varier fortement entre un son joué doucement et un son joué fort, même à hauteur identique.
La trompette produit une série harmonique riche, avec des harmoniques marquées, si bien que la transformée de Fourier montre des pics prononcés aux multiples entiers de la fréquence fondamentale. Des instruments comme la flûte produisent un son plus pur, mais les cuivres ont généralement des harmoniques supérieures plus fortes, ce qui rendrait aussi plus complexes les dérivées partielles de l’équation matricielle présentée dans l’article.
Ce script identifie le timing des notes par filtrage passe-bande et corrélation croisée des enveloppes d’attaque et de relâchement. Comme les cuivres peuvent présenter un comportement non linéaire où la composition harmonique varie fortement selon l’intensité de jeu, je ne sais pas bien comment cet algorithme gérerait les différences de brillance entre pp et ff. Pour améliorer la précision, j’envisagerais d’ajouter des gabarits de Fourier dépendants de l’intensité pour chaque instrument.
Ces modèles fonctionnent tous mal lorsque les instruments ne produisent pas leur son typique, ou dans des groupes où l’interprétation et le mixage n’ont pas été faits de manière à maximiser la séparation entre instruments. Par exemple, une guitare électrique aux harmoniques distordues peut jouer la même note que la voix, le batteur ne produire que des bruits agressifs avec les cymbales, et le bassiste imiter avec son instrument un impact de grosse caisse.
Dans ce genre de musique expérimentale, les résultats de séparation de sources deviennent totalement imprévisibles, et peuvent ou non être utilisables pour un rééquilibrage musical.
Ça ressemble au travail réalisé par le frère de Joshua Bird. Joshua Bird avait aussi présenté par le passé des projets impressionnants sur HN : https://www.youtube.com/@joshuabird333
Ça m’a rappelé l’époque où je jouais à Audiosurf, il y a environ 15 ans. Le temps passe vite
https://en.wikipedia.org/wiki/Audiosurf
Je me trompe peut-être, mais il me semble qu’aucune des démos YouTube ne montre de séparation de sources
Au passage, en recherche audio, la séparation de sources désigne le fait de séparer l’audio en clips distincts
Je suis un vieux fan d’Ultrastar Deluxe. C’est un clone open source de Singstar, un jeu de karaoké où les gens chantent des morceaux et s’affrontent
Il reconnaît les notes chantées et les compare au fichier de mapping du timing vocal du morceau ; plus on chante juste par rapport à la mélodie, plus le score est élevé. Le fait de chanter les bonnes paroles n’a pas d’importance
Il existe beaucoup de bibliothèques de mappings de morceaux créées par des fans, mais il en manque toujours, et il y a très peu de morceaux mappés dans des langues autres que l’anglais et l’espagnol. Tout mapper à la main prend énormément de temps, et comme je suis moi-même presque incapable de chanter juste, c’est encore plus difficile
Je me demande depuis longtemps quel logiciel pourrait automatiser ce processus plus facilement, et cet outil semble très bon pour extraire le timing et les notes de la voix à partir du morceau original
Faire un jour une playlist Singstar dans ma langue maternelle et organiser une soirée chant avec des amis fait partie de ma bucket list. Si vous avez des recommandations d’outils similaires, ça m’intéresse
Le fichier texte semble nécessiter les voix et la hauteur des notes avec des horodatages, et l’IA semble s’approcher du niveau où elle pourrait en automatiser la génération
Je laisse un lien que je viens de trouver pour lire davantage : https://www.reddit.com/r/karaoke/comments/x61kzy/modern_equi...
À mon avis, certaines vidéos semblent ne pas avoir d’audio