FALSETTO.

Software that tells AI-generated music apart from music played by people, by listening to how the whole song is put together. I rebuilt it from scratch from two research papers.

Reproducing two papers by Yumin Kim and Seonghyeon Go (MIPPIA):

  1. Segment Transformer AI-Generated Music Detection via Music Structural Analysis arXiv:2509.08283
  2. Fusion Segment Transformer Bi-Directional Attention Guided Fusion Network arXiv:2601.13647

This reproduction's source code: github.com/arnavmahadev/Falsetto

What this is

Play someone ten seconds of AI-generated music and they probably won't spot it. The models got good. But play them the whole song and something starts to feel off, even if they can't say what.

Here's what it is. Real music comes back to itself. A chorus returns, a verse answers the one before it, and by the end the song has a shape you could draw. A lot of generated music just keeps going. It sounds fine bar to bar and never quite adds up to anything. Two researchers, Yumin Kim and Seonghyeon Go, noticed you could build a detector out of exactly that, and wrote it up in the two papers linked above.

Their trick is to stop asking what the music sounds like and start asking how it's put together. Cut the song into chunks, compare every chunk with every other chunk, and look at the pattern that falls out. Songs that mean something leave a pattern. Songs that wander don't.

I built the whole thing again from scratch, working only from the papers, because reading a method and actually making it run are very different things. This page is my honest account of how that went: what they found, what I built, what I measured, and where the line between their work and mine sits. I've kept their numbers and my numbers firmly apart, because muddling the two would be the easiest way to make this look better than it is.

How it works

It works in two passes, the same way the papers lay it out. The first one listens to small pieces of the song. The second one steps back and looks at how those pieces fit together. The second pass is where the interesting part happens, but it can't work without the first.

Pass 1: listen to a piece

Judging a few seconds at a time

A short clip goes into a model that has already learned a lot about music, and comes out as a list of numbers summarising what it sounds like. A small classifier then guesses: human or machine? On its own this is the easy, fool-able version. It's the raw material for the second pass. Of the four such models I tried, the one called MERT summarised music best.

a few seconds of audioMERTa summary of the sounda guess
Pass 2: look at the whole song

Judging the shape of the piece

The song is cut into chunks on the beat, four bars each, and every chunk is summarised by Pass 1. Then each chunk is compared against every other chunk to build a grid of what-sounds-like-what. Real music lights that grid up in repeating patterns, because it genuinely returns to earlier ideas. The final model reads both the sound itself and that grid of repetition, and weighs how much to trust each one.

chunks on the beatgrid of repetitionsound + shape togetherhuman or AI

What the original authors found

Everything in this section is the original authors' published results, not mine. I'm showing them because they're what my rebuild is aiming at.

The short version: methods that pay attention to the shape of a whole song beat the ones that just stare at a picture of the sound. The older approaches in the table below treat audio like an image and look for visual artefacts. They do well. The structure-aware methods do better, and by a margin that's hard to dismiss.

How to read the numbers. All of them run from 0 to 1, and higher is better. Accuracy is simply how often the detector was right. F1 balances two ways of being wrong: missing a fake, and crying wolf on a real song. AUC asks whether the detector ranks fakes above real tracks; 0.5 is a coin flip and 1.0 is perfect. Scores this close to 1.0 mean these detectors were nearly always right on the data they were tested on.

Full-audio detection on SONICS · F1 by method
Baseline Structure-aware
F1 on SONICS full-audio detection. Baselines (ViT, EfficientViT, ConvNeXt, SpecTTTra-α) and the Segment Transformer (MERT) from arXiv:2509.08283 Table 3; the Fusion Segment Transformer (MERT) from arXiv:2601.13647. Axis truncated at 0.85 to resolve the near-saturated top scores. These are dots, not bars, so length is never read as magnitude from zero.
Detecting AI in full-length songs · the authors' published results · arXiv:2601.13647
MethodAccuracyF1AUC
Baselines · spectrogram / vision
ViTnot reported0.89not reported
EfficientViTnot reported0.95not reported
ConvNeXtnot reported0.96not reported
SpecTTTra-αSONICSnot reported0.97not reported
Structure-aware · MERT encoder
Segment Transformer0.99920.99920.9999
Fusion Segment Transformer0.99990.99990.9999

“Not reported” means exactly that: the paper those baselines come from only published an F1 score, so there is no accuracy or AUC figure to quote. I've left the gaps rather than fill them with guesses.

Judging short clips · which sound-summariser works best · arXiv:2509.08283
MethodFakeMusicCaps · F1SONICS · F1AUC
Baselines
MobileNet0.968not reportednot reported
ResNet180.924not reportednot reported
Segment encoders
Wav2Vec 2.00.9880.9950.944
Music2vec0.9520.9970.937
MERT0.9960.9970.998
FXencoder0.9130.9660.924
Holding up on unfamiliar music · the harder AIME test set · arXiv:2601.13647
Method (MERT)AccuracyF1AUC
MERT standalone0.97080.98590.9939
Segment Transformer0.98580.98590.9992
Fusion Segment Transformer0.98670.98680.9995

What I measured myself

This is my own result, on my own smaller test. I trained the first pass on a free cloud GPU and then tested it on music it had never heard: 120 real recordings and 120 tracks made by an AI generator called MusicGen, split so nothing from training leaked into the test.

It got 0.875 right, and scored 0.972 on AUC. What that tells you is that the thing I built genuinely learns and genuinely separates real music from generated music. What it does not tell you is that I've matched the papers. Their numbers come from enormous datasets I'd need special access and a much longer GPU run to use. Mine is the smaller, honest version: proof the machine works, not proof it wins.

0.875Accuracy
0.972AUC
0.880F1
0.846Precision
0.917Recall
0.833Specificity
pred realpred AI true real102 true AI111
Every clip in my 24-track test, and what my detector called it. The two diagonal boxes are the ones it got right; the other two are its three mistakes.

What I built

Every piece of the system described in the two papers, written from scratch and covered by 56 automated tests that check it does what it should:

  • All four sound-summarisers the papers compare: MERT, Wav2Vec2, Music2vec, and FXencoder
  • Both passes of the detector: the short-clip judge feeding the whole-song Segment Transformer
  • The Fusion model, the second paper's main contribution, which learns how much to trust the sound versus the shape for each chunk of a song
  • The machinery around it: finding the beat, cutting songs into four-bar chunks, and building the grid of repetition
  • Training, testing, running it on a new song, and a command-line tool to drive all of it

What the detector actually sees

This is the heart of the idea, and you can see it with your own eyes. Each square below is one song, cut into chunks. Every chunk is compared with every other chunk, and the result is painted as a grid: dark where two chunks sound alike, pale where they don't. The line down the middle is just every chunk matching itself.

Look at the difference. Brahms is full of dark patches away from that centre line, because the piece keeps coming back to ideas it played earlier. The noise on the right has none of that: it's a scatter, because nothing in it ever returns. That is the whole signal the detector is built on. Both grids were computed by my code, on the real audio.

dissimilarsimilar

The same test, on every clip

Rather than show you two flattering examples, here is every clip I ran through it. The top row is music that genuinely holds together: real recordings, plus one deliberately repetitive synthetic loop. The bottom row is audio built to wander, ending with pure noise. The percentage under each is my detector's answer to one question: how much structure is in this?

Nothing here is hand-picked or hand-tuned, and the percentages are recomputed straight from the code by a script, so this page can't quietly disagree with what my software actually does.

Music that should hold together

Audio that should wander

dissimilarsimilar