Blog

My ears were right, my word was wrong

  • AI music
  • measurement

Suno replaced its models this week. The old ones are simply gone — you cannot select v5.5 any more — so every prompt I had tuned over months now runs on v6 whether I like it or not.

My first impression, after four songs: flat.

That is a terrible word. It is also the only one I had, and it turned out to be pointing at something real while describing it incorrectly. This is the story of finding out what my ears had actually noticed, which took about twenty minutes of measurement and three wrong guesses — all of them mine.

Guess number one: they squashed it

"Flat" in music production almost always means compressed. Modern masters are famously squeezed until the quiet parts are nearly as loud as the loud parts, everything sitting in a thick unmoving slab. If a new model sounded flat, obviously it had been mastered louder and harder.

So I measured. Same song, same prompt, one rendered on the old model and one on v6.

Four numbers matter here, and they are worth explaining because they come up constantly:

  • LUFSLoudness Units Full Scale, the standard for perceived loudness. Not how tall the waveform looks, but how loud a human says it is. Streaming services normalise to around −14 LUFS, which is why your playlist does not leap in volume between tracks.
  • True peak — the loudest instantaneous moment, in dBFS (decibels relative to the maximum a digital file can hold). 0 dBFS is the ceiling; go past it and you get distortion.
  • LRALoudness Range. How much the loudness varies across the whole song. A hymn that swells and recedes has a big LRA; a wall of noise has a small one.
  • Crest factor — the ratio between peak and average level. This is the closest thing to a single number for punch. A drum hit that jumps far above the surrounding level gives a high crest factor; compression flattens that difference.

Here is what came back for the first pair:

old model v6
Loudness (LUFS) −14.0 −15.5
True peak (dBFS) −3.0 −0.4
Loudness range (LU) 2.9 3.4
Crest factor 4.81 7.71

Every one of those says the opposite of my theory. The new file is quieter, has a wider loudness range, and a crest factor more than half again as large. It is not compressed. It is measurably more dynamic than the thing I was comparing it to.

First guess dead. And usefully dead — an idea that survives a test tells you little, an idea that dies tells you where not to look.

Guess number two: it must be the spectrum

If the dynamics were fine, the difference had to be tonal. So I split both files into frequency bands and measured the energy in each.

One methodological point, because it is the step people skip: you have to normalise first. The v6 file is 1.5 dB quieter overall, so every band would read lower simply because the whole file is lower. Comparing raw numbers would have "discovered" that v6 has less of everything. Instead I measured each band relative to that file's own average level, which asks the only interesting question: not how much is there, but how it is distributed.

The first pair looked like this — decibels relative to each file's own average, and the last column is the change:

Band old v6 Δ
below 100 Hz −5.1 −7.4 −2.3
100–400 Hz −6.1 −6.5 −0.4
400 Hz – 2 kHz −4.8 −3.1 +1.7
2–6 kHz −9.7 −10.6 −0.9
6–12 kHz −18.1 −20.8 −2.7
above 12 kHz −23.9 −25.0 −1.1

I had my answer, and I wrote it down with some satisfaction: v6 is mid-forward. More energy in the 400 Hz–2 kHz region, where every instrument overlaps and fights for room, and less up top. Congested. Case closed.

Guess number three, or: one sample is not a finding

It is a little embarrassing how quickly I was ready to publish that. Two songs are not a study, but one song is not even an observation. So I ran the same measurement on a second pair.

Band old v6 Δ
below 100 Hz −25.0 −28.3 −3.3
100–400 Hz −24.0 −24.0 0.0
400 Hz – 2 kHz −21.6 −22.2 −0.6
2–6 kHz −26.3 −29.8 −3.5
6–12 kHz −33.6 −39.3 −5.7
above 12 kHz −40.8 −46.6 −5.8

The mid boost did not replicate. In the second pair the mids went down slightly. My elegant explanation had been built on a single measurement, and that measurement was partly describing the arrangement of one particular song rather than anything about the model.

What did replicate, in both pairs and in the same direction:

  • treble down — 6–12 kHz lost 2.7 dB in one pair and 5.7 dB in the other
  • air down — everything above 12 kHz, same story
  • sub down — 2 to 3 dB less below 100 Hz
  • stereo wider — the side channel gained 3 to 5 dB relative to the centre
  • more dynamic — crest factor up in both, loudness range up in both
  • quieter — about 1.5 LUFS in both

So the honest summary is: v6 is darker, thinner underneath, wider, quieter and more dynamic than the model it replaced. Not flatter. Darker.

The commands, if you want to run this yourself

Everything above came from ffmpeg, which is free, runs everywhere, and needs no project or session — you point it at a file and read the numbers it prints. In all of these, -f null - means "analyse but do not write an output file".

Loudness, loudness range and true peak — the first table:

ffmpeg -i "song.wav" -af ebur128=peak=true -f null -

Read the summary block at the end: I: is the integrated loudness in LUFS, LRA: the loudness range, and Peak: the true peak in dBFS.

Crest factor and average level:

ffmpeg -i "song.wav" -af astats -f null -

This prints a lot. The lines that matter are Crest factor and, in the Overall section at the bottom, RMS level dB — that second number is the file's average level, which you need for the next step.

Energy in one frequency band:

ffmpeg -i "song.wav" -af "highpass=f=6000,lowpass=f=12000,volumedetect" -f null -

