Le problème de départ
Aucun jeu de données n'associe de l'audio de guitare à des émotions. Les corpus de guitare existants servent à la transcription et ne contiennent aucune annotation d'ambiance ; les corpus d'émotion musicale portent sur des mixages complets ou sur du piano. Il fallait donc construire le lien soi-même.
Une contrainte a guidé tous les choix : à l'usage, quelqu'un joue de la guitare seule, sans batterie ni basse. Les données d'analyse devaient donc être de la guitare seule elles aussi ; sinon les mesures faites à l'entraînement ne décriraient pas la même chose que celles faites en écoute réelle.
Les étapes
Constituer un corpus libre de droits
Plutôt que d'aspirer des morceaux sous copyright, le corpus vient de MTG-Jamendo, une base de musique entièrement sous licence Creative Commons et déjà étiquetée par instrument. Filtrer sur le tag « guitare » donne un premier lot, ramené ensuite aux morceaux encore disponibles au téléchargement.
Isoler la guitare (séparation de sources)
Un morceau produit mélange voix, batterie, basse et guitares. Analyser
ce mélange reviendrait à mesurer le tempo de la batterie plutôt que le
jeu de guitare. On utilise donc Demucs (modèle
htdemucs_6s), un réseau de neurones qui sépare un
enregistrement en six pistes, dont une piste guitare dédiée.
Découper en fenêtres d'analyse
Beaucoup de morceaux comportent de longs passages sans guitare. On isole d'abord les moments où l'instrument joue réellement, puis on découpe ces passages en fenêtres fixes de 15 secondes.
Ce format n'est pas arbitraire : 15 secondes représentent environ 30 temps à 120 BPM, assez pour estimer un tempo fiable et pour qu'une grille d'accords se déroule entièrement. Et c'est la durée qu'une personne joue naturellement devant la machine ; la même unité de mesure est donc utilisée à l'analyse et à l'écoute.
Mesurer chaque fenêtre
Sur chaque fenêtre, une vingtaine de mesures objectives sont calculées, réparties en quatre familles :
Rythme
- tempo, avec plusieurs candidats pour lever les erreurs d'octave (un tempo confondu avec sa moitié)
- clarté de la pulsation : jeu régulier ou rubato
- densité de notes, en attaques par seconde
- force moyenne des attaques et sa variation
Harmonie
- répartition des douze notes de la gamme (chromagramme)
- corrélation aux profils de tonalité majeure et mineure de Krumhansl-Kessler
- leur différence : à quel point le passage penche vers le majeur ou le mineur
Timbre
- centroïde spectral : la brillance du son, clair ou sombre
- platitude spectrale : à quel point le son est bruité, donc saturé
- largeur de bande spectrale
- part percussive contre part harmonique
Dynamique
- niveau sonore moyen
- variation de ce niveau au fil de la fenêtre
Constituer la base de cocktails
Les recettes viennent de TheCocktailDB.
Décrire le goût de chaque cocktail
Une recette est une liste d'ingrédients : ce n'est pas comparable à un signal audio. Il a fallu traduire cela en nombres. Les 325 ingrédients distincts ont été notés un par un sur 13 attributs sensoriels :
Le profil d'un cocktail est ensuite la moyenne de ses ingrédients, pondérée par leur volume réel, ce qui a demandé d'interpréter des mesures écrites en texte libre (oz, cl, dash, shot, « jus d'un citron »…). Une correction a été ajoutée : le sucre masque l'amertume perçue, l'amertume mesurée est donc atténuée en présence de sucrosité.
Trouver les vraies dimensions du goût (PCA)
Ces 13 attributs ne sont pas indépendants : un cocktail fruité est souvent acide et peu amer. Plutôt que de deviner les correspondances à la main, une analyse en composantes principales dégage les axes réellement présents dans les données.
| axe | variance | ce qu'il oppose |
|---|---|---|
| PC1 | 20,4 % | fruité, acide, sucré contre alcool fort, amer, herbacé |
| PC2 | 13,7 % | crémeux et rond contre sec et tranchant |
| PC3 | 12,0 % | énergisant, à base de café contre le reste |
| PC4 | 10,9 % | pétillant et épicé contre fruité et floral |
Résultat notable : la force alcoolique se range du côté négatif du premier axe, avec l'amertume, et non sur un axe d'intensité. Un cocktail fort est donc statistiquement proche d'un cocktail amer, pas d'un cocktail énergique.
Relier le morceau joué au cocktail
Chaque axe gustatif est piloté par une mesure audio indépendante :
| mesure sur la guitare | axe du cocktail | sens |
|---|---|---|
| majeur ↔ mineur | PC1 | majeur → fruité et sucré · mineur → fort et amer |
| timbre sombre ↔ brillant | PC2 | son chaud → crémeux · son clair → sec |
| densité de notes | PC3 | jeu dense → énergisant |
| attaque percussive | PC4 | jeu attaqué → pétillant et épicé |
Les mesures sont exprimées en écarts-type par rapport aux 60 036 fenêtres du corpus, ce qui les rend comparables entre elles. Elles définissent un profil de cocktail idéal, et le système retourne le cocktail réel le plus proche de ce profil. Quand plusieurs candidats sont à égalité, ce qui arrive dans la moitié des cas, le départage se fait par tirage au sort reproductible plutôt qu'en privilégiant systématiquement le même.
Outils
Traitement audio
- Demucs (htdemucs_6s)
- librosa
- PyTorch / CUDA
Analyse
- NumPy / pandas
- scikit-learn (PCA)
Données
- MTG-Jamendo (Creative Commons)
- TheCocktailDB