Communitygithub.com

raffataff/tunetrack

Composez, arrangez, mixez et exportez de la musique de jeu (thèmes de menu, boucles d'exploration/combat/boss, thèmes de ville et de boutique, jingles, couches adaptatives) avec les outils MCP de TuneTrack. Utilisez-le chaque fois que l'utilisateur demande de la musique, une bande-son, un thème, une boucle, un jingle, une ambiance sonore pour un jeu ou tout autre projet, ou mentionne TuneTrack.

Qu'est-ce que tunetrack ?

TuneTrack est un poste de travail musical complet intégré via MCP (Model Context Protocol) qui permet à un agent IA de composer, arranger, mixer et exporter de la musique de jeu de manière professionnelle. L'agent écrit la musique sous forme de notes, accords, motifs et courbes de contrôle (CC), tandis que TuneTrack les interprète via des instruments réels (plugins VST3 chargés avec leurs patches, bibliothèques SFZ, ou synthés Faust intégrés). Il fournit des retours détaillés grâce à l'analyse des notes, des rendus audio et des images de piano roll, ce qui permet à l'agent de corriger itérativement ses compositions. Le flux de travail est structuré : d'abord, comprendre le projet de jeu (via les fichiers README, les documents de conception, l'univers, le moteur utilisé), puis choisir un genre et une palette d'instruments adaptés. Ensuite, planifier la forme musicale (boucle, sections, longueur), écrire la musique selon un ordre logique (motif, harmonie, basse, mélodie, arrangement), mixer avec des techniques de gain staging, de réverbération et d'égalisation, et enfin exporter dans le format adapté au moteur de jeu (OGG pour Godot, WAV pour Unreal, etc.). TuneTrack est particulièrement utile pour la musique adaptative : il peut générer des couches verticales (base, tension, combat) qui seront fondues par le moteur de jeu en fonction de l'action. Il prend en charge de nombreux genres (orchestral, synthwave, chiptune, lo-fi, horreur, etc.) en fournissant des palettes de synthés intégrés et des recommandations de patches VST3. L'outil dispose d'une boucle de vérification automatique qui détecte les problèmes de gamme, de masquage fréquentiel, de dynamique et de continuité de boucle. Parmi les fonctionnalités clés : la notation TTN (textuelle, pour écrire des partitions sans interface graphique), l'analyse audio (énergie, sections, masquage), le rendu avec normalisation du volume, l'export multipiste (stems, couches, MIDI) et la comparaison avec un fichier de référence. L'utilisateur reste le juge final : après chaque rendu, l'agent doit expliquer sa création et proposer des modifications.

Compatible avec✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/raffataff/TuneTrack/tree/HEAD/skill

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

TuneTrack : musique de jeu avec les outils MCP tunetrack

TuneTrack est le poste de travail musical de l'utilisateur. Vous écrivez la musique sous forme de notes, accords, motifs et courbes CC ; TuneTrack les interprète via des instruments réels (les plugins VST3 de l'utilisateur chargés avec leurs patches, des bibliothèques SFZ, ou des synthés Faust intégrés), mixe, masterise et exporte des fichiers prêts à boucler. Vous ne pouvez pas entendre, donc vous travaillez à partir de la théorie musicale, des rapports d'analyse de l'outil et de l'image du piano roll. Chaque décision doit être réfléchie. Pas de boucles de remplissage, pas de griffonnages génériques.

Si les outils manquent, le serveur MCP n'est pas enregistré : claude mcp add --scope user tunetrack -- C:\Users\Owner\Documents\TuneTrack\.venv\Scripts\tunetrack-mcp.exe.

1. Comprendre le projet d'abord

Avant d'écrire une note, déterminez à quoi sert la musique :

  • Lisez le projet de jeu : README, documents de conception, texte de l'histoire/cadre, noms des scènes/niveaux, style artistique (regardez quelques images), couleurs du thème de l'interface, dossiers audio existants et conventions de nommage, le moteur (Godot project.godot, Unity Assets/, Unreal .uproject, web).
  • Définissez : genre/palette, humeur (2-3 adjectifs), énergie, tempo, tonalité/mode, type de signal sonore, durée, forme de boucle, format de livraison et chemin. Si l'utilisateur a donné une intention (« menu synthwave sombre, 100 bpm »), elle prévaut sur vos déductions. Ne demandez que si le projet ne donne aucun indice.
  • Enregistrez-le : project_new(name, tempo, key, time_sig, brief={genre, mood, use, game, references, notes}).

2. Vérifier la bibliothèque d'instruments

status() liste les instruments VST3, les patches (un plugin plus un son sauvegardé, avec des étiquettes), les instruments SFZ et les synthés intégrés.

  • Les parties acoustiques/orchestrales nécessitent de vrais échantillons : utilisez patch:<id> (par exemple HALion, BBC Symphony Orchestra, Spitfire LABS) ou sfz:<chemin>. Les synthés intégrés sont excellents pour l'électronique, la synthwave, le chiptune, l'ambient et le lo-fi, et conviennent comme couches de soutien.
  • Les instruments VST3 comme HALion Sonic et Groove Agent se chargent vides : sans patch, ils rendent du silence (le rendu vous avertit). MODO DRUM fonctionne sans patch.
  • Si la palette requise par le brief est manquante (par exemple des cordes orchestrales sans patch de cordes ni SFZ), dites-le clairement et proposez : (a) l'utilisateur capture des patches (patch_capture ouvre la fenêtre du plugin ; seulement pendant qu'il est à l'ordinateur), (b) installer une bibliothèque gratuite (le README en liste quelques-unes), ou (c) une version synthétisée stylisée. Ne faites pas passer un synthé pour un orchestre.
  • audition("patch:<id>") vérifie qu'un instrument produit du son et rapporte sa brillance. sfz_info montre l'étendue et les changements de touche.
  • Les patches avec dynamics_cc (1 ou 11) obtiennent leur volume de cette CC, pas de la vélocité : écrivez toujours des courbes cc() pour eux.

3. Planifier la forme (avant les notes)

Définissez markers() pour les sections et project_set(loop="5:1-21:1") pour la région de boucle. Formes typiques :

SignalDuréeForme et notes
Menu principal45-120 s boucleIntro facultative de 2 à 4 mesures (jouée une fois) puis boucle A(8) B(8) ou A A' B A. Motif mémorable, densité moyenne, laisse de la place aux sons de l'interface.
Exploration / monde extérieur1,5-3 min boucleLongues arches, texture clairsemée, espace pour respirer, rythme harmonique lent (1-2 mesures par accord).
Ville / boutique40-90 s boucleChaud, rythmique, petit ensemble, accrocheur.
Combat60-120 s boucle130-170 bpm, ostinato entraînant, basse puissante, accents et coups, phrases courtes ; la section B augmente l'intensité.
Boss90-180 s boucleMode plus sombre, grave plus lourd, un motif tordu du thème principal.
Victoire / défaite (jingle)2-8 s, one-shotVictoire : ligne ascendante vers un accord majeur brillant + cymbale. Défaite : ligne descendante vers un accord mineur ou diminué, fondu. loop="off".
Ambiance de fond1-3 min boucleNappes/drones, mouvement lent, pas de pulsation forte, peu de mélodie.
Crédits2-4 min, one-shotMedley des motifs du jeu.

Règles de boucle : la boucle a un nombre entier de mesures ; sa dernière mesure doit ramener à sa première (dominante, ou une anacrouse vers la première note de mélodie). Ne laissez pas les notes chevaucher la fin de boucle à moins de le vouloir. Les queues de relâchement et de réverbération sont automatiquement intégrées au début de la boucle par render(loop="auto").

Musique adaptative : placez chaque couche dans la même tonalité, tempo et longueur, étiquetez les pistes avec layer (base, tension, combat), et exportez avec layers=True pour des stems en couches verticales que le jeu fondra.

4. Écrire la musique

Ordre : motif, puis harmonie, basse, phrases mélodiques, contre-chant et parties intérieures, section rythmique, dynamique, puis variation.

Mélodie

  • Construisez à partir d'un motif de 1 à 2 mesures avec un rythme et un contour reconnaissables. Développez-le avec répétition, séquence (décalé d'un degré), inversion, augmentation rythmique. Structurez les phrases comme une question (se termine sur un degré ouvert, 2 ou 5) et une réponse (se termine sur 1).
  • Un point culminant clair par section (note la plus haute, temps le plus fort). Mouvement conjoint avec des sauts occasionnels ; résolvez les sauts par un mouvement conjoint en sens inverse. Gardez-la chantable (environ une octave et une quinte) sauf s'il s'agit d'un morceau instrumental démonstratif.
  • Laissez de l'espace : les silences et les notes longues donnent une forme aux phrases et de l'air. Tous les temps n'ont pas besoin d'une note.
  • Notes d'accord sur les temps forts ; notes de passage et notes de voisinage sur les temps faibles. Les notes longues sur des dissonances sont des choix délibérés.

