Communitygithub.com

raffataff/tunetrack

Komponiere, arrangiere, mische und rendere Spielmusik (Menüthemen, Erkundungs-/Kampf-/Bossloops, Stadt- und Ladenthemen, Stinger, adaptive Layer) mit den TuneTrack MCP-Tools. Verwende dies immer dann, wenn der Nutzer nach Musik, einem Soundtrack, einem Thema, einem Loop, einem Jingle, einem Stinger oder einer Atmosphäre für ein Spiel oder ein Projekt fragt oder TuneTrack erwähnt.

Was ist tunetrack?

TuneTrack ist eine leistungsstarke MCP-basierte Musikworkstation, die es KI-Agenten (wie Claude Code, Cursor oder Codex) ermöglicht, vollständige Videospiel-Soundtracks zu komponieren, zu arrangieren, zu mischen und zu rendern. Es unterstützt eine Vielzahl von Plattformen (Godot, Unity, Unreal, Web) und Formate (OGG, WAV, MP3) und kann sowohl mit echten VST3-Instrumenten und SFZ-Sample-Bibliotheken als auch mit integrierten Faust-Synths arbeiten. Der Agent arbeitet dabei rein auf Basis von Musiktheorie, Analyseberichten und einer Klaviertroll-Grafik – er kann nichts hören, was die Entscheidungen besonders bewusst und zielgerichtet macht. Das Tool bietet einen klaren Workflow von der Projektanalyse über die Planung der musikalischen Form, die Komposition von Melodien, Harmonien und Bässen bis hin zum Mixing und Mastering mit automatischer Lautstärkenormalisierung. Es enthält außerdem einen detaillierten Überprüfungszyklus mit Analysefunktionen, die auf Probleme wie maskierte Frequenzen, überlappende Noten oder stille Spuren hinweisen. Der Agent kann adaptive Musik in Layern erstellen, die im Spiel dynamisch überblendet werden können, und unterstützt zahlreiche Genres von orchestraler Fantasy über Synthwave bis hin zu Lo-Fi und Chiptune.

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

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

TuneTrack: Spielmusik mit den tunetrack MCP-Tools

TuneTrack ist die eigene Musikworkstation des Nutzers. Du schreibst die Musik als Noten, Akkorde, Patterns und CC-Kurven; TuneTrack spielt sie über echte Instrumente (die VST3-Plugins des Nutzers über gespeicherte Patches, SFZ-Sample-Bibliotheken oder eingebaute Faust-Synths) ab, mixt, mastert und rendert sie zu loopbaren Dateien. Du kannst nicht hören, also arbeitest du mit Musiktheorie, den Analyseberichten des Tools und dem Klaviertroll-Bild. Jede Entscheidung sollte bewusst sein. Keine Füllerloops, kein generisches Geklimper.

Wenn die Tools fehlen, ist der MCP-Server nicht registriert: claude mcp add --scope user tunetrack -- C:\Users\Owner\Documents\TuneTrack\.venv\Scripts\tunetrack-mcp.exe.

1. Verstehe das Projekt zuerst

Bevor du eine Note schreibst, finde heraus, wofür die Musik ist:

  • Lies das Spielprojekt: README, Designdokumente, Story-/Settingtexte, Szenen-/Levelnamen, Kunststil (sieh dir ein paar Bilder an), UI-Themenfarben, vorhandene Audio-Ordner und Dateinamen, die Engine (Godot project.godot, Unity Assets/, Unreal .uproject, Web).
  • Lege fest: Genre/Palette, Stimmung (2-3 Adjektive), Energie, Tempo, Tonart/Modus, Cue-Typ, Länge, Loop-Form, Ausgabeformat und Pfad. Wenn der Nutzer eine Absicht geäußert hat („Dark-Synthwave-Menü, 100 bpm“), hat diese Vorrang vor deiner Schlussfolgerung. Frage nur nach, wenn das Projekt keinen Hinweis gibt.
  • Dokumentiere es: project_new(name, tempo, key, time_sig, brief={genre, mood, use, game, references, notes}).

2. Überprüfe die Instrumentenbibliothek

