Audio tool · No upload

Slow down or speed up a song — and change its key, separately

Drop in your own audio and move the tempo and the pitch independently: slow a song down or speed it up without dropping the key, or change the key without changing the tempo. It is a music speed changer and a pitch shifter in one, and everything runs inside your browser — nothing is uploaded, and the network meter below proves the zero live.

Statusidle Files File Duration Sample rate Channels Pitch0 st Speed1.00× Reverbnone Output length Bitrate192 kbps Output size Network since file read
0 st

Two recipes these dials already make: 0.80× speed with hall reverb, or 1.25× speed with the pitch a few semitones up.

Time stretch 1.00× — nothing to process at 0 semitones, 1.00× speed and no reverb: the audio is decoded and re-encoded to MP3 unchanged.

How this tool works

When you choose a file, the browser's File API hands this page the bytes in memory — no transfer happens, because the file is already on your machine — and your browser decodes the audio itself. What happens next is written on this page and nowhere else. The samples are cut into overlapping 2048-sample frames, each frame goes through a fast Fourier transform written here, and the frames are laid back down further apart or closer together than they were picked up. That alone changes the length and leaves the pitch alone. Reading the stretched result faster or slower then moves the pitch and takes the length back to where you asked for it, and those two steps together are what make the pitch dial and the speed dial independent instead of one dial wearing two labels. Each spectral peak's phase is advanced by its own measured frequency and every bin around that peak is rotated by the same amount, which is what keeps a chord sounding like one chord rather than a smeared chorus of it.

There is no digital-signal-processing library on this page. The transform, the phase vocoder, the resampler and its anti-alias filter, and the reverb's comb and allpass delay lines are all written in the page's own JavaScript, which you can read in your browser's view-source. The one thing that ever downloads is the MP3 encoder — lamejs, a JavaScript port of the LAME encoder (LGPL) — and it arrives once, before any file of yours is read, so the network meter's zero is honest rather than decorative. You can run the strongest check yourself: let the encoder land, switch your wifi off, and convert something. It still works. All of that arithmetic happens on this page's own thread, so a full-length track takes real time rather than arriving instantly — the status line counts the percentage out as it goes, and the page keeps responding while it does. The methodology page covers the other verifications and publishes the encoder's license and provenance.

The honest limits, because this is a corner of the web that oversells. Pitch shifting of this kind is not transparent, and the cost was measured rather than described. A 2 ms percussive burst put through this page keeps over 99% of its energy inside a 5 ms window at any time stretch from 0.25× up to 1.50×, and loses about half of it at a 2.00× stretch — because a hit shorter than the 46 ms analysis window lands in several frames at once, and spreading those frames apart lays the hit down more than once. That is the whole reason the readout prints the time stretch your two settings add up to, and why the result row flags anything above 1.50×: half speed at unchanged pitch is a 2.00× stretch, and 0.80× speed is a 1.25× stretch. Sustained notes take a gentler penalty instead, a faint metallic colour that grows with distance from 1.00×. Formants move with the pitch, so voices change character; this is not a formant-preserving vocal shifter. Files longer than ten minutes are refused by name rather than attempted, because the whole track sits in your device's memory several times over. The output is MP3, which is lossy, so this is a re-encode and costs a generation of quality on top of whatever the processing did — and if the result would clip it is turned down, with the row naming the decibels rather than clipping quietly.

Frequently asked questions

Is my music uploaded anywhere?
No. Your browser opens the file with its File API and decodes it itself, and the pitch and speed work runs as JavaScript inside this tab — all in memory, on your device. The readout's network meter counts every request from the moment your file is read and stays at zero, and the methodology page shows how to verify that independently. The one thing this page ever downloads is the MP3 encoder, and it arrives before your file is read, which is what keeps that zero honest.
Can I change pitch without changing speed, or speed without changing pitch?
Yes — that is what this page is for. Speeding a track up in a media player moves both together, because it is only reading the samples faster. Here they are separate controls: set the pitch to +3 semitones and leave the speed at 1.00× and the track keeps its original length; set the speed to 0.80× and leave the pitch at 0 and it slows down in the original key. Setting both at once is fine too, and the readout prints the time stretch the pair adds up to.
How far can I shift it before it sounds bad?
The controls reach a full octave each way, -12 to +12 semitones, and 0.50× to 2.00× speed. What decides the damage is not either dial on its own but the time stretch the two add up to, which is printed under them — and the knee in it was measured rather than guessed. Put a 2 ms percussive burst through this page and under 1% of its energy spreads beyond a 5 ms window at any time stretch from 0.25× up to 1.50×; at a 2.00× stretch about half of it does. So compressing is clean and stretching past 1.50× is what costs you: half speed at unchanged pitch is a 2.00× stretch and will smear drum hits, while 0.80× speed is a 1.25× stretch and will not. Sustained notes are a separate and gentler story — they pick up a faint metallic colour that grows steadily with distance from 1.00×, plain at the 12-semitone ends and easy to miss within a few.
Why do voices change character when I shift the pitch?
Because this moves the whole spectrum, formants included. Formants are the fixed resonances of a throat or an instrument body; in a real singer they stay put while the note moves, and here they move with the note. That is why a large shift up sounds like a chipmunk and a large shift down sounds like a giant. It is a property of the method rather than a fault, and it is the reason this is not offered as a formant-preserving vocal shifter. Shifts of a semitone or two are far less obvious for the same reason.
Can I make a slowed-and-reverb style version?
Yes: set the speed to 0.80×, leave the pitch at 0 or drop it a semitone, and set the reverb to hall. The reverb here is synthesised from delay lines — a plain digital room, not a recording of a real hall — and it adds a tail past the end of the track, which the result row reports in seconds. If you want the older version of that sound, where slowing also drops the key, set the speed to 0.80× and the pitch to -4 semitones, which is roughly what a tape machine did.

Related tools