Harmonie

  • chords() effectue le voice-leading pour vous. Choisissez des progressions qui servent l'humeur. Variez le rythme harmonique : 1 accord par mesure, plus rapide aux cadences.
  • Mouvements utiles : mineur i-VI-III-VII (épique/héroïque), i-iv-VII-III (nostalgique), I-V-vi-IV (brillant), ii-V-I et IVmaj7-iii7-vi7 (jazzy/confortable), bVI-bVII-I (triomphant), Lydien I-II (merveille/magie), Phrygien i-bII (menace), Dorien i-IV (aventureux, folk), médiantes chromatiques (bIII, bVI majeur en tonalité majeure) pour la couleur cinématographique, pédales sous des accords changeants pour la tension.
  • Terminez les sections par des cadences réelles (V-i, iv-V-i, bVI-bVII-I). Les dominantes secondaires (V/V, V7/vi) ajoutent du mouvement vers l'avant.

Basse

  • Fondamentales sur les temps forts, quintes et notes d'approche (par degré conjoint ou sensible) vers les changements d'accord. Donnez-lui un rythme qui verrouille avec la grosse caisse. Gardez-la en dessous de Do3 et seule dans son registre.

Arrangement

  • Registres : basse en dessous de Do3, harmonie Do3-Do5, mélodie au-dessus ou clairement séparée de l'accompagnement. Les intervalles plus petits qu'une quinte en dessous de Do3 sonnent boueux (l'analyse le signale).
  • Un élément focal à la fois ; les contre-chants répondent dans les silences de la mélodie (appel et réponse).
  • Construisez les sections en ajoutant et supprimant des couches. B doit contraster avec A : registre, densité, rythme ou couleur harmonique différents.
  • Orchestral : mélodie aux violons (doublée par la flûte à l'octave supérieure ou le cor à l'octave inférieure pour la chaleur), harmonie aux altos/violoncelles/cors, basse aux contrebasses/violoncelles. Les cors sonnent mieux en quintes et octaves dans leur registre médian ; les trompettes pour les sommets de fanfare ; les timbales sur les fondamentales et quintes aux fins de phrase. Utilisez role sur les pistes pour que les vérifications de registre s'appliquent. theory(range="horn").
  • Batterie : un groove avec variation toutes les 4 mesures et un fill dans les changements de section (le ou les deux derniers temps de la mesure 8). Crash sur le temps fort des nouvelles sections. Les notes fantômes (o) et le swing ajoutent de la vie.

Dynamique et sensation

  • Façonnez chaque phrase : notes_edit(op="velocity", ramp_from, ramp_to) pour les crescendos, accents avec >.
  • Patches orchestraux contrôlés par CC : cc(track, 1, start, end, 40, 100, shape="swell") sur les notes longues, et niveaux de base par section.
  • notes_edit(op="humanize", timing_ms=5-15, velocity=4-8) pour les parties acoustiques. Gardez le chiptune et l'électronique serrés sur la grille.
  • Le staccato (') et le legato (notes_edit(op="legato")) changent beaucoup le caractère. Utilisez-les à bon escient.

Réutilisez sans monotonie : arrange(op="copy") une section, puis variez la copie (nouveau contre-chant, changement d'octave, cadence réharmonisée, batterie plus détaillée).

5. Palettes de genres (noms des synthés intégrés entre crochets ; préférez les vrais patches quand le genre est acoustique)

GenreTempoModes / harmoniePalette et rythme
Fantaisie orchestrale / aventure80-120Majeur/Dorien/Lydien, i-VI-III-VIICordes, cors, bois, arpèges de harpe, timbales ; [pluck], [bell] pour la couleur
Épique / combat130-170Mineur, Phrygien, i-bVI-bVIIOstinato de cordes en croches/doubles croches, interventions de cuivres, taiko/toms, nappes de chœur ; [brass_synth], [reese_bass] hybride
Confortable / village / ferme85-110Majeur, accords add9 et maj7Nylon/pizz, piano électrique, maillets, shaker léger ; [nylon_pluck], [epiano], [mallet]
Synthwave / rétro90-118Mineur (Éolien/Dorien)Nappes [supersaw], basse [analog_bass] en croches, [lead], caisse claire avec gated reverb, grosse réverbération
Chiptune (style NES)120-180Majeur ou mineur, arpèges rapides pour les accordsExactement 2 voix [chip_pulse]/[chip_square], 1 basse [chip_triangle], batterie [chip_noise] ; pas de réverbe ou une toute petite ; quantifié
Horreur / tension50-80 ou pas de pulsationClusters chromatiques, tritons, pédaleDrones [dark_pad], notes aiguës de [bell] clairsemées, pulsations graves, le silence comme outil
Ambient / espace60-90Lydien, accords sus, changements lents[pad], [dark_pad], [bell], longues envois de réverbe, automations de volume lentes
Lo-fi / chill70-90, swingii7-V7-Imaj7, accords m9[epiano], batterie douce avec swing 0,3-0,5, [saturator] et [filter] sur le master
Action / EDM120-150Mineur, four-on-the-floor[drums] ou un kit, [reese_bass]/[analog_bass], arpèges [saw_pluck], leads [supersaw], automation de volume style sidechain
Puzzle / décontracté100-130Majeur, notes de passage chromatiques espiègles[mallet], [pluck], patches pizzicato, basse staccato

6. Mixer et masteriser

  • Gain staging : commencez les pistes autour de -6 à -12 dB ; la mélodie se place au-dessus et les nappes en dessous. Le rendu rapporte les niveaux par piste.
  • Ajoutez une réverbération partagée sur un bus (track_add("Reverb", kind="bus", fx=["builtin:reverb"]) ou un VST3 comme ValhallaSupermassive avec Mix à 100 %), et envoyez-y chaque piste. Plus sec pour la musique rapide ou chargée, plus humide pour l'ambient.
  • Passe-haut tout ce qui n'est pas basse ou grosse caisse (builtin:eq hpf 100-200 Hz), coupez 250-500 Hz sur les nappes si le rapport signale de la boue.
  • Panoramique pour la largeur (harpe à gauche, seconds violons à droite, cymbales légèrement décentrées). Gardez la basse et la grosse caisse au centre.
  • Volume : le master est normalisé à target_lufs (par défaut -16). Les signaux d'ambiance/de menu se situent souvent à -18 à -20 ; le combat à -14 à -16.
  • Les effets VST3 de l'utilisateur (SSL, TDR Nova, Waves, Valhalla) peuvent être placés sur les pistes, les bus ou le master via fx_add ; définissez les paramètres par nom avec le texte d'affichage ({"Mix": "100 %", "LowCut": "200 Hz"}).

7. Boucle de révision (toujours)

  1. notes_read(track) pour vérifier vos lignes en TTN. analyze() donne la tonalité, l'étendue, les chevauchements, la boue ainsi qu'un PNG du piano roll. Lisez le PNG pour vérifier la forme, la densité et la répartition des registres.
  2. render(). Agissez sur chaque avertissement : piste silencieuse (aucun patch chargé), boue, haut médium terne ou agressif, crêtes, limiteur qui travaille dur, jointure de boucle. Les pistes inchangées sont mises en cache, donc itérez librement.
  3. listen() : vos oreilles. Il mesure l'audio rendu, pas les notes, et détecte ce que les notes ne peuvent pas montrer :
    • energy_arc, sections, bar_lufs : chaque section fait-elle ce que la forme dit ? B doit différer de A en niveau, brillance, densité ou qui mène (tracks_db, most_present) ; les crescendos montent mesure par mesure ; la dernière mesure de la boucle s'écoule dans la première.
    • masking : chaque piste vs_rest_db dans sa bande principale. Gardez la piste principale à 0 ou au-dessus. Les parties en dessous d'environ -10 sont à peine entendues : augmentez-les, coupez par EQ la piste covered_by dans cette bande, changez de registre, ou supprimez-les. Les pairs sont des parties qui se battent pour une bande (grosse caisse vs basse à 63 Hz : laissez l'une posséder les graves, ou duquez-la sur les coups).
    • verify : rendus sondes de chaque hauteur utilisée par chaque partie. Ils montrent les hauteurs silencieuses ou beaucoup plus silencieuses (hors de la portée de l'instrument), les parties qui sonnent transposées, les attaques lentes sur les notes courtes, les mesures avec des notes mais sans son (CC à 0 ?), et drum_notes : ce à quoi chaque note de batterie ressemble vraiment et à quel volume à vélocité égale. Fiez-vous à cela plutôt qu'aux noms et descriptions de patches. Corrigez, re-rendez, écoutez à nouveau jusqu'à ce que chaque avertissement soit corrigé ou délibéré. Le premier run sonde chaque instrument (secondes par piste plugin, mis en cache ensuite). reference="<fichier>" compare le mix avec un morceau que l'utilisateur souhaite égaler.
  4. Dites à l'utilisateur ce que vous avez fait et comment c'est construit (forme, tonalité, tempo, instruments, le motif), donnez le chemin du fichier, et proposez play() ou l'éditeur (ui_open()) pour qu'il puisse écouter. Ses oreilles sont le juge final, alors demandez ce qu'il faut changer.

8. Livrer

render(out="<jeu>/<dossier audio>/<nom>.<ogg|wav>", loop="auto"), en respectant les dossiers et conventions de nommage du projet.

  • Godot : .ogg. Définissez Loop dans le dock d'import ; pour intro+boucle utilisez loop_offset = loop_start_sec depuis .loop.json.
  • Unity : .ogg ou .wav. Drapeau Loop sur l'AudioSource ; intro+boucle via deux clips ou une lecture programmée en utilisant .loop.json.
  • Unreal : 16 bits 48 kHz .wav (bits=16) ; le WAV contient un chunk de boucle smpl.
  • Web : .ogg plus .mp3. Utilisez stems=True / layers=True pour les systèmes adaptatifs et midi=True pour remettre l'arrangement à un DAW (Cubase).

Notation TTN (pour write)

D4:q!mf F4 A4:h | (D3 A3 F4):w | r:h C5:e. B4:s A4:q' G4:q> | E4:h~ E4:q r:q

Hauteur C4 = Do central (MIDI 60), F#3, Bb5, ou r pour un silence. Accords (C4 E4 G4). Durées w h q e s t (ronde à triple croche), pointée q., triolet e3, temps 1.5 ou 3/2, sommes h+e ; persistante jusqu'à changement. Vélocité !pp !p !mp !mf !f !ff ou !0-127, persistante. ' staccato, > accent, ~ liaison vers la même hauteur suivante. | barre de mesure, vérifiée par rapport à la signature temporelle (les décalages reviennent sous forme d'avertissements, corrigez-les). @6.5 déplace le curseur au temps 6.5 de la portée écrite, pour une deuxième voix dans un seul appel. Ou utilisez mode="merge".

Jetons de motif (pour pattern) : degrés d'accord 1 3 5 7 9, 8 10 12 une octave au-dessus, 5-/3+ décalages d'octave, b7/#4 degrés altérés au-dessus de la fondamentale, . silence, - tenu, 1> accent. Exemples de basses : "1 - - 1 . 1 5- ." (pop), "1 . 1 . 1 . 1 ." (croches, synthwave), "1 - 5- - 8 - 5- -" (valse). Arpèges : "1 5 8 10 12 10 8 5", "1 3 5 8" avec rate 0.25 pour les doubles croches.

Skills associés