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, UnityAssets/, 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) odersfz:<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_infozeigt 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 immercc()-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:
| Cue | Länge | Form und Anmerkungen |
|---|---|---|
| Hauptmenü | 45-120 s Loop | Optional 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 / Overworld | 1,5-3 min Loop | Lange Bögen, spärliche Textur, Atempausen, langsame harmonische Rhythmik (1-2 Takte pro Akkord). |
| Stadt / Laden | 40-90 s Loop | Warm, rhythmisch, kleines Ensemble, einprägsam. |
| Kampf | 60-120 s Loop | 130-170 bpm, treibendes Ostinato, starker Bass, Akzente und Hits, kurze Phrasen; B-Teil steigert die Intensität. |
| Boss | 90-180 s Loop | Dunklere Tonart, schwerere Tiefen, ein Motiv, das aus dem Hauptthema verdreht ist. |
| Sieg / Niederlage Stinger | 2-8 s, One-Shot | Sieg: ansteigende Linie zu einem hellen Dur-Akkord + Becken. Niederlage: fallende Linie zu einem Moll- oder verminderten Akkord, Ausblendung. loop="off". |
| Atmosphären-Bett | 1-3 min Loop | Pads/Drones, langsame Bewegung, kein starker Puls, wenig Melodie. |
| Abspann | 2-4 min, One-Shot | Medley 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
rolefü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)
| Genre | Tempo | Modi / Harmonik | Palette und Rhythmus |
|---|---|---|---|
| Orchestral Fantasy / Adventure | 80-120 | Dur/Dorisch/Lydisch, i-VI-III-VII | Streicher, Hörner, Holzbläser, Harfen-Arpeggien, Pauken; [pluck], [bell] für Farbe |
| Epic / Battle | 130-170 | Moll, Phrygisch, i-bVI-bVII | Streicher-Ostinato in Achteln/Sechzehnteln, Brass-Stabs, Taiko/Toms, Chor-Pads; [brass_synth], [reese_bass] Hybrid |
| Gemütlich / Dorf / Farming | 85-110 | Dur, add9- und maj7-Akkorde | Nylon/Pluck, E-Piano, Mallets, leichte Shaker; [nylon_pluck], [epiano], [mallet] |
| Synthwave / Retro | 90-118 | Moll (Äolisch/Dorisch) | [supersaw] Pads, [analog_bass] Achtel-Bass, [lead], Gated Snare, großer Hall |
| Chiptune (NES-Stil) | 120-180 | Dur oder Moll, schnelle Arpeggien für Akkorde | Genau 2 [chip_pulse]/[chip_square] Stimmen, 1 [chip_triangle] Bass, [chip_noise] Drums; kein Hall oder ein winziger; quantisiert |
| Horror / Spannung | 50-80 oder kein Puls | Chromatische Cluster, Tritoni, Orgelpunkt | [dark_pad] Drones, spärliche hohe [bell] Noten, tiefe Pulse, Stille als Werkzeug |
| Ambient / Space | 60-90 | Lydisch, sus-Akkorde, langsame Wechsel | [pad], [dark_pad], [bell], lange Hall-Sends, langsame Volume-Automation |
| Lo-Fi / Chill | 70-90, Swing | ii7-V7-Imaj7, m9-Akkorde | [epiano], weiche Drums mit Swing 0,3-0,5, [saturator] und [filter] auf dem Master |
| Action / EDM | 120-150 | Moll, Four-on-the-Floor | [drums] oder ein Kit, [reese_bass]/[analog_bass], [saw_pluck] Arps, [supersaw] Leads, Sidechain-artige Volume-Automation |
| Puzzle / Casual | 100-130 | Dur, 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:eqHPF 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_lufsnormalisiert (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_addauf Spuren, Bussen oder dem Master platziert werden; setze Parameter per Name mit Anzeigetext ({"Mix": "100 %", "LowCut": "200 Hz"}).
7. Überprüfungs-Loop (immer)
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.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.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: Dievs_rest_dbjeder 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 überdecktencovered_byTrack dort, verschiebe das Register oder schneide sie.pairssind 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?), unddrum_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.
- 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 verwendeloop_offset=loop_start_secaus der.loop.json. - Unity:
.oggoder.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 einensmpl-Loop-Chunk. - Web:
.oggplus.mp3. Verwendestems=True/layers=Truefür adaptive Systeme undmidi=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.