highpass throws away everything below 6 kHz, lowpass everything above 12 kHz, and volumedetect measures what is left. Read the mean_volume line. Change the two frequencies and repeat for each band: below 100, 100–400, 400–2000, 2000–6000, 6000–12000, and above 12000 (for that last one, use highpass=f=12000 alone).

Then normalise. Subtract the file's RMS level dB from each band figure. A band reading −34.8 dB in a file whose overall level is −16.7 dB becomes −18.1 dB relative, and that relative number is the only one you can fairly compare against another file.

Stereo width — how much of the sound is off-centre:

ffmpeg -i "song.wav" -af "pan=mono|c0=0.5*c0-0.5*c1,volumedetect" -f null -   # side
ffmpeg -i "song.wav" -af "pan=mono|c0=0.5*c0+0.5*c1,volumedetect" -f null -   # mid

Subtracting the right channel from the left leaves only what differs between them — the side signal, everything that is not dead centre. Adding them leaves the mid. The gap between those two numbers is a decent proxy for width: a mono file has no side signal at all, and the smaller the gap, the wider the mix.

Why darker feels like "blurry"

Here is the part I find genuinely interesting, and it is why the ear was right even when the word was wrong.

Someone I was comparing notes with put it better than I did. He did not say flat, he said the instruments used to be more separated. That turns out to be the technically correct description, and there is a mechanism behind it.

The band that lost the most energy — roughly 4 to 12 kHz — is where a particular class of sound lives:

  • consonants in a vocal (s, t, k, sh): about 4–8 kHz
  • the rasp of a reed or a brass instrument: 3–8 kHz
  • bow noise, pick attack, fingers moving on strings: 5–10 kHz
  • the edge and shimmer of a cymbal: 8–15 kHz

Notice what those have in common. They are not the notes. They are the onsets — the brief burst of noise at the moment a sound begins.

Human hearing separates simultaneous sources largely by those onsets. The auditory system groups sound into "things" by finding events that start together and share a common attack. Take several decibels out of that band and the onsets soften; sources stop being individuated and begin to merge. You lose the outlines before you lose the content.

Which is how a mix can become wider and blurrier at the same time — a contradiction only until you separate the two ideas. Stereo width tells you how far apart things are placed. Transient detail tells you how sharply each one is drawn. v6 moved the instruments further apart and drew them with a softer pencil.

Putting it back

The good news, and the reason it is worth measuring rather than just complaining: this is a balance problem, not a bandwidth problem. I checked the content above 16 kHz and it is present at the same relative level in both files. Nothing is missing. It is simply turned down.

That is fixable with an equaliser, and specifically with a shelving filter — a filter that lifts or cuts everything past a corner frequency by a fixed amount, with a smooth ramp through the corner. A high shelf at 6 kHz with +4 dB means: nothing changes in the mids, the curve ramps up through 6 kHz, and everything above sits 4 dB louder.

The whole correction is two shelves:

ffmpeg -i "in.wav" -af "lowshelf=f=100:g=2,highshelf=f=6000:g=4,loudnorm=I=-14:TP=-1,aresample=48000" -ar 48000 -c:a pcm_f32le "out.wav"

Reading that left to right: lift the bottom below 100 Hz by 2 dB, lift the top above 6 kHz by 4 dB, then normalise the whole thing to −14 LUFS while holding true peak below −1 dBFS so nothing clips.

The tail of that line looks like clutter and is not. loudnorm upsamples to 192 kHz internally — it needs the extra resolution to catch peaks that happen between samples — and then leaves the output there. At the same time the WAV writer defaults to 16-bit whatever you fed it. Run the command without those last three arguments on a 48 kHz float file and you get a 192 kHz 16-bit file: four times the samples at half the depth, so exactly double the size. I only noticed because doubling is such a suspiciously round number.

In Audacity the same move is Effect ▸ EQ and Filters ▸ Graphic EQ with the sliders at 63 Hz +2, 100 Hz +2, 125 Hz +1, everything from 250 Hz to 4 kHz at 0, then +3 at 6.3 kHz and +4 from 8 kHz upward. That slider list is the two shelves, hand-plotted onto a fixed frequency grid — the +3 is the ramp through the corner, the +4 is the plateau.

Two traps worth knowing, both of which I walked into:

Headroom. The v6 files peak at −0.4 dBFS. Boost 4 dB of treble onto a file sitting that close to the ceiling and you clip. In Audacity, drop the level by 4 dB before the EQ and restore it afterwards with Loudness Normalization. The ffmpeg version handles this internally, which is why it needs one step fewer.

Level matching. Louder always sounds better. If you A/B two versions at different volumes you will pick the louder one every time and invent a reason afterwards. Normalise both to the same LUFS before trusting a single word your ears tell you.

What I would take from this

The ear detected something real in about ten seconds. It also mislabelled it, and then I built a confident theory on one sample and watched it evaporate against a second.

Which is roughly the right division of labour. Ears are excellent detectors and poor diagnosticians. They tell you instantly that something changed, and they hand you the wrong word for it — flat, muddy, thin, harsh — words that feel precise and point at four different frequency ranges depending on who is saying them.

The measurements told me nothing my ears had not already noticed. They told me what my ears had noticed, in terms specific enough to fix.

Two pairs of songs is still not a study. If you run the same test on your own files and the numbers disagree with mine, I would genuinely like to know.