status() listet VST3-Instrumente, Patches (ein Plugin plus einen gespeicherten Sound, mit Tags), SFZ-Instrumente und eingebaute Synths auf.

  • Akustische/orchestrale Teile benötigen echte Samples: verwende patch:<id> (z. B. HALion, BBC Symphony Orchestra, Spitfire LABS-Patches) oder sfz:<pfad>. Eingebaute Synths sind hervorragend für elektronische Musik, Synthwave, Chiptune, Ambient und Lo-Fi und eignen sich gut als Unterstützungslayer.
  • VST3-Instrumente wie HALion Sonic und Groove Agent werden leer geladen: Ohne ein Patch geben sie Stille wieder (der Render-Vorgang warnt dich). MODO DRUM funktioniert ohne Patch.
  • Wenn die Palette, die das Briefing benötigt, fehlt (z. B. Streicher für Orchester ohne Streicherpatch oder SFZ), sag dies deutlich und biete an: (a) der Nutzer erfasst Patches (patch_capture öffnet das Plugin-Fenster; nur, während er am Computer ist), (b) Installation einer kostenlosen Bibliothek (README listet einige auf) oder (c) eine stilisierte Synth-Version. Gib einen Synth nicht als Orchester aus.
  • audition("patch:<id>") überprüft, ob ein Instrument Töne erzeugt, und meldet seine Helligkeit. sfz_info zeigt Tonumfang und Keyswitches an.
  • Patches mit dynamics_cc (1 oder 11) erhalten ihre Lautstärke über diesen CC, nicht über die Velocity: Schreibe für sie immer cc()-Kurven.

3. Plane die Form (vor den Noten)

Setze mit markers() Abschnitte und mit project_set(loop="5:1-21:1") den Loop-Bereich. Typische Formen:

CueLängeForm und Anmerkungen
Hauptmenü45-120 s LoopOptional 2-4 Takt Intro (einmal gespielt), dann eine A(8) B(8) oder A A' B A Loop. Einprägsames Motiv, mittlere Dichte, lässt Platz für UI-Sounds.
Erkundung / Overworld1,5-3 min LoopLange Bögen, spärliche Textur, Atempausen, langsame harmonische Rhythmik (1-2 Takte pro Akkord).
Stadt / Laden40-90 s LoopWarm, rhythmisch, kleines Ensemble, einprägsam.
Kampf60-120 s Loop130-170 bpm, treibendes Ostinato, starker Bass, Akzente und Hits, kurze Phrasen; B-Teil steigert die Intensität.
Boss90-180 s LoopDunklere Tonart, schwerere Tiefen, ein Motiv, das aus dem Hauptthema verdreht ist.
Sieg / Niederlage Stinger2-8 s, One-ShotSieg: ansteigende Linie zu einem hellen Dur-Akkord + Becken. Niederlage: fallende Linie zu einem Moll- oder verminderten Akkord, Ausblendung. loop="off".
Atmosphären-Bett1-3 min LoopPads/Drones, langsame Bewegung, kein starker Puls, wenig Melodie.
Abspann2-4 min, One-ShotMedley der Spielmotive.

Loop-Regeln: Der Loop ist eine ganze Anzahl von Takten; sein letzter Takt muss zum ersten zurückführen (Dominante oder ein Auftakt zur ersten Melodienote). Lass Noten nicht über das Loop-Ende hinausragen, es sei denn, du willst das. Auskling- und Hall-Schwänze werden automatisch in den Loop-Start integriert, wenn du render(loop="auto") verwendest.

Adaptive Musik: Lege jeden Layer in dieselbe Tonart, dasselbe Tempo und dieselbe Länge, tagge Spuren mit layer (base, tension, combat) und rendere mit layers=True für vertikal geschichtete Stems, die das Spiel überblendet.

4. Schreibe die Musik

Reihenfolge: Motiv, dann Harmonie, Bass, Melodiephrasen, Gegenlinie und innere Stimmen, Rhythmussektion, Dynamik, dann Variation.

