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.

55 609 morceaux au catalogue → 9 958 tagués guitare → 5 463 encore disponibles, soit 347 heures d'audio

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.

5 304 morceaux séparés · ~30 Go de pistes guitare

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.

60 036 fenêtres exploitables

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.

635 cocktails récupérés · 568 alcoolisés retenus

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 :

sucrosité · acidité · amertume · effervescence · épice · corps · herbacé · énergisant · floral · salé-umami · fumé · fruité · degré d'alcool

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.

axevariancece qu'il oppose
PC120,4 % fruité, acide, sucré contre alcool fort, amer, herbacé
PC213,7 % crémeux et rond contre sec et tranchant
PC312,0 % énergisant, à base de café contre le reste
PC410,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 guitareaxe du cocktailsens
majeur ↔ mineurPC1 majeur → fruité et sucré · mineur → fort et amer
timbre sombre ↔ brillantPC2 son chaud → crémeux · son clair → sec
densité de notesPC3 jeu dense → énergisant
attaque percussivePC4 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