Playback-rate resampling is the method this audio pitch changer uses to shift pitch in a browser — the same calculation that turns an octave into a 2× or 0.5× playback rate, expressed as rate = 2^(semitones/12). The accepted range is -12 to +12 semitones, so the tool spans a full octave down and a full octave up and produces one final file rendered entirely in your current tab as a new uncompressed PCM16 WAV, with no upload of the source audio. Because pitch is changed by changing the playback rate instead of by re-mapping harmonic structure, duration also changes with the same factor — raising pitch makes the track shorter and faster, and lowering pitch makes it longer and slower. The math comes from twelve-tone equal temperament, which is also how the Web Audio spec describes detuning under the hood, so the behavior is consistent across browsers rather than being a quirk of any one engine.

What Audio Pitch Changer Does in the Browser
This browser-based Audio Pitch Changer raises or lowers the perceived pitch of a single audio file in whole-semitone steps from -12 to +12, and it does that with playback-rate resampling rather than with a time-stretching algorithm. When you set a target semitone count, the tool converts that integer into a playback rate using the equal-temperament relationship rate = 2^(semitones/12), then renders the entire file through an OfflineAudioContext at the decoded sample rate. The output is a brand-new uncompressed PCM16 RIFF/WAVE file that the browser encodes on the fly, so there is no source file to re-wrap and no intermediate format to keep around. Everything — decoding, resampling, mixing, and WAV writing — happens inside the current tab on your own computer, which is why the product contract makes a point of stating that no source audio or rendered audio is uploaded to Lizely. That local-only handling is worth keeping in mind when you compare this tool with cloud pitch services that stream your file somewhere else, because it also restricts the supported input formats to whatever your specific browser can decode today.
Semitones, Octaves, and the 2^(n/12) Relationship
A semitone is the smallest interval in standard twelve-tone equal temperament, and there are exactly twelve equal semitones in one octave. According to McGill University's MIDI/frequency reference, each semitone corresponds to a frequency ratio of 2^(1/12), and there are 100 cents inside one semitone. The W3C Web Audio API uses that same cents-to-rate relationship when an AudioBufferSourceNode applies detune: detuning by a value of cents contributes a factor of 2^(detune/1200) to the playback rate. The shift values you set in this tool are simply semitones, so the same formula collapses to rate = 2^(semitones/12), giving the anchor points in the table below. Because the rate only depends on the shift, the duration change is the inverse of the rate — a 2× rate produces roughly half-duration audio, and a 0.5× rate produces roughly twice the duration.
| Semitone shift | Playback rate | Approximate duration change |
|---|---|---|
| -12 (one octave down) | 0.5× | Roughly twice the original |
| -1 | 2^(-1/12) ≈ 0.944× | Slightly longer |
| 0 (no change) | 1× | Unchanged |
| +1 | 2^(1/12) ≈ 1.059× | Slightly shorter |
| +12 (one octave up) | 2× | Roughly half the original |
The contract for this build spells out the endpoints explicitly: +12 raises the material by exactly one octave, -12 lowers it by one octave, and 0 keeps the original pitch. Intermediate values move in equal-temperament steps on the same scale, which is why every positive or negative shift you set maps to a single playback-rate multiplier with no rounding or curve of its own.
Why Pitch and Duration Move Together
If you want pitch without a duration change you actually need a phase vocoder or another time-stretching workflow, because the Web Audio playbackRate property that this tool is built around couples the two together. MDN documents playbackRate as a proportion of the original sampling rate: values below 1 slow the audio down and lengthen it, values above 1 speed it up and shorten it, and any non-unit value causes the source to be resampled. This is the same mechanic behind the W3C detune specification, where detuning both shifts pitch and rescales time through the 2^(detune/1200) factor, so the side effect is structural rather than incidental.
The trade-off is intentional and known: this audio pitch changer is positioned for quick creative transposition, sound-design sketches, ear-training material, and rough edits — not for transparent mastering where the tempo must remain locked. Strong upward shifts in particular can surface aliasing or codec artifacts that were less obvious in the source, because resampling at 2× essentially halves the effective headroom for high-frequency content. None of this is a defect — it is just the boundary of what playback-rate resampling can deliver in a browser, and the tool never claims to preserve tempo, speech cadence, beat positions, or exact original duration.
How to Shift Pitch Locally with Audio Pitch Changer
This is the operating flow supported by the current build of the audio pitch changer.
- Choose one audio file that your browser can decode directly — common formats include MP3, WAV, M4A, AAC, Ogg, WebM, and FLAC — and confirm its size is at or under 50 MiB. Actual codec support still depends on the specific browser you are using, so a recognized extension does not guarantee that every unusual codec profile will decode.
- Set a whole-number pitch shift in the range -12 to +12 semitones. Use the integer that matches what you want to hear: positive raises the pitch, negative lowers it, and zero keeps the original pitch. Remember that the same setting also rescales duration, because pitch and time move together in playback-rate resampling.
- Create the complete local render, let the tool report the stated duration change, then download the finished uncompressed PCM16 WAV from the result.
Step two is the one to slow down on. Positive semitones double the rate every twelve steps, so a +12 shift doubles the speed and a -12 shift halves the speed, while single semitones only nudge the rate by roughly six percent in either direction. If your source is a short loop or a sustained note, that one-semitone movement is a useful test before committing to a larger jump. If you want a perfect fourth up, enter +5; if you want a perfect fifth down, enter -7. The tool simply maps whatever integer you supply through the same formula.
Limits That Decide Whether the Render Succeeds
The product contract makes a point of stating its limits up front and of returning a single error with no download when any of them is breached, which is worth knowing before you feed in long files.
| Limit | Value | Where it applies |
|---|---|---|
| Maximum input file size | 50 MiB | Encoded file before decoding |
| Maximum decoded duration | 5 minutes | Decoded audio |
| Maximum decoded channels | 8 channels | Decoded audio |
| Sample rate range | 8,000 – 192,000 Hz | Decoded audio |
| Input sample budget | 30 million channel samples | Decoded stage |
| Output sample budget | 30 million channel samples | Pitch-shifted output |
The 30-million-channel-sample output budget is the most often-overlooked constraint for negative shifts. Lowering pitch increases the required output frames — that is what makes the track longer — so an input that passes the decoded-side limit can still fail the output-side limit when you push toward -12 semitones. In that case the message states that the requested shift is over budget and that nothing was truncated. Empty files, unsupported input types, invalid decoded dimensions, and failed decodes are rejected up front before any expensive output work begins, and every input or semitone change invalidates the previous result so a stale render cannot overwrite a fresher one. There is no silent tail cut and no hidden duration cap: if a budget is exceeded, you simply do not get a file.
What the Downloaded WAV Actually Contains
The file you save is a freshly encoded uncompressed PCM16 RIFF/WAVE stream, written interleaved and little-endian. Floating-point samples are clipped to the -1 through +1 interval before conversion to 16-bit integers, which matches the legal range for that format but does mean PCM16 quantization can differ from the decoded floating-point source. The export is a new file, not a re-wrap of the original container, so any source codec, compression quality, bitrate, ID3 tags, artwork, chapters, cue points, loop points, and other container metadata are not preserved. Browser resampling quality is implementation-defined, which is part of why the output is recommended for practice tracks, sound effects, and rough editing instead of a finished master. The page intentionally does not create a blob-backed audio preview because the site media policy disallows that preview path, so the right way to hear the result is to download the WAV and play it in a trusted local player. If you need transparent, tempo-locked pitch shifting, plan to use a dedicated phase-vocoder or time-stretching tool elsewhere in your pipeline — this Audio Pitch Changer purposely does not promise that.
With the math and the local-only pipeline clear, the next step is to actually try a shift. Open the audio pitch changer, pick a semitone value, and compare the rendered WAV against your source to get a feel for how much change each step introduces.