Melodie

  • Baue aus einem 1-2-taktigen Motiv mit einem erkennbaren Rhythmus und einer erkennbaren Kontur auf. Entwickle es durch Wiederholung, Sequenz (um einen Schritt nach oben versetzt), Umkehrung, rhythmische Vergrößerung. Strukturiere Phrasen als Frage (endet offen, auf der 2 oder 5) und Antwort (endet auf der 1).
  • Ein klarer Höhepunkt pro Abschnitt (höchste Note, stärkster Beat). Schrittweise Bewegung mit gelegentlichen Sprüngen; löse Sprünge schrittweise in die entgegengesetzte Richtung auf. Halte es singbar (etwa eine Oktave und eine Quinte), es sei denn, es ist ein instrumentales Prunkstück.
  • Lasse Raum: Pausen und lange Noten geben Phrasen Form und Luft zum Atmen. Nicht jeder Beat braucht eine Note.
  • Akkordtöne auf starken Beats; Durchgangs- und Nebentöne auf schwachen Beats. Lange Noten auf Dissonanzen sind bewusste Entscheidungen.

Harmonie

  • chords() führt die Stimmführung für dich durch. Wähle Akkordfolgen, die der Stimmung dienen. Variiere die harmonische Rhythmik: 1 Akkord pro Takt, schneller an Kadenzen.
  • Nützliche Moves: i-VI-III-VII (episch/heroisch), i-iv-VII-III (nostalgisch), I-V-vi-IV (hell), ii-V-I und IVmaj7-iii7-vi7 (jazzig/gemütlich), bVI-bVII-I (triumphal), lydisch I-II (Wunder/Magie), phrygisch i-bII (Bedrohung), dorisch i-IV (abenteuerlich, folkloristisch), chromatische Medianten (bIII, bVI als Dur in einer Dur-Tonart) für filmische Farbe, Orgelpunkte unter wechselnden Akkorden für Spannung.
  • Beende Abschnitte mit echten Kadenzen (V-i, iv-V, bVI-bVII-I). Sekundäre Dominanten (V/V, V7/vi) verleihen Vorwärtsbewegung.

Bass

  • Grundtöne auf starken Beats, Quinten und Annäherungsnoten (Schritt oder Leitton) in den Akkordwechsel hinein. Gib ihm einen Rhythmus, der mit der Kickdrum verbunden ist. Halte ihn unter C3 und allein in seinem Register.

Arrangement

  • Register: Bass unter C3, Harmonie C3-C5, Melodie darüber oder klar von der Begleitung getrennt. Intervalle kleiner als eine Quinte unter C3 klingen matschig (die Analyse meldet dies).
  • Ein fokussiertes Element zur Zeit; Gegenlinien antworten in den Pausen der Melodie (Ruf und Antwort).
  • Baue Abschnitte durch Hinzufügen und Entfernen von Layern auf. B sollte sich von A unterscheiden: anderes Register, Dichte, Rhythmus oder harmonische Farbe.
  • Orchester: Melodie in Violinen (verdoppelt von Flöte eine Oktave höher oder Horn eine Oktave tiefer für Wärme), Harmonie in Violen/Celli/Hörnern, Bass in Kontrabässen/Celli. Hörner klingen am besten in Quinten und Oktaven in ihrer mittleren Lage; Trompeten für Fanfaren-Höhepunkte; Pauken auf Grundtönen und Quinten am Ende von Phrasen. Verwende role für Spuren, damit Bereichsüberprüfungen angewendet werden. theory(range="horn").
  • Drums: Ein Groove mit Variation alle 4 Takte und einem Fill bei Abschnittswechseln (der letzte Schlag oder die letzten zwei Schläge von Takt 8). Crash auf den Downbeat neuer Abschnitte. Ghost Notes (o) und Swing verleihen Leben.

