01
One absolute target BPM
Type a number once, anything from 40 to 300. Every track — the one playing and every one after it — is stretched to that exact tempo. Clear the field and each track returns to its own.
Drop a folder of music, type the tempo your set runs at — 96, 124, 140, whatever it is — and the whole playlist plays at that one BPM, every track in its original key.
The target stays where you put it. The track changes, the tempo doesn’t.
You’re putting the list together, and every track raises the same question: does it hold up at the tempo you will actually play it at? Not the BPM it was recorded at — the one the set runs at. Today, finding out means a DAW, or a pitch fader and the arithmetic that comes with it.
⊺ Drop Audio Files Here (mp3 · wav · flac · m4a · ogg)
1Drop track here
2Change BPM
Space (hold)Play at the track’s original tempo
EnterPlay / Pause
← →Previous / Next track
Double-click a rowPlay that track
÷2 / ×2Halve / double the detected BPM
Click the waveformSeek
Media keys, dragging a row into Ableton and opening a folder from the Finder are the app’s, not the browser’s.The same time-stretching the Mac app uses, loaded straight into this page. Your files never leave it — they are decoded in the browser and nothing is uploaded. The demo takes up to eight files at 60 MB each; the app opens a whole folder.
01
Type a number once, anything from 40 to 300. Every track — the one playing and every one after it — is stretched to that exact tempo. Clear the field and each track returns to its own.
02
Time-stretching runs on a real-time audio worklet, so a track slowed from 143 to 124 keeps its original pitch. No chipmunks, no seasick detuning.
03
Each row takes the BPM written in the file’s tags — the number your library already agrees on. Only untagged files go to the detector, whose estimate is marked ~ so the two never get confused. If it lands an octave off, ÷2 and ×2 fix the row in one click.
04
Drop files on the window to add them. Pull a row back out and it lands in Finder or straight on an Ableton Live track, carrying the file’s own icon on the way. What leaves the window is the original file, at its original tempo — nothing is imported, nothing is written.
05
Press and hold to drop back to the track’s recorded tempo, release to snap back to target — the fastest way to check whether a stretch still sounds right. Media keys work system-wide, so play, pause and skip keep working while you’re teaching from another app.
06
Park the track your choreography is set to in the slot above the playlist and A/B against it with one key. It runs at the same target tempo and keeps its own position, so switching back and forth costs nothing.
Free. Tell me where to send it and the link is in your inbox a moment later.
To find out whether this is worth building further. I make it alone, and the honest signal is whether anyone will leave an address for it — if it is worth that to you, I know it is worth more of my weekends.
Two things go to that address: the download link, and a note when a version does something it genuinely could not do before. No drip campaign, no tips series, no “we miss you” — there is no time for any of it, and you did not ask for it. What counts as worth announcing is my call, which is exactly why every mail carries an unsubscribe link. One click, no questions asked. That one is a promise.
Not yet — this build is Apple Silicon only (M1 and later). If you need an Intel build, say so and it can be added.
No. Tempo and pitch are separated, so a track pulled from 143 to 124 BPM stays in its original key. Very large stretches will start to sound processed — that is physics, not a setting.
No. Tracks are read from wherever they live and played from there; nothing is copied, converted or re-tagged. The only exception is the trash button on a row, which you have to click yourself.
Only so the play, pause and next keys on your keyboard reach the app while another window is in front. Decline it and everything else keeps working.
The app checks for new versions on its own and installs them on restart.
hi@bpmplayer.com. I read it myself.
Send it to hi@bpmplayer.com. No promise that it gets built — the app is meant to stay small, and most of what it does not do, it does not do by accident. A good idea can still change my mind.