I Fixed the Number and Lost the Song
Weeks chasing one statistic, a fix that turned out to be in the typing, and a listener who picked the take that failed every test I had built.
TL;DR — I finally moved the number that would not move, replicated it properly, confirmed it cost nothing — and then played both versions to someone, who picked the failure.
There is a number I have been chasing for weeks.
In a released K-pop song, the single most repeated eight-note melodic figure comes back somewhere between twelve and thirty-three times. That is what a hook is, measured: one phrase that keeps arriving until you cannot get it out of your head. Everything I generated locally with YuE2 came back at six.
I had tried the obvious things and the unobvious ones. Sampling temperature. Chord palettes borrowed from the songs themselves. Arrangement instructions written like a producer's session notes. Rule-based melody generators of my own, five versions of them. The number stayed at six.
It was in the typing
My lyric sheets wrote the chorus hook twice inside each chorus block. I changed it to four times. Nothing else — same prompt, same settings, same seed.
| Hook written | Top repeated 8-note pattern (5 seeds) | Median | Runs reaching 12 | Lyric fidelity |
|---|---|---|---|---|
| twice | 4 · 6 · 6 · 12 · 22 | 6 | 2 of 5 | 33.2% |
| four times | 12 · 12 · 31 · 55 · 75 | 31 | 5 of 5 | 33.6% |
| released K-pop | 12 to 33 | — | — | — |
The averages are 10 and 37, which at five runs each is not a result anyone should lean on. So look at the bottom of each row instead. Written four times, the worst run still reached twelve — the floor of what released music does. Written twice, three runs out of five never got there at all.
The spread got wider, not narrower. This is not an intervention that makes the model more consistent. It is one that stops the bad outcome from happening.
And it is free: the amount of the written lyric the model actually sings came out at 33.2 percent versus 33.6.
The trap I stepped around
If you compare only the first run of each version, fidelity appears to fall from 47 percent to 24. A clean tradeoff: more repetition, worse diction. Tidy. Publishable.
It is nothing. I had already measured that this model's run-to-run variation on that metric is twelve to eighteen points, so a twenty-three point gap between two single runs means nothing at all. Five seeds each returned a difference of four tenths of a point.
That is the third time this month that random variation has handed me something that looked like knowledge. The first two I wrote up and had to take back.
Two numbers wearing the same name
Part of why this took weeks is that I had been watching the wrong repetition statistic. There is one that asks how repetitive a melody is in general, and mine sat at seventy percent against a released range of fifty-five to seventy-seven. Comfortably fine. Nothing to fix.
The other asks whether one phrase dominates everything else. A song can be relentlessly repetitive and still have no single figure that owns it — which is exactly what I had been making. The fix moved the first number from seventy to seventy-six. It moved the second from six to thirty-one.
Then I played it to someone
Same lyrics apart from how many times the hook is written. Same style prompt. Same seed. The second clears every threshold I have built over three weeks of measurement. The first fails most of them.
The listener picked the first one, instantly.
One person, no protocol, no blinding. I am not going to throw out a five-seed replication over it. But I have seen this exact shape before in this project. Earlier on I wrote melody generators, tuned them until five separate metrics all sat inside their target bands, and every single output was rejected on listening. When I finally measured the thing none of my metrics covered, it turned out I was packing nearly three times as many notes into half the pitch range — musically, a scale exercise wearing a pop song's clothes.
What I am actually claiming
Writing the hook four times reliably moves a specific structural property of the generated score into the range released songs occupy, and costs nothing measurable in how clearly the words come out. That part is replicated and I stand on it.
Whether the song is better is a different question, and my instruments do not answer it. The one ear I have put on it said no.
The number was never the point. It was a stand-in I adopted because released songs happen to share it, and a stand-in you can satisfy while the listener walks away is a stand-in that needs investigating rather than defending. That is the next thing to measure.
If you want to try this yourself
Every piece of it, ready to copy.
The lyric shape that moves the metric
[Intro] <- tag only
[Verse] <- 35 syllables
[Pre-Chorus] <- 32
[Chorus] <- the SAME two-line hook, written four times
hook line A
hook line B
hook line A
hook line B
hook line A
hook line B
hook line A
hook line B
[Interlude] <- tag only
[Pre-Chorus]
[Chorus]
[Bridge] <- 15
[Chorus]
[Outro] <- 7
Writing the hook four times instead of twice is the whole intervention. Nothing else changes - not the style prompt, not the sampling parameters, not the seed.
Measuring it
# top repeated 8-note pattern, computed from the generated score, not the audio
iv = [b - a for a, b in zip(pitches, pitches[1:])]
c = collections.Counter(tuple(iv[i:i+8]) for i in range(len(iv) - 7))
top = max(c.values()) # released K-pop: 12 to 33
rep = 100 * sum(v for v in c.values() if v > 1) / sum(c.values()) # released: 55 to 77%
These two numbers measure different things. top asks whether one hook dominates; rep asks
whether the melody is repetitive overall. Ours was already fine on rep and stuck on top.
The request
{
"style": "Korean, K-pop girl group dance, bright confident female vocals, 126 BPM, punchy kick, deep synth bass, crisp claps, glossy synth plucks, catchy repeated hook, no electric guitar",
"lyrics": "[Intro]\n\n[Verse]\n...",
"cot": "full",
"seed": 831001
}
Keep the lyrics in one language, put the tempo in the style as a single number, and aim for 1.0 to 1.3 notes per syllable. Five seeds minimum before believing any comparison.
Further reading: the model is YuE2, and the project documents both its generation pipeline and its benchmark protocol.
Image: Klaus-Dieter Keller, Galton box, Public domain, via Wikimedia Commons.
← Back to all posts