Dynamik und Gefühl

  • Forme jede Phrase: notes_edit(op="velocity", ramp_from, ramp_to) für Crescendi, Akzente mit >.
  • CC-gesteuerte Orchester-Patches: cc(track, 1, start, end, 40, 100, shape="swell") auf langen Noten und Basislevel pro Abschnitt.
  • notes_edit(op="humanize", timing_ms=5-15, velocity=4-8) für akustische Parts. Halte Chiptune und straffe elektronische Parts im Raster.
  • Staccato (') und Legato (notes_edit(op="legato")) verändern den Charakter stark. Verwende sie gezielt.

Wiederverwenden ohne Copy-Paste-Monotonie: arrange(op="copy") einen Abschnitt, dann variiere die Kopie (neue Gegenlinie, Oktavverschiebung, reharmonisierte Kadenz, geöffnete Drums).

5. Genre-Paletten (Namen eingebauter Synths in Klammern; bevorzuge echte Patches, wenn das Genre akustisch ist)

GenreTempoModi / HarmonikPalette und Rhythmus
Orchestral Fantasy / Adventure80-120Dur/Dorisch/Lydisch, i-VI-III-VIIStreicher, Hörner, Holzbläser, Harfen-Arpeggien, Pauken; [pluck], [bell] für Farbe
Epic / Battle130-170Moll, Phrygisch, i-bVI-bVIIStreicher-Ostinato in Achteln/Sechzehnteln, Brass-Stabs, Taiko/Toms, Chor-Pads; [brass_synth], [reese_bass] Hybrid
Gemütlich / Dorf / Farming85-110Dur, add9- und maj7-AkkordeNylon/Pluck, E-Piano, Mallets, leichte Shaker; [nylon_pluck], [epiano], [mallet]
Synthwave / Retro90-118Moll (Äolisch/Dorisch)[supersaw] Pads, [analog_bass] Achtel-Bass, [lead], Gated Snare, großer Hall
Chiptune (NES-Stil)120-180Dur oder Moll, schnelle Arpeggien für AkkordeGenau 2 [chip_pulse]/[chip_square] Stimmen, 1 [chip_triangle] Bass, [chip_noise] Drums; kein Hall oder ein winziger; quantisiert
Horror / Spannung50-80 oder kein PulsChromatische Cluster, Tritoni, Orgelpunkt[dark_pad] Drones, spärliche hohe [bell] Noten, tiefe Pulse, Stille als Werkzeug
Ambient / Space60-90Lydisch, sus-Akkorde, langsame Wechsel[pad], [dark_pad], [bell], lange Hall-Sends, langsame Volume-Automation
Lo-Fi / Chill70-90, Swingii7-V7-Imaj7, m9-Akkorde[epiano], weiche Drums mit Swing 0,3-0,5, [saturator] und [filter] auf dem Master
Action / EDM120-150Moll, Four-on-the-Floor[drums] oder ein Kit, [reese_bass]/[analog_bass], [saw_pluck] Arps, [supersaw] Leads, Sidechain-artige Volume-Automation
Puzzle / Casual100-130Dur, verspielte chromatische Durchgangstöne[mallet], [pluck], Pizzicato-Patches, Staccato-Bass

6. Mix und Master

  • Gain-Staging: Starte Spuren um -6 bis -12 dB; die Melodie sitzt oben und die Pads darunter. Der Render-Bericht gibt die Pegel pro Spur aus.
  • Füge einen gemeinsamen Hall auf einem Bus hinzu (track_add("Reverb", kind="bus", fx=["builtin:reverb"]) oder ein VST3 wie ValhallaSupermassive mit Mix bei 100 %) und sende pro Spur darauf. Trockener für schnelle oder dichte Musik, nasser für Ambient.
  • Hochpassfilter für alles, was nicht Bass oder Kick ist (builtin:eq HPF 100-200 Hz), schneide 250-500 Hz auf Pads, wenn der Bericht matschig meldet.
  • Pan für Breite (Harfe links, zweite Violinen rechts, Hi-Hats leicht außermittig). Halte Bass und Kick zentriert.
  • Lautstärke: Der Master wird auf target_lufs normalisiert (Standard -16). Hintergrund-/Menü-Cues liegen oft bei -18 bis -20; Battle bei -14 bis -16.
  • Die VST3-Effekte des Nutzers (SSL, TDR Nova, Waves, Valhalla) können über fx_add auf Spuren, Bussen oder dem Master platziert werden; setze Parameter per Name mit Anzeigetext ({"Mix": "100 %", "LowCut": "200 Hz"}).

7. Überprüfungs-Loop (immer)

  1. notes_read(track), um deine Linien als TTN zu überprüfen. analyze() gibt Tonart-/Bereichs-/Überlappungs-/Matsch-Prüfungen plus ein Klaviertroll-PNG. Lies das PNG, um die Form, Dichte und Registerverteilung zu überprüfen.
  2. render(). Reagiere auf jede Warnung: Stille Spur (kein Patch geladen), Matsch, dumpfes oder scharfes Hochtonende, Peaks, hart arbeitender Limiter, Loop-Naht. Unveränderte Spuren werden gecacht, also iteriere frei.
  3. listen(): deine Ohren. Es misst das gerenderte Audio, nicht die Noten, und fängt ein, was die Noten nicht zeigen können:
    • energy_arc, sections, bar_lufs: Tut jeder Abschnitt das, was die Form vorgibt? B sollte sich von A in Pegel, Helligkeit, Dichte oder wer führt (tracks_db, most_present) unterscheiden; Steigerungen geschehen Takt für Takt; der letzte Takt des Loops fließt in seinen ersten über.
    • masking: Die vs_rest_db jeder Spur in ihrem Hauptband. Halte die Führung bei 0 oder darüber. Parts unter etwa -10 sind kaum hörbar: hebe sie an, EQ-senke den überdeckten covered_by Track dort, verschiebe das Register oder schneide sie. pairs sind Parts, die um ein Band kämpfen (Kick vs. Bass bei 63 Hz: lass einen die Tiefen besitzen oder senke ihn bei den Hits ab).
    • verify: Proberenderungen jeder Tonhöhe, die jeder Part verwendet. Sie zeigen stille oder viel leisere Tonhöhen (außerhalb des Instrumentenbereichs), Parts, die transponiert klingen, langsame Attacken auf kurzen Noten, Takte mit Noten, aber keinem Klang (CC auf 0?), und drum_notes: wie jede Drum-Note wirklich klingt und wie laut sie bei gleicher Velocity ist. Vertraue diesen mehr als Patch-Namen und Beschreibungen. Behebe, rendere erneut, höre erneut, bis jede Warnung behoben oder bewusst ist. Der erste Durchlauf probiert jedes Instrument (Sekunden pro Plugin-Spur, danach gecacht). reference="<datei>" vergleicht den Mix mit einem Track, den der Nutzer als Referenz haben möchte.
  4. Sage dem Nutzer, was du gemacht hast und wie es aufgebaut ist (Form, Tonart, Tempo, Instrumente, das Motiv), gib den Dateipfad an und biete play() oder den Editor (ui_open()) an, damit er es hören kann. Seine Ohren sind der endgültige Richter, also frage, was geändert werden soll.

8. Ausliefern

render(out="<spiel>/<audioverzeichnis>/<name>.<ogg|wav>", loop="auto"), passend zu den Ordnern und der Namenskonvention des Projekts.

  • Godot: .ogg. Setze Loop im Import-Dock; für Intro+Loop verwende loop_offset = loop_start_sec aus der .loop.json.
  • Unity: .ogg oder .wav. Loop-Flag auf der AudioSource; Intro+Loop über zwei Clips oder geplante Wiedergabe mit .loop.json.
  • Unreal: 16-Bit 48 kHz .wav (bits=16); die WAV trägt einen smpl-Loop-Chunk.
  • Web: .ogg plus .mp3. Verwende stems=True / layers=True für adaptive Systeme und midi=True, um das Arrangement an eine DAW (Cubase) zu übergeben.

TTN-Notation (für 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

Tonhöhe C4 = mittleres C (MIDI 60), F#3, Bb5 oder r für eine Pause. Akkorde (C4 E4 G4). Dauern w h q e s t (ganze bis 32tel), punktiert q., Triole e3, Schläge 1.5 oder 3/2, Summen h+e; klebrig bis geändert. Velocity !pp !p !mp !mf !f !ff oder !0-127, klebrig. ' staccato, > Akzent, ~ Bindung an die nächste gleiche Tonhöhe. | Taktstrich, wird gegen die Taktart überprüft (Abweichungen kommen als Warnungen zurück, also behebe sie). @6.5 bewegt den Cursor auf Schlag 6.5 des geschriebenen Bereichs, für eine zweite Stimme in einem Aufruf. Oder verwende mode="merge".

Pattern-Tokens (für pattern): Akkordstufen 1 3 5 7 9, 8 10 12 eine Oktave höher, 5-/3+ Oktavverschiebungen, b7/#4 alterierte Stufen über dem Grundton, . Pause, - halten, 1> Akzent. Beispiel-Bässe: "1 - - 1 . 1 5- ." (Pop), "1 . 1 . 1 . 1 ." (Achtel, Synthwave), "1 - 5- - 8 - 5- -" (Walking-Feeling). Arpeggien: "1 5 8 10 12 10 8 5", "1 3 5 8" mit Rate 0.25 für Sechzehntel.

Verwandte Skills