Originally published on Zenn (Japanese). Cross-posted here.
When you write enumeration-style lyrics like "A, B, C, D…" or "January, February, March…" in AI music generation, the pronunciation can fall apart and become unintelligible — even when you thought you wrote a prompt of the same quality as any other line. In the songwriting community this is informally called the "LMNOP problem," a name that comes from how the "L-M-N-O-P" stretch of the alphabet song tends to get mashed together like a tongue twister.
In this article, I actually generated 8 songs with an AI composition pipeline (ACE-Step 1.5, fully local), measured lyric-match rates with mlx-whisper, and — based on those logs — show three things: (1) the mechanism behind the LMNOP problem and how to counter it, (2) what still happened even after applying the countermeasures, and (3) going one step further, a measurement showing that "fixing the prompt and regenerating" — a seemingly correct response — turned out to be counterproductive for enumeration-style lyrics specifically.
What is the LMNOP problem
Enumerations (alphabet, numbers, days of the week, month names, etc.) have a special structure among lyrics. In an ordinary sentence, even if pronunciation wavers a bit, context fills in the gaps — but a string of single-syllable symbols like "B" vs. "D" or "M" vs. "N" has no context to help. When you place them on the rhythm at even intervals, adjacent sounds collapse into each other and become indistinguishable to a listener (and to speech recognition).
The design principles we accumulated in our internal music-generation project spell out the following countermeasures.
- Don't space enumerated items evenly; change the grouping (e.g.
ABCD / EFG / HIJK / LMN / OPQ / RST / UVW / XYZ) - Write numbers as English words (
"thirty", not"30") - Notate letters separated by hyphens, like
A - B - C - Keep each line at 4–8 words / 6–10 syllables, and align the syllable counts of parallel lines to within ±1–2
- Don't insert
"and"into an enumeration
The countermeasures in practice — the prompt and lyrics we used
Here are the actual caption (the ACE-Step prompt) and lyrics we used for a song dealing with the alphabet. The design principles are applied directly, with the grouping changed to avoid the LMNOP problem.
caption: children's song, cheerful, playful, simple melody, ukulele,
glockenspiel, acoustic guitar, clear female vocals, warm, sing-along
duration: 100s / BPM 100 / C major
[Verse]
A - B - C - D
E - F - G
H - I - J - K
L - M - N
[Verse]
O - P - Q
R - S - T
U - V - W
X - Y - Z
This is a seemingly "correct" prompt, with the textbook countermeasures applied.
Measurement — why the numbers scattered despite the countermeasures
I transcribed all 8 generated songs with mlx-whisper (large-v3-turbo, fully local) and measured the match rate against the lyrics actually used. Each song was generated as 2–4 takes with different seeds under the same prompt, so even the same song with the same prompt shows variation in match rate from take to take.
| Song | Take-to-take match-rate range (max-min, pp) | Note |
|---|---|---|
| 01 ABC Song | 58.6 | Enumeration |
| 02 Numbers Song | 12.2 | Enumeration |
| 05 Days & Months | 27.7 | Enumeration |
| 04 Weather | 7.3 | Non-enumeration |
| 06 What Time Is It | 28.8 | Non-enumeration |
| 07 Seasons | 75.2 | Non-enumeration (generation glitch in v1b) |
| 08 Introduce Yourself | 41.0 | Non-enumeration |
To be honest, the largest range belongs to the non-enumeration 07 Seasons (75.2pp). But the scoring records explicitly note that this song's v1b (0.0%) is a "defective take where Whisper kept hallucinating 'Thank you'," and that 01 ABC Song's v1b (16.7%) is also a "defective take with a broken chorus loop." In other words, engine-side glitches and take-to-take variation are mixed together, and the size of the range alone does not let you conclude "it broke because it's an enumeration."
The main point — prompt fixes were counterproductive for enumeration lyrics only
To separate out the influence of generation glitches, instead of the "range" (which includes defective takes), let's look only at each song's best take (the highest match rate that prompt could produce). For 7 of the 8 songs, we regenerated a "v2" in which the prompt and lyrics were revised to reflect an independent grader's rubric feedback (unnatural English, syllable overruns, lack of expression, etc.). Comparing the v1 best take against the v2 best take yields the following.

How the best-take match rate changed before and after the prompt fix (v2). Among enumeration songs (blue) 2 of 3 got worse, while among non-enumeration songs (orange) 3 of 4 improved.
- Average v1→v2 delta for the 3 enumeration songs (ABC / Numbers / Days&Months): -10.43pp
- Average delta for the 4 non-enumeration songs (Weather / What Time / Seasons / Introduce — the 4 that were regenerated as v2): +1.25pp
The rubric grader's feedback was reasonable from the standpoint of "singability," "educational value," and so on (e.g. adding TPR action words to 01 ABC, removing the stray "and" in 02 Numbers). Even though the lyrics and structure should have improved, only the enumeration songs moved in the direction of being harder to hear. As of this writing (July 2026), ACE-Step 1.5 is a lyrics-to-song model: it renders the entire prompt (including the caption and structure tags) into audio in one shot, so even fixing just a part of the lyrics changes the acoustic realization of the whole generation (the stability of pronunciation) about as much as drawing a different seed would. Because a short string of enumerated symbols has no context to fill it in and is directly exposed to pronunciation wobble, one can hypothesize that this "seed wobble" is especially prone to translating straight into unintelligibility.
The data in this article is single-batch, in-house data with n=3 enumeration and n=4 non-enumeration, so it cannot be called statistically significant. That said, our own scoring records left, from the same batch, the lesson that "lyric revision (v2) and seed luck are independent — because clarity can drop even when the v2 lyrics are better, the correct approach is to not throw away the old version and to adopt the best take per song." This delta calculation came out consistent with that lesson.
Reproducible takeaways
- For songs containing enumeration-style lyrics (alphabet, numbers, days of the week, month names), prefer taking multiple different-seed takes under the same prompt, scoring them, and picking the best take — over fixing the prompt and rebuilding a single track. In this data, rewriting to reflect feedback was more likely than not to backfire.
- At the design stage, put the LMNOP countermeasures (changing the grouping, spelling numbers out in English,
A - B - Cseparators, syllable counts within ±1–2) into the very first prompt. It works better than fixing things after the fact. - Don't judge by match rate alone; record generation glitches (hallucinations, broken loops) separately from lyric-structure-derived variation. Jumping to "large range = bad lyrics," as here, would mistakenly turn a defective take like 07 Seasons into evidence for a design principle.
The concrete procedure for match-rate scoring with mlx-whisper (including the arm64-build pitfalls under uvx) is explained in the earlier article "Measuring the quality of local AI composition in numbers — a hands-on record of building a QA pipeline that scores lyric-match rates with mlx-whisper." This article focused on the design principles and on measuring the effect of regeneration.
Top comments (0)