Lokale Musikerzeugung auf einer 8-GB-Grafikkarte
Erfahrungen mit ACE-Step 1.5, Stable Audio 3 und Hörmodellen unter Windows mit AMD RX 6600
Erfahrungsbericht · ein Hörer, kleine Stichproben · alle Zahlen aus dem eigenen Messprotokoll
Kurzfassung
Wir beschreiben eine vollständig lokale Musikwerkstatt auf Mittelklasse-Hardware (Ryzen 5 3500X, 32 GiB RAM, Radeon RX 6600 mit 8 GiB). Lieder mit Gesang erzeugt ACE-Step 1.5 (XL-Turbo, 4B-DiT) über acestep.cpp/Vulkan, Instrumentalstücke Stable Audio 3 medium über ONNX/DirectML. Der wichtigste Befund ist eine Regel für die Beschreibung: jede Melodie braucht eine Führung – Gesang oder ein ausdrücklich führendes Instrument, das vorn in der Beschreibung steht. Ohne Führung maß die Tonleitertreue 100 %, gehört klang die Melodie dennoch „nicht richtig harmonisch“. Weitere Ergebnisse: eine Melodievorgabe über den Cover-Modus mit Stärke 0,3, der ACE-Step-Captioner als änderbare Auto-Vorlage, eine Regressionsprüfung für Updates mit gleichem Zufallswert und eine Liste von Wegen, die nachweislich nichts brachten.
1Ausgangslage
Kommerzielle Dienste erzeugen Lieder in Sekunden, kosten aber pro Monat und halten die Stücke auf fremden Servern. Ziel war ein lokales System für den privaten Gebrauch, das auf vorhandener Hardware läuft, nachvollziehbar entscheidet und jede Änderung messbar macht. Der begrenzende Faktor ist der Grafikspeicher: 8 GiB (im Protokoll 8,6 GB, da Dezimal-GB gezählt werden).
2Systemaufbau
| Aufgabe | Modell | Rechenweg | gemessen |
| Lied mit Gesang | ACE-Step 1.5 XL-Turbo (4B-DiT, Q8, 8 Schritte), Planer 0,6B | acestep.cpp, Vulkan | 120 s in ~210 s, bis 6,5 GB |
| Langes Lied | ACE-Step 1.5 XL-Turbo | acestep.cpp, Vulkan | 480 s in ~1050 s |
| Lied, schnell | ACE-Step Turbo (2B) | acestep.cpp, Vulkan | 60 s in ~75 s |
| Instrumental | Stable Audio 3 medium, DiT als ONNX fp16 | DirectML + Prozessor | 60 s in 65–80 s |
| Vorbild beschreiben | ACE-Step-Captioner (Qwen2.5-Omni-7B, GGUF Q4_K_M) | llama.cpp, 20 Schichten auf der Karte | 45 s Audio in ~20 s |
| Vorbild beschreiben (Rückfall) | Qwen3-Omni-30B-A3B | llama.cpp, MoE-Experten im RAM | 30 s in ~105 s, ~20 GB RAM |
| Liedtexte | Gemma 4 12B (Q4_0) | llama.cpp | 1 Text ~25 s |
| Beschreibung aus Stil-Idee | Gemma 4 12B (Q4_0) | llama.cpp | 1 Vorschlag ~11–23 s |
| Spuren trennen | Mel-Band-RoFormer, Demucs htdemucs_6s | PyTorch ROCm | ≈ Echtzeit |
Rechenzeiten aus messprotokoll.csv; jede KI-Ausführung schreibt Dauer, RAM-Zuwachs und Grafikspeicher-Spitze.
Alle schweren Schritte laufen als eigene Prozesse in passenden Python-Umgebungen. Ein Dekorator misst jeden Lauf von außen (Leistungsindikatoren von Windows), weil ROCm-Prozesse dort nicht einzeln erscheinen. Grafikspeicher-Spitzen gelten deshalb für die ganze Karte einschließlich Bildschirm. Die Python-Umgebungen laufen seit dem 2. Oktober 2026 auf Python 3.14 (Abschnitt 5).
3Methode
Hören vor Messen
Jede Änderung wurde vom Nutzer gehört; Messwerte dienen als Vorauswahl und Kontrolle. Vergleiche liefen mit gleichem Zufallswert und an derselben Stelle (gleiche 25–40 s, mit Pause dazwischen), weil Fassungen mit verschiedenem Zufallswert sonst auch die Melodie wechseln.
Tonleitertreue als Hilfsmaß
Melodietöne werden mit pYIN oberhalb von 330 Hz erfasst. Gezählt wird der Anteil in der bestpassenden siebentönigen Tonleiter und in der bestpassenden Moll-Pentatonik mit Blue Note; der Wert ist das Mittel beider.
| Bezugspunkt | Tonleitertreue |
| Referenzstück (Slow Blues, Leadgitarre) | 97,8 % |
| vom Nutzer bevorzugte Fassungen | 98 % |
| als „schräg“ gehörte Fassungen | 83–90 % |
| Streuung derselben Vorlage über drei Zufallswerte | 91–98 % |
Bei drei Fassungen wählte die Messung dieselbe als beste wie das Ohr (98,4 / 91,3 / 90,8 %); seither misst die Werkstatt jede Fassung und legt die beste in den Vergleich. Die Grenzen des Maßes zeigt Abschnitt 4.1.
4Befunde
4.1 Jede Melodie braucht eine Führung
Ein früher Befund lautete: ACE-Step schreibt instrumental schräge Melodien, mit Gesang harmonische. Ein gezielter Test mit dem größeren XL-Modell (Soul-Ballade instrumental, 90 s, gleicher Zufallswert) zeigt, dass nicht der Gesang entscheidet, sondern ob irgendetwas führt.
| Fassung | Tonleitertreue | Melodietöne | Hörurteil |
| ohne Führung („instrumental“) | 100,0 % | 756 | „nicht so richtig harmonisch“ |
| Gitarre führt | 99,9 % | 1364 | „gut“ |
| Saxophon führt, hinten in der Beschreibung | 94,6 % | 671 | Saxophon nicht erkannt |
| Saxophon vorn, Zufallswert 1 | 96,3 % | 724 | Saxophon führt |
| Saxophon vorn, Zufallswert 2 | 89,1 % | 1559 | führt, Melodie „nicht so schön“ |
Befund
Die Tonleitertreue erkennt eine fehlende Führung nicht – das Ohr schon. Das führende Instrument muss am Anfang der Beschreibung stehen; sonst setzt sich das zuerst genannte Instrument der Vorlage durch. Die Werkstatt erzwingt deshalb eine Auswahl „Führung“ (Gesang oder Instrument) und stellt das gewählte Instrument automatisch nach vorn:
tenor saxophone instrumental, a tenor saxophone plays the lead melody throughout,
soul ballad, clean electric guitar, electric piano, electric bass, drums, tenor saxophone upfront
Dazu kommt eine Konkurrenzregel: Bei Chicago Blues führte trotz gewählter Gitarre die Mundharmonika der Vorlage. Wählt man selbst eine Führung, ersetzt die Werkstatt das Melodie-Instrument der Vorlage („A muted trumpet plays“ → „A tenor saxophone plays“) oder streicht konkurrierende Blasinstrumente und Geige; Begleiter wie Klavier und Rhythmusgitarre bleiben. Eine Prüfung aller rund 140 Vorlagen fand sechs Stable-Audio-Vorlagen mit zwei Melodie-Instrumenten, die bereinigt wurden.
4.2 Melodie vorgeben über den Cover-Modus
ACE-Step kann eine Quelle nachspielen. Der Modus cover vergröbert die Quelle über einen FSQ-Durchlauf (25 Hz → 5 Hz → 25 Hz); Tonfolge und Pausen bleiben, Klangdetails nicht. Als Quelle dient eine absichtlich schlichte Synth-Spur: aus MIDI, aus einer eigenen trockenen Aufnahme oder aus einem fertigen Stück herausgehört (Demucs-Spur → pYIN-Tonhöhenverlauf → neu gespielt mit Bendings und Vibrato).
| audio_cover_strength | Tonleitertreue | Hörurteil |
| 0,3 | 89,8 % | „die Gitarre klingt gut“ – Ton und Spiel am besten |
| 0,4 | 97,6 % | näher an der Melodie, aber schwächer als 0,3 |
| 0,5 | 93–96 % | „Midi ist auch dabei“ – Synth-Klang der Vorgabe hörbar |
- Echo in der Vorgabe übernimmt ACE-Step als Hall – die Vorgabe muss trocken sein.
- ACE-Step legt gern einen orgelartigen Begleitklang dazu (9–15 % in der Demucs-Spur „other“); die Werkstatt behält wahlweise nur die Lead-Spur.
- Gehörter „Nachhall“ war überwiegend gespielter Ton: In den Pausen der Vorgabe lag der Pegel nur 3–8 dB unter dem gespielten. Ein Expander (ffmpeg
agate) kürzt die Hallfahne, ohne den Ton anzugreifen.
- Glätten der herausgehörten Vorgabe (Oktavkorrektur, Medianfilter, Lücken überbrücken, Halbtonraster) beseitigte messbar Knackser (15 → 0), klang aber jedes Mal schlechter als die ungeglättete Fassung.
4.3 Der Captioner spricht die Trainingssprache
Mit dem ACE-Step-Captioner hat ACE-Step seine Trainingsdaten beschriftet. Für das Referenzstück schrieb er „smooth, laid-back neo-soul … clean and warm tone … jazzy lines“ – die eigene Vorlage hatte „slow soul blues … lightly overdriven“ geraten. Als Stil eingesetzt klang seine Beschreibung bei ACE-Step „einfach anders“, nicht besser (81 % Tonleitertreue); bei Stable Audio war sie gleichwertig zur Beschreibung von Qwen3-Omni (96,6 % gegen 88,8 %, beide „sehr gut“), bei einem Fünftel der Rechenzeit und rund 6 statt 20 GB Speicher. Der Captioner füllt deshalb das Stilfeld als änderbare Auto-Vorlage.
Einschränkungen: Ausschnitte nie genau 30 oder 60 s (das unveränderte llama.cpp fügt laut Anbieter sonst eine stumme Lücke ein). Von ACE-Step selbst erzeugte Stücke beschreibt er unzuverlässig („manipulated vocal samples“).
4.4 Modellwahl
| Vergleich (gleiche Vorlage) | Rechenzeit | Tonleitertreue | Ergebnis |
| XL-Turbo, 8 Schritte | ~210 s / 120 s | 98,4 % | Vorgabe |
| XL-SFT, 50 Schritte | 911 s / 120 s | 96,7 % | verworfen |
| Gitarren-Rezept XL / Turbo | | 99,9 / 98,2 % | „definitiv besser“ |
4.5 Beschreibung: was wirkt und was nicht
- Lange, konkrete Klangbeschreibungen der Vorlage klangen besser als kurze Beschreibungen nach dem offiziellen Leitfaden.
- Verneinungen („no organ“, „no reverb“) wurden vermieden; der Leitfaden empfiehlt, zu beschreiben, was da sein soll.
- Mischwörter wirken nicht: „light, subtle bass“ veränderte den Tiefbassanteil um 0,1 dB. Ein Kuhschwanzfilter beim Speichern (−9 dB bis 180 Hz) wirkt verlässlich.
- Lagewörter wirken nicht: „low register, dark, breathy“ gegen „high register, bright“ ergab 392 gegen 372 Hz Melodie-Median – kein Unterschied, auch gehört nicht.
- Ein Fehler im eigenen Testskript hatte die gewünschte Beschreibung gar nicht übergeben. Seitdem wird vor jedem Lauf geprüft, was im Auftrag tatsächlich ankommt.
4.6 Tempo und Tonart aus dem Signal
An zwölf Stücken mit bekanntem Tempo (50–180 BPM) traf librosa beat_track 7 Tempi und 6 Tonarten. Fehler sind fast nur Halb-, Doppel- oder Drittelzählung (12/8 mit punktierter Viertel 50 → gemessen 152). Eine Plausibilitätsprüfung (Kandidaten ×⅓ … ×2, Pulsstärke × Vorliebe um 100 BPM) korrigierte zwei Stücke und verdarb zwei andere: ebenfalls 7/12. Statt einer Automatik gibt es Knöpfe ⅓, ½, ×2, ×3.
4.7 Beschreibung aus einer Stil-Idee
Wer „wie Jimi Hendrix“ hören möchte, muss die Führungsregel aus 4.1 selbst in eine Beschreibung übersetzen. Ein lokales Sprachmodell erledigt das: Aus der Stil-Idee schreibt es je einen Vorschlag für Stable Audio (Sätze) und ACE-Step (Schlagwörter) samt Führung, Tempo, Tonart und Taktart. Die Regeln (führendes Instrument zuerst, keine Künstlernamen, keine Verneinungen, bei Stable Audio kein Gesang) stehen im Systemprompt; eine Nachprüfung im Programm entfernt Namen und Gesangswörter und prüft die Werte. Ist „Gesang“ als Führung gewählt, beginnt die ACE-Step-Beschreibung mit einer Stimmbeschreibung – vorher kam für „wie Freddie Mercury“ zunächst „Piano, stadium rock …“ ohne Stimme heraus, danach „operatic male vocals, …“ (gehört: „klingt sehr gut“).
| Modell (6 Stil-Ideen, je 1 Vorschlag) | Führung richtig | Zeit je Vorschlag |
| Gemma 4 12B (Q4_0) | 4 von 6 | 10–14 s |
| Qwen3.6-35B-A3B (MoE, Experten im RAM) | 5 von 6 | 12–21 s |
Beide verfehlten Till Brönner (Pedal Steel bzw. Klavier statt Trompete), Gemma 4 zusätzlich Frank Zappa (Synthesizer). Die Werkstatt nutzt Gemma 4: schneller, deutlich weniger Arbeitsspeicher, und die Führung lässt sich ohnehin vorgeben. In einem ersten Durchgang beurteilte der Nutzer die Vorschläge zu Hendrix und Brönner als „sehr gut“, die zu Zappa als „sehr chaotisch, aber schon typisch Zappa“.
4.8 Vorbild anhören und daraus Prompts schreiben
Für ein vorhandenes Stück (Test: eine KI-erzeugte, öffentlich veröffentlichte 91-Minuten-Zusammenstellung, deren Titel einen bekannten Gitarristen nennt) ermittelt die Werkstatt zuerst die typische Stelle: Sie zerlegt die Zusammenstellung an Pausen ab 0,5 s in 12 Stücke, misst je Stück Tempo, Helligkeit sowie Gesangs- und Gitarrenanteil (Demucs) und nimmt das Stück, das dem Median am nächsten liegt; darin das 30-s-Fenster, das dem Durchschnitt des Stücks entspricht. Das Maximum des Gesangsanteils war ein untypischer Sonderteil. Ein Hörmodell beschreibt die Stelle, Gemma 4 schreibt daraus Prompts nach den Regeln aus 4.1 und 4.7.
| Hörmodell (je 30 s, 4 Stellen) | richtig beschrieben | Zeit je Stelle |
| Qwen3-Omni-30B-A3B-Captioner (GGUF Q4_K_M) | 4 von 4, schreibt sogar den Liedtext mit | 83–96 s |
| Qwen3-Omni-30B-A3B Instruct | 4 von 4 | 127–134 s |
| ACE-Step-Captioner | 2 von 4 – hielt KI-Stimmen für „manipulated vocal samples“ | 41–57 s |
Befund
Die Messung muss das Hörmodell korrigieren. Der Captioner hörte „arpeggiated synthesizer, synth pads“; Demucs fand im ganzen Stück 0–3 % Tasten und Sonstiges, ohne Bruchstelle. Deshalb bekommt das Sprachmodell die gemessenen Spuranteile, und Instrumente unter 3 % werden aus den Prompts gestrichen. Die Videobeschreibung („Latin“, „Acoustic“, Congas) passte zur Musik übrigens gar nicht: gehört und gemessen war es Soul-Blues-Rock mit Gesang.
4.9 Blindtest: ACE-Step gegen Stable Audio 3
Fünf Musiktypen, beide instrumental mit derselben Führung, gleicher Zufallswert, gleiches Tempo, gleiche Lautheit (−15 LUFS), 90 s; welche Fassung A und welche B ist, wurde je Paar zufällig gelost und erst nach dem Urteil aufgelöst.
| Paar | ACE-Step | Stable Audio | Tonleitertreue ACE / SA |
| Slow Blues (Gitarre) | ++ | + | 91,1 / 82,6 % |
| Jazz-Ballade (Klavier) | ++ | + | 94,6 / 80,9 % |
| Soul-Ballade (Gitarre) | ++ | ++ | 81,6 / 94,5 % |
| Rock-Ballade (Gitarre) | ++ | + | 96,8 / 89,4 % |
| Bossa Nova (Flöte) | ++ | + | 90,7 / 80,3 % |
Alle zehn Fassungen wurden als „sehr gut, reine Geschmacksfrage“ gehört. Wo es ein Urteil gab, lag ACE-Step vorn (4 : 0, ein Unentschieden), und die bevorzugte Fassung hatte jeweils die höhere Tonleitertreue; im Unentschieden war es umgekehrt. ACE-Step mit Führung ist damit auch instrumental die erste Wahl; Stable Audio bleibt wegen seines eigenen Klangs und der Klang-LoRA im Programm und rechnet schneller (~121 s gegen ~163 s je 90 s Musik).
5Betrieb und Pflege
Regressionsprüfung bei Updates
Alte und neue Programmversion rechnen denselben Auftrag mit demselben Zufallswert. Ein gescheiterter Lauf führt zur Ablehnung; mehr als 20 % Rechenzeit oder mehr als 2 Prozentpunkte Tonleitertreue sind eine Warnschwelle, nach der ein zweiter Zufallswert und ein Hörvergleich folgen. Eine harte Grenze über verschiedene Zufallswerte wäre Rauschen, da diese allein um 7 Punkte streuen.
| acestep.cpp b7ba6d9 → 694ef0f | alt | neu |
| Lied 120 s, XL | 211 s · 97,4 % | 218 s · 97,9 % |
| Melodie vorgeben 60 s | 325 s · 92,6 % | 325 s · 92,6 % (identisch) |
Aktualisierung am 2. Oktober 2026
Alle Komponenten wurden auf den neuesten Stand gebracht, jeweils mit Sicherung, Vorher-Nachher-Messung und Rückweg; die alten Python-Umgebungen liegen daneben. Python wurde dabei von 3.11 auf 3.14 gehoben – neben dem System-Python, das andere Programme weiter nutzen. Für Python 3.14 gibt es dieselben ROCm-PyTorch-Bauten, sodass sich je Umgebung nur die Python-Version änderte.
| Änderung | Prüfung (gleicher Auftrag, gleicher Zufallswert) | Rechenzeit alt → neu |
| Stable Audio 3 (ONNX/DirectML), Python 3.11 → 3.14 | bitgleiche Ausgabe | 54 → 46 s |
| Stable Audio 3 mit Klang-LoRA (PyTorch), 3.11 → 3.14 | bitgleiche Ausgabe | 161 → 124 s |
| Gesang trennen (Mel-Band-RoFormer), 3.11 → 3.14 | bitgleiche Gesangsspur | ≈ gleich |
| RVC und Seed-VC (Stimme übertragen), 3.11 → 3.14 | nicht wiederholbar; Spektrum-Ähnlichkeit wie zwischen zwei Läufen der alten Fassung | ≈ gleich |
| Liedtexte Gemma 3 → Gemma 4 (je 10 gleiche Aufträge, Deutsch/Englisch) | nach dem Lesen vom Nutzer gewählt | Ø 44 → 25 s |
| llama.cpp Build 11256 → 11347 | Beschreibung aus Stil-Idee wortgleich | 37 → 23 s |
| transformers 4.46/4.57 → 5.18 | Seed-VC nach kleiner Anpassung, sonst alle Werte gleich | Seed-VC 429 → 214 s |
Was andere vielleicht nutzen können:
- Python 3.13+ hat
aifc, sunau und audioop aus der Standardbibliothek entfernt; librosa/audioread brauchen dann standard-aifc, standard-sunau und audioop-lts. Mit Python 3.14 startete der RoFormer erst mit beartype 0.22 (0.18 versteht die neuen Typangaben nicht).
- huggingface_hub 1.x übergibt
proxies und resume_download nicht mehr; Seed-VCs BigVGAN-Lader erwartete beide und brach ab. Zwei Vorgabewerte genügen als Anpassung.
- Schwankende Rechenzeit auf dem Prozessor: SonicMaster brauchte 44–115 s für dieselbe Aufgabe, schon unter Python 3.11. Ursache war der T5-Textteil auf dem Prozessor: mehrere OpenBLAS-Threads kommen PyTorchs OpenMP in die Quere (T5 18 s statt 2 s, je nach Ladereihenfolge der Bibliotheken). Mit
OPENBLAS_NUM_THREADS=1 gleichmäßig rund 40 s.
Speicher
Der PyTorch-Dienst für Stable Audio mit Klang-LoRA erhöht den Arbeitsspeicher um 19,9 GB (Spitze 28,4 von 34,4 GB = 32 GiB) und belegt bis 8,4 von 8,6 GB Grafikspeicher. Er startet nur, wenn mindestens 22 GB frei sind.
Bedienung
Die Oberfläche hat eine Ansicht „Einfach“ und „Erweitert“. Den Umfang von „Einfach“ bestimmte die tatsächliche Nutzung: 27 von 37 erzeugten Stücken entstanden schlicht aus einer Vorlage. Verborgene Felder behalten ihre Werte; Vorlagen setzen weiter Tempo, Tonart und Tiefbass.
6Was nicht funktioniert hat
| Versuch | Ergebnis |
cover-nofsq (Quelle ohne Vergröberung) | Phantomgesang aus der Quelle |
complete mit Base-Modell (Band zur Gitarre) | 4 % Phantomgesang, verzerrte Gitarre; Führung 7 → 3,5 änderte nichts |
| De-Reverb-RoFormer auf die Leadspur | „kaum noch Gitarre“ – hält Ausklingen für Hall |
| Kurzbeschreibung nach offiziellem Leitfaden | schlechter als die lange Vorlage |
| Captioner-Satz als Stil (ACE-Step) | „einfach anders“, 81 % |
| Lage tief/hoch per Wort | 392 gegen 372 Hz, nicht hörbar |
| Mischwörter für Bass | ±0,1 dB |
| Tempo-Plausibilitätsprüfung | netto keine Verbesserung |
| XL-SFT | 4× langsamer, nicht besser |
7Grenzen
- Ein einzelner Hörer; Urteile sind subjektiv und nicht verblindet.
- Meist ein bis drei Zufallswerte je Vergleich – Befunde sind Hinweise, keine Statistik.
- Die Tonleitertreue erfasst die ganze Mischung und nur Töne über 330 Hz; verzerrte oder tiefe Gitarren erkennt sie kaum.
- Nur auf einem System (Windows 11, AMD RDNA2) erprobt; ROCm unter Windows ist eine Vorabversion.
8Fazit
Auf einer 8-GB-Karte ist eine Musikproduktion möglich, deren Ergebnisse dem Nutzer nach mit kommerziellen Diensten mithalten – ohne laufende Kosten und ohne dass Stücke den Rechner verlassen. Der größte Qualitätsgewinn kam nicht aus zusätzlichen Modellen, sondern aus wenigen gehörten Regeln: eine Führung je Melodie, das führende Instrument vorn, keine konkurrierenden Melodie-Instrumente, mehrere Fassungen mit Messvorauswahl. Messwerte sind nützlich, ersetzen das Ohr aber nicht.
Über diesen Bericht
Entstehung
Idee, Zielsetzung, alle Hörurteile und die Entscheidungen stammen vom Autor. Programmiert, gemessen und dokumentiert hat Claude (Anthropic) als KI-Assistent im Gespräch mit dem Autor – einschließlich der Testskripte, der Messungen und dieses Berichts.
Anregungen willkommen
Verbesserungsvorschläge, eigene Messungen, Widerspruch und Hinweise auf Fehler werden gern entgegengenommen: im Reiter Community dieser Seite auf Hugging Face. Besonders interessant: Bestätigt sich die Führungsregel mit anderen Hörern, anderen Vorlagen oder auf anderer Hardware?
Local music generation on an 8 GB graphics card
Notes on ACE-Step 1.5, Stable Audio 3 and audio-understanding models on Windows with an AMD RX 6600
Technical report · single listener, small samples · all figures from our own measurement log
Abstract
We describe a fully local music workshop on mid-range hardware (Ryzen 5 3500X, 32 GiB RAM, Radeon RX 6600 with 8 GiB). Songs with vocals are generated by ACE-Step 1.5 (XL-Turbo, 4B DiT) via acestep.cpp/Vulkan, instrumentals by Stable Audio 3 medium via ONNX/DirectML. The main finding is a prompting rule: every melody needs a lead – vocals or an explicitly leading instrument placed at the start of the caption. Without a lead, scale adherence measured 100 %, yet the melody sounded "not really harmonious". Further results: melody guidance through the cover task at strength 0.3, the ACE-Step captioner as an editable auto-template, a same-seed regression test for updates, and a list of approaches that demonstrably did not help.
1Motivation
Commercial services generate songs in seconds but charge monthly and keep the results on their servers. The goal was a local system for private use that runs on existing hardware, makes traceable decisions and measures every change. The limiting factor is video memory: 8 GiB (8.6 GB in the log, which counts decimal gigabytes).
2System
| Task | Model | Backend | measured |
| Song with vocals | ACE-Step 1.5 XL-Turbo (4B DiT, Q8, 8 steps), 0.6B planner | acestep.cpp, Vulkan | 120 s in ~210 s, up to 6.5 GB |
| Long song | ACE-Step 1.5 XL-Turbo | acestep.cpp, Vulkan | 480 s in ~1050 s |
| Song, fast | ACE-Step Turbo (2B) | acestep.cpp, Vulkan | 60 s in ~75 s |
| Instrumental | Stable Audio 3 medium, DiT as ONNX fp16 | DirectML + CPU | 60 s in 65–80 s |
| Describe a reference | ACE-Step captioner (Qwen2.5-Omni-7B, GGUF Q4_K_M) | llama.cpp, 20 layers on GPU | 45 s audio in ~20 s |
| Describe (fallback) | Qwen3-Omni-30B-A3B | llama.cpp, MoE experts in RAM | 30 s in ~105 s, ~20 GB RAM |
| Lyrics | Gemma 4 12B (Q4_0) | llama.cpp | 1 lyric in ~25 s |
| Caption from a style idea | Gemma 4 12B (Q4_0) | llama.cpp | 1 draft in ~11–23 s |
| Stem separation | Mel-Band RoFormer, Demucs htdemucs_6s | PyTorch ROCm | ≈ real time |
Run times from messprotokoll.csv; every AI run logs duration, RAM growth and peak video memory.
Heavy steps run as separate processes in dedicated Python environments. A decorator measures each run from outside via Windows performance counters, because ROCm processes are not listed individually; video memory peaks therefore cover the whole card including the desktop. Since 2 October 2026 the Python environments run on Python 3.14 (section 5).
3Method
Listening first
Every change was judged by ear; measurements serve as pre-selection and as a check. Comparisons used the same seed and the same passage (25–40 s, with a pause between), since versions with different seeds also change the melody.
Scale adherence as a helper metric
Melody notes are tracked with pYIN above 330 Hz. We count the share inside the best-fitting seven-note scale and inside the best-fitting minor pentatonic with blue note; the score is the mean of both.
| Reference point | Scale adherence |
| Reference track (slow blues, lead guitar) | 97.8 % |
| versions preferred by the listener | 98 % |
| versions heard as "off-key" | 83–90 % |
| spread of one template over three seeds | 91–98 % |
Among three versions the metric picked the same best one as the listener (98.4 / 91.3 / 90.8 %); the workshop now scores every version and puts the best into the comparison view. Section 4.1 shows where the metric fails.
4Findings
4.1 Every melody needs a lead
An early observation was that ACE-Step writes off-key melodies for instrumentals and harmonious ones with vocals. A controlled test with the larger XL model (instrumental soul ballad, 90 s, same seed) shows that vocals are not the point – what matters is whether anything leads.
| Version | Scale adherence | melody notes | Listening verdict |
| no lead ("instrumental") | 100.0 % | 756 | "not really harmonious" |
| guitar leads | 99.9 % | 1364 | "good" |
| saxophone leads, late in caption | 94.6 % | 671 | saxophone not recognised |
| saxophone first, seed 1 | 96.3 % | 724 | saxophone leads |
| saxophone first, seed 2 | 89.1 % | 1559 | leads, melody "less nice" |
Finding
Scale adherence does not detect a missing lead – the ear does. The leading instrument must open the caption; otherwise the instrument named first in the template wins. The workshop therefore requires a "lead" choice (vocals or instrument) and moves the chosen instrument to the front automatically:
tenor saxophone instrumental, a tenor saxophone plays the lead melody throughout,
soul ballad, clean electric guitar, electric piano, electric bass, drums, tenor saxophone upfront
A competition rule complements this: in a Chicago blues template the harmonica kept leading although guitar was selected. When the user picks a lead, the workshop swaps the template's melody instrument ("A muted trumpet plays" → "A tenor saxophone plays") or removes competing wind instruments and violin; accompaniment such as piano or rhythm guitar stays. Auditing all ~140 templates found six Stable Audio templates with two melody instruments, which were cleaned up.
4.2 Melody guidance via the cover task
ACE-Step can re-perform a source. The cover task coarsens the source through an FSQ round trip (25 Hz → 5 Hz → 25 Hz); note sequence and rests survive, timbre detail does not. The source is a deliberately plain synth track: from MIDI, from a dry home recording, or transcribed from a finished track (Demucs stem → pYIN pitch contour → re-synthesised with bends and vibrato).
| audio_cover_strength | Scale adherence | Listening verdict |
| 0.3 | 89.8 % | "the guitar sounds good" – best tone and phrasing |
| 0.4 | 97.6 % | closer to the melody, but weaker than 0.3 |
| 0.5 | 93–96 % | "the MIDI is in there too" – synth timbre audible |
- Echo in the source is reproduced as reverb – the source must be dry.
- ACE-Step tends to add an organ-like pad (9–15 % in the Demucs "other" stem); the workshop can keep only the lead stem.
- Perceived "reverb" was mostly sustained playing: in the source's rests the level was only 3–8 dB below the played passages. An expander (ffmpeg
agate) shortens the tail without touching the note.
- Smoothing the transcribed source (octave correction, median filter, gap bridging, semitone snapping) removed clicks measurably (15 → 0) but sounded worse every time than the raw transcription.
4.3 The captioner speaks the training language
ACE-Step's captions were produced with the ACE-Step captioner. For the reference track it wrote "smooth, laid-back neo-soul … clean and warm tone … jazzy lines", whereas our template had guessed "slow soul blues … lightly overdriven". Used as the style prompt in ACE-Step it sounded "just different", not better (81 %); in Stable Audio it matched Qwen3-Omni's description (96.6 % vs 88.8 %, both "very good") at a fifth of the run time and about 6 instead of 20 GB of memory. The captioner therefore fills the style field as an editable auto-template.
Caveats: never use clips of exactly 30 or 60 s (according to the GGUF provider, stock llama.cpp then inserts a silent segment). Tracks generated by ACE-Step itself are described unreliably ("manipulated vocal samples").
4.4 Model choice
| Comparison (same template) | Run time | Scale adherence | Result |
| XL-Turbo, 8 steps | ~210 s / 120 s | 98.4 % | default |
| XL-SFT, 50 steps | 911 s / 120 s | 96.7 % | rejected |
| guitar recipe XL / Turbo | | 99.9 / 98.2 % | "definitely better" |
4.5 Captions: what works and what does not
- Long, concrete timbre descriptions sounded better than short captions following the official guide.
- Negations ("no organ", "no reverb") were avoided; the guide recommends describing what should be present.
- Mix words do not work: "light, subtle bass" changed the low-end share by 0.1 dB. A low-shelf filter on export (−9 dB below 180 Hz) works reliably.
- Register words do not work: "low register, dark, breathy" vs "high register, bright" gave a melody median of 392 vs 372 Hz – no difference, none audible.
- A bug in our own test script once failed to pass the intended caption at all. Since then, every run checks what actually arrives in the request.
4.6 Tempo and key from the signal
On twelve tracks of known tempo (50–180 BPM) librosa beat_track got 7 tempi and 6 keys right. Errors are almost all half, double or third counting (12/8 at dotted quarter 50 → measured 152). A plausibility check (candidates ×⅓ … ×2, pulse strength × prior around 100 BPM) fixed two tracks and broke two others: also 7/12. Instead of automation there are buttons ⅓, ½, ×2, ×3.
4.7 Captions from a style idea
Someone who wants "like Jimi Hendrix" would have to translate the lead rule of 4.1 into a caption by hand. A local language model does this: from the style idea it writes one draft each for Stable Audio (sentences) and ACE-Step (tags), plus lead, tempo, key and time signature. The rules (leading instrument first, no artist names, no negations, no vocals for Stable Audio) are in the system prompt; a check in the program removes names and vocal words and validates the values. If "vocals" is chosen as lead, the ACE-Step caption starts with a voice description – before that change, "like Freddie Mercury" first produced "Piano, stadium rock …" without a voice, afterwards "operatic male vocals, …" (heard: "sounds very good").
| Model (6 style ideas, 1 draft each) | correct lead | time per draft |
| Gemma 4 12B (Q4_0) | 4 of 6 | 10–14 s |
| Qwen3.6-35B-A3B (MoE, experts in RAM) | 5 of 6 | 12–21 s |
Both missed Till Brönner (pedal steel or piano instead of trumpet), Gemma 4 also Frank Zappa (synthesizer). The workshop uses Gemma 4: faster, much less RAM, and the lead can be preset anyway. In a first round the user rated the drafts for Hendrix and Brönner "very good", the one for Zappa "very chaotic, but typical Zappa".
4.8 Listening to a reference and writing prompts from it
For an existing track (test: an AI-generated, publicly released 91-minute compilation whose title names a famous guitarist) the workshop first finds the typical passage: it splits the compilation at pauses of 0.5 s or more into 12 tracks, measures tempo, brightness and vocal and guitar share (Demucs) per track and takes the track closest to the median; within it, the 30-s window that matches the track's average. The window with the most vocals was an untypical special section. A listening model describes the passage, and Gemma 4 turns that into prompts following the rules of 4.1 and 4.7.
| Listening model (30 s each, 4 passages) | described correctly | time per passage |
| Qwen3-Omni-30B-A3B-Captioner (GGUF Q4_K_M) | 4 of 4, even transcribes the lyrics | 83–96 s |
| Qwen3-Omni-30B-A3B Instruct | 4 of 4 | 127–134 s |
| ACE-Step captioner | 2 of 4 – took AI voices for "manipulated vocal samples" | 41–57 s |
Finding
Measurement has to correct the listening model. The captioner heard "arpeggiated synthesizer, synth pads"; Demucs found 0–3 % keys and other instruments across the whole track, with no break. The language model therefore receives the measured stem shares, and instruments below 3 % are removed from the prompts. Incidentally, the video description ("Latin", "Acoustic", congas) did not match the music at all: heard and measured, it was soul blues rock with vocals.
4.9 Blind test: ACE-Step versus Stable Audio 3
Five styles, both instrumental with the same lead, same seed, same tempo, same loudness (−15 LUFS), 90 s; which version was A or B was randomised per pair and revealed only after the verdict.
| Pair | ACE-Step | Stable Audio | scale adherence ACE / SA |
| Slow blues (guitar) | ++ | + | 91.1 / 82.6 % |
| Jazz ballad (piano) | ++ | + | 94.6 / 80.9 % |
| Soul ballad (guitar) | ++ | ++ | 81.6 / 94.5 % |
| Rock ballad (guitar) | ++ | + | 96.8 / 89.4 % |
| Bossa nova (flute) | ++ | + | 90.7 / 80.3 % |
All ten versions were heard as "very good, purely a matter of taste". Where there was a preference, ACE-Step won (4 : 0, one tie), and the preferred version always had the higher scale adherence; in the tie it was the other way round. ACE-Step with a lead is therefore the first choice for instrumentals too; Stable Audio stays in the program for its own sound and the timbre LoRA, and it is faster (~121 s vs ~163 s per 90 s of music).
5Operation and maintenance
Regression test for updates
Old and new program versions render the same request with the same seed. A failed run means rejection; more than 20 % run time or more than 2 percentage points of scale adherence are a warning threshold, followed by a second seed and a listening comparison. A hard limit across different seeds would be noise, since seeds alone spread by 7 points.
| acestep.cpp b7ba6d9 → 694ef0f | old | new |
| song 120 s, XL | 211 s · 97.4 % | 218 s · 97.9 % |
| melody guidance 60 s | 325 s · 92.6 % | 325 s · 92.6 % (identical) |
Update of 2 October 2026
All components were brought up to date, each with a backup, a before/after measurement and a way back; the old Python environments are kept alongside. Python was raised from 3.11 to 3.14 – next to the system Python, which other programs keep using. The same ROCm PyTorch builds exist for Python 3.14, so only the Python version changed per environment.
| Change | Check (same request, same seed) | run time old → new |
| Stable Audio 3 (ONNX/DirectML), Python 3.11 → 3.14 | bit-identical output | 54 → 46 s |
| Stable Audio 3 with timbre LoRA (PyTorch), 3.11 → 3.14 | bit-identical output | 161 → 124 s |
| Vocal separation (Mel-Band RoFormer), 3.11 → 3.14 | bit-identical vocal stem | ≈ same |
| RVC and Seed-VC (voice conversion), 3.11 → 3.14 | not repeatable; spectral similarity as between two runs of the old version | ≈ same |
| Lyrics Gemma 3 → Gemma 4 (10 identical requests each, German/English) | chosen by the user after reading | avg 44 → 25 s |
| llama.cpp build 11256 → 11347 | caption from style idea word-for-word identical | 37 → 23 s |
| transformers 4.46/4.57 → 5.18 | Seed-VC after a small fix, otherwise all values equal | Seed-VC 429 → 214 s |
What others may find useful:
- Python 3.13+ removed
aifc, sunau and audioop from the standard library; librosa/audioread then need standard-aifc, standard-sunau and audioop-lts. Under Python 3.14 the RoFormer only started with beartype 0.22 (0.18 does not understand the new annotations).
- huggingface_hub 1.x no longer passes
proxies and resume_download; Seed-VC's BigVGAN loader expected both and failed. Two default values are enough as a fix.
- Fluctuating CPU run time: SonicMaster took 44–115 s for the same task, already under Python 3.11. The cause was its T5 text encoder on the CPU: several OpenBLAS threads collide with PyTorch's OpenMP (T5 18 s instead of 2 s, depending on library load order). With
OPENBLAS_NUM_THREADS=1 a steady ~40 s.
Memory
The PyTorch service for Stable Audio with a timbre LoRA adds 19.9 GB of RAM (peak 28.4 of 34.4 GB = 32 GiB) and uses up to 8.4 of 8.6 GB video memory. It only starts with at least 22 GB free.
User interface
The interface has a "Simple" and an "Advanced" view. The scope of "Simple" was taken from actual use: 27 of 37 generated tracks came straight from a template. Hidden fields keep their values; templates still set tempo, key and low-end.
6What did not work
| Attempt | Outcome |
cover-nofsq (source without coarsening) | phantom vocals from the source |
complete with the base model (band around a guitar) | 4 % phantom vocals, distorted guitar; guidance 7 → 3.5 changed nothing |
| De-reverb RoFormer on the lead stem | "hardly any guitar left" – treats sustain as reverb |
| Short caption following the official guide | worse than the long template |
| Captioner text as style (ACE-Step) | "just different", 81 % |
| Register low/high by words | 392 vs 372 Hz, inaudible |
| Mix words for bass | ±0.1 dB |
| Tempo plausibility check | no net improvement |
| XL-SFT | 4× slower, not better |
7Limitations
- A single listener; judgements are subjective and not blinded.
- Mostly one to three seeds per comparison – findings are indications, not statistics.
- Scale adherence covers the whole mix and only notes above 330 Hz; distorted or low guitars are barely detected.
- Tested on one system only (Windows 11, AMD RDNA2); ROCm on Windows is a preview release.
8Conclusion
An 8 GB card supports music production whose results, in the listener's judgement, keep up with commercial services – with no running costs and without tracks leaving the machine. The largest quality gains came not from additional models but from a few rules found by listening: one lead per melody, the leading instrument first, no competing melody instruments, several versions with metric-based pre-selection. Measurements help, but they do not replace the ear.
About this report
How it was made
The idea, the goals, all listening judgements and the decisions are the author's. The programming, measurements and documentation were done by Claude (Anthropic) as an AI assistant in conversation with the author – including the test scripts, the measurements and this report.
Feedback welcome
Suggestions for improvement, your own measurements, disagreement and bug reports are very welcome: in the Community tab of this page on Hugging Face. Of particular interest: does the lead rule hold for other listeners, other templates or other hardware?