How to Generate a Rhythm-Game Beat Config From Any MP3
If you're trying to add a custom song to a rhythm game — say, the popular disco-themed dance title on Steam — the hardest part isn't getting the MP3 in. It's producing a beat configuration file that the game can actually follow: tempo in BPM, the location of the first beat, and any places where the song speeds up or slows down. Doing this by hand with a stopwatch and a DAW is fiddly. TempoFlow does it automatically and lets you fix anything the algorithm gets wrong.
This guide walks through the whole flow, from upload to a usable JSON file, and explains the manual adjustments that fix the common edge cases.
Why BPM and beat data matter for rhythm games
Rhythm games schedule prompts (notes, taps, dance moves) on the beats of a song. To do that they need to know when each beat happens — not approximately, but to the millisecond. A beat configuration is just a description of that beat grid: a tempo, a phase offset, and a list of tempo sections if the song doesn't keep one constant tempo throughout.
Get the beat grid wrong and the game's prompts will drift away from the music. Get it right and the song feels like it was made for the game.
The three numbers a beat config needs
Almost every rhythm-game beat configuration is built from three values:
- BPM (beats per minute) — how fast the song's beats are. A 4-on-the-floor disco track is usually 120 BPM. A drum-and-bass track is around 174 BPM.
- Beat offset (ms) — the time from the start of the
audio file to the first beat, expressed as a phase relative to the
beat period. If your BPM is 120, the beat period is 500 ms, so a
valid beat offset lives in the range
0 ≤ offset < 500. - Tempo sections — a list of points where the BPM changes, with each entry having a start time and a new BPM. For a song with constant tempo this list is empty.
Once you have these three values dialed in, the beat grid will line up with the music for the entire song.
Step-by-step: from MP3 to JSON
1. Upload the file
Open the TempoFlow tool and drop your MP3 onto the upload area, or click to browse. The file is sent to the analysis API for processing — it isn't stored anywhere afterward, and there's no signup.
2. Read the analysis result
Within a few seconds the tool returns a waveform with vertical pink beat lines and yellow boundary handles where it thinks tempo changes happen. Below the waveform you'll see a list of tempo sections, each with its detected BPM and offset.
For most pop, EDM, rock, and disco tracks, this first pass is already accurate enough that you can stop here, click Download JSON, and you're done.
3. Verify on the waveform
Even when the numbers are correct, take 10 seconds to glance at the waveform. The pink beat lines should sit directly on top of the obvious drum hits. If they're off by a fraction of a beat all the way through, you have an offset problem (easy fix). If they're aligned at the start but drift apart later, you have a BPM problem (also easy fix). If they drift suddenly at one spot, the song probably has a tempo change at that point.
Fine-tuning by hand: four common fixes
Auto-detection is good but not infallible. These four manual operations cover almost every correction you'll ever need.
Fix 1 — wrong by half or double (×½ / ×2)
Sometimes the algorithm picks up the half-time pulse (e.g., reports 84 when the song is 168) or the double-time hi-hat (e.g., 240 when the song is 120). Each section row has ×½ and ×2 buttons next to the BPM input. Click whichever ratio gets you closer to a reasonable, integer value. The tool re-normalizes the offset automatically.
Fix 2 — beats are off by a constant amount (offset)
If the beat lines are visually off by a small constant amount, hold the mouse middle button (or Option + drag on Mac) on the waveform and drag horizontally. All beat lines slide as one. Watch the waveform: when the beat lines snap onto the kick-drum hits, release. The OFFSET(MS) field in the section list updates with the new value when you let go.
Fix 3 — tempo shift in the middle of the song
If the algorithm missed a tempo change, click + Add Section at the bottom of the list. A new section appears starting after the previous one. Drag the yellow handle on the waveform to position the boundary right at the change point, then type the new BPM into the section's BPM field.
Fix 4 — small BPM error (e.g., 119 instead of 120)
Live recordings and acoustic tracks often produce a non-integer estimate. Type the integer you expect (most produced music uses round numbers like 80, 90, 100, 120, 128, 140, 174). The grid recomputes instantly so you can see whether the new BPM holds across the whole section.
Verifying with the metronome click
Visual alignment is one signal; the other is your ears. Click the speaker icon on the player. With the metronome on, the tool plays a short click on every detected beat as the song plays. If the click sits on the kick drum or the snare like a tight hi-hat, the grid is correct. If it lags or leads consistently, edit the offset until it locks in. If it lags or leads only in one section, edit that section's BPM.
Doing both — looking at the waveform and listening to the click — is the fastest way to catch errors that look right but sound wrong (or vice versa).
Exporting and using the JSON
Once you're satisfied, click Download JSON. The file looks roughly like this:
{
"version": 1,
"songName": "my_song",
"tempo": 120,
"beatOffset": 84,
"customTempoSections": [
{ "tempo": 120, "startAbsoluteTime": 0, "beatOffset": 84 },
{ "tempo": 140, "startAbsoluteTime": 92.5, "beatOffset": 0 }
],
"startSongOffset": 0,
"endSongOffset": 0
} For rhythm-game tools that consume per-section beat data, this file drops directly into whatever folder your target tool reads from. For custom-song flows on disco-themed dance games and similar titles, place the JSON alongside the audio file in the game's user content directory (consult your game's wiki or community guide for the exact path — it changes between titles).
Troubleshooting
"All beats look great except in the chorus."
Add a tempo section right at the chorus boundary. Ninety percent of pop songs are not perfectly rigid in tempo, even when they sound like it on first listen.
"BPM detected as 90 but song feels like 180."
Click ×2. Half-time detection is the most common false result, especially for downtempo, dub, and trap.
"Beats are perfect at the start but drift by the end."
The BPM is wrong by a fraction. Try a value 0.5 higher or lower. If the drift is large, try ±1.0.
"There's a long intro before the first beat."
That's exactly what beat offset is for. Drag the offset until the first beat line lands on the first audible kick.
Wrap-up
A rhythm-game beat configuration is just three numbers per section: BPM, offset, and the start time. TempoFlow gives you all of them in a few seconds and lets you correct anything the algorithm misses with a visual editor and an audible click track. Once the JSON is downloaded, you can repeat this for any song you like.
If the algorithm trips up on a track you'd expect it to handle, please let us know via the contact page — real-world failure cases are how the detector gets better.