How to view your audio's frequency spectrum — in-browser fft
- Step 1Load the file you want to inspect — Drop in an MP3, WAV, FLAC, M4A, OGG, Opus, AIFF or WebM file. The browser decodes it and the analyzer down-mixes to mono before the FFT, so what you view is the summed frequency content of all channels.
- Step 2Decide what you're looking for, then pick FFT size — Looking for harmonic/tonal detail (which note, which resonance)? Use 4096 or 8192. Looking at rhythm and transients (drum hits, plosives)? Use 512 or 1024. Unsure? Leave it at 2048 — it balances both.
- Step 3Make the image tall enough to read pitch — Height controls the log-frequency axis resolution. 480 (default) is readable; bump to 720–1080 when you want to distinguish closely spaced bands. Width controls how much time detail you keep — 1280 is fine for a whole song, wider for a short clip you want to inspect closely.
- Step 4Render and read the axes — Run the tool. In the image, bottom = 20 Hz, top = Nyquist (e.g. 22,050 Hz for a 44.1 kHz file), left = start, right = end. Yellow = loudest, purple = ~80 dB quieter.
- Step 5Interpret problem regions against the axis — A bright band low down and wide = low-mid build-up (mud/box). A sudden brightness around 6–10 kHz = sibilance/harshness. A hard ceiling where everything goes dark above ~16 kHz on a 'CD-quality' file = the source was upsampled from a lossy original.
- Step 6Export PNG or JPG for your notes — PNG keeps every pixel for zooming; JPG (with the 0–1 quality slider) makes a compact image for a mixing journal or feedback thread. The download is named
yourfile-spectrum.pngor.jpg.
How to read the spectrogram axes
The mapping is fixed in the engine. Use this to interpret any image the tool produces.
| Axis / element | What it represents | Detail |
|---|---|---|
| X (horizontal) | Time, start → end | The whole file is compressed to fit the chosen width |
| Y (vertical) | Frequency, 20 Hz (bottom) → Nyquist (top) | Logarithmic — equal octaves take equal vertical space |
| Colour brightness | Magnitude in dB, relative to the file's peak | Yellow = loudest; purple = ~80 dB below peak |
| Top of image | Sample-rate ÷ 2 | 22,050 Hz for 44.1 kHz; 24,000 Hz for 48 kHz |
| Vertical brightness band | Sustained energy at a frequency range | Wide low band = mud; thin bright line = a tone/whistle |
FFT size vs what you can see
Frequency resolution and time resolution trade off against each other; larger FFT = better pitch detail, worse transient detail.
| FFT size | Best for | Trade-off |
|---|---|---|
| 512 | Drums, plosives, clicks — sharp time detail | Coarse pitch; harmonics blur together |
| 1024 | Speech rhythm, percussive mixes | Still limited low-frequency separation |
| 2048 (default) | General music and voice — balanced view | The all-round compromise |
| 4096 | Tonal/harmonic analysis, finding resonances | Transients smear horizontally |
| 8192 | Closely spaced harmonics, sustained notes | Fast events become hard to localise in time |
Common patterns and what they mean
A field guide to shapes you'll see when viewing a frequency spectrum.
| Pattern in the image | Likely cause | Next step |
|---|---|---|
| Bright wide band ~150–500 Hz | Low-mid build-up (mud / box) | Narrow EQ cut; analyse before/after with this tool |
| Sharp dark ceiling ~16 kHz | Source was lossy (MP3/AAC) upsampled | Treat as lossy origin; don't expect 'air' to return |
| Bright patch 6–10 kHz on vocals | Sibilance / harshness | Try the de-esser sibling tool |
| Thin horizontal line that never moves | Steady tone — mains hum or whine | Often 50/60 Hz or a harmonic; notch it |
| Everything purple, near the bottom | Silence or very low level | Normalised to peak; there's little signal to show |
Cookbook
Recipes for actually viewing and interpreting the frequency content of a mix, recording, or sample.
Diagnosing a 'muddy' mix
You think the mix is muddy but want proof before reaching for EQ. Render at the default and look for a fat bright band in the low-mids.
Settings: FFT 2048 · 1280 × 720 · PNG
Look at: 150–500 Hz region (lower third of the image)
Reading: a continuous bright horizontal band there = mud.
Compare against the rest of the spectrum's
brightness to judge how much it dominates.Checking if a 'lossless' file is really lossless
A FLAC or WAV that came from a lossy source has a tell-tale brick wall. View the very top of the spectrum.
Settings: FFT 4096 · 1920 × 1080 · PNG
Look at: the top edge of the image
Reading: real lossless content fades gradually toward
Nyquist. A razor-sharp dark cutoff around
16–17 kHz means it was transcoded from MP3/AAC.Finding a steady hum or whine
A constant electrical tone shows as a perfectly horizontal line. Use a tall image to pin its frequency.
Settings: FFT 8192 · 1280 × 1080 · PNG
Look for: a thin unmoving horizontal line low in the image
Reading: estimate its frequency off the log axis (often
50/60 Hz mains hum or a harmonic). Then notch it
in your EQ and re-render to confirm it's gone.Before/after EQ comparison
Because renders are deterministic, two spectrograms with identical settings are directly comparable side by side.
1. Render the original: FFT 2048 · 1280 × 480 · PNG 2. Apply your EQ in a DAW, export 3. Render the edited file with the SAME settings 4. Place the two images side by side — the cut/boost shows as a darker/brighter region in the second.
Spotting harshness on a vocal
Sibilance and harshness cluster in the upper-mid/high range. View the upper third with a mid FFT size.
Settings: FFT 2048 · 1280 × 720 · PNG
Look at: 5–10 kHz (upper portion of the image)
Reading: bursts of brightness aligned with 's' and 't'
sounds = sibilance. Tame it with the
/audio-tools/de-esser tool, then re-view.Edge cases and what actually happens
Pro plan required to run
Pro requiredViewing the spectrum is a Pro-tier feature (minTier: "pro"). On the free tier the run is blocked with an upgrade prompt; nothing is processed or uploaded. The free waveform-generator shows amplitude over time (not frequency) at no cost if you only need a rough visual.
Top of the image is empty above ~16 kHz
ExpectedIf there is simply no high-frequency content, the top band renders dark. That is accurate — it usually means a lossy source, an old recording, or a dull microphone. The tool shows what is there; it cannot invent 'air' that was never captured.
Reading absolute dB off the colours
Relative onlyThe 80 dB range is normalised to the loudest bin in *this* file, so yellow means 'loudest here', not a fixed dBFS value. Two files rendered separately are comparable in shape but not in absolute level. For absolute loudness measurement use the loudness/true-peak family instead.
Wrong FFT size hides what you're hunting
By designHunting a steady tone with FFT 512 may blur it into the background; hunting a snare transient with FFT 8192 smears it across time. Match the FFT size to the target (small for transients, large for tones). The trade-off is fundamental to the FFT, not a tool limitation.
Stereo width can't be seen
By designChannels are summed to mono before the FFT, so panning and stereo width are invisible here. A hard-left and hard-right element appear in the same spectrogram. Use a DAW correlation/spectrum meter for stereo-field work.
Clip too short for multiple frames
By designA clip with fewer samples than the FFT size produces a single analysis frame stretched across the width. Lower the FFT size (512/1024) to get more frames and a more meaningful image from very short selections.
Decode failure on an exotic codec
Decode errorDecoding uses the browser's Web Audio decoder. Mainstream formats always work; unusual or DRM-locked files may fail. Convert to WAV or MP3 first with a sibling converter such as wav-to-mp3 or m4a-to-mp3.
File exceeds tier size/duration
Limit reachedPro caps at 200 MB / 120 min per file; Pro-media and Developer go to 100 GB with no duration cap. Long recordings beyond your tier are blocked before processing. Trim the section of interest with audio-trimmer first.
Image looks blocky after JPG export
CompressionJPG is lossy; at low quality settings fine spectral lines acquire blocky artefacts. For analysis you'll zoom into, export PNG (lossless) instead. JPG is best reserved for quick sharing where file size matters more than pixel fidelity.
No left/right or mid/side panes
Image onlyThe tool outputs one combined image; there is no multi-pane or interactive zoom UI. To inspect a region more closely, increase the width/height before rendering rather than expecting in-image zoom controls.
Frequently asked questions
What exactly am I looking at?
A spectrogram: time runs left to right, frequency runs bottom (20 Hz) to top (your file's Nyquist) on a logarithmic scale, and brightness encodes how loud each frequency is at each moment. Yellow is the loudest content; deep purple is ~80 dB quieter, near the noise floor.
Why is the frequency axis logarithmic?
Because pitch is perceived logarithmically — each octave is a doubling of frequency. A log axis gives every octave equal vertical space, so bass detail isn't squeezed into a couple of pixels the way it would be on a linear axis. It makes low-end problems far easier to read.
How do I tell mud from boom from air?
Roughly: 'boom' lives below ~120 Hz (bottom of the image), 'mud' in ~150–500 Hz (lower third), presence in 2–5 kHz (upper-middle), and 'air' above ~10 kHz (top). Look for a bright band sitting where you don't want one, then EQ that region and re-view.
Can I see the exact frequency of a peak?
Not numerically — there is no readout or cursor. You estimate it by eye against the log axis (bottom 20 Hz, top Nyquist). For precise frequency measurement you'd use a DAW analyzer with a movable cursor; this tool gives you the overview picture.
Why does a 'lossless' file have a hard ceiling at the top?
A razor-sharp dark cutoff around 16–17 kHz is the signature of a lossy origin (MP3/AAC) that was later wrapped in FLAC or WAV. Real lossless audio rolls off gradually toward Nyquist. View the top edge with FFT 4096+ to confirm.
Does it use FFmpeg's showspectrum filter?
No. Despite some older copy saying so, the spectrogram is produced by a hand-written radix-2 Cooley-Tukey FFT in JavaScript (with an optional WebGPU compute path), a Hann window, 75% overlap and a viridis colour map — all in audio-analysis.ts. FFmpeg is used by other audio tools, not by this one.
What does the colour scale actually mean?
It's viridis over an 80 dB range, normalised to the loudest frequency bin in your file. So colour is relative to this file: yellow = the peak, blues/teals = progressively quieter, purple = the bottom of the 80 dB window. It is not an absolute dBFS scale.
Which FFT size shows harmonics best?
Larger sizes — 4096 or 8192 — give the fine frequency resolution needed to separate closely spaced harmonics and pin resonances. The cost is that fast transients smear horizontally. For drums and transients use 512–1024 instead.
Can I compare two mixes fairly?
Compare shapes, yes — render both with identical FFT size, width and height and the images are directly comparable because rendering is deterministic. Compare absolute loudness, no — each image is normalised to its own peak. Use the loudness tools for level matching.
Does it show stereo information?
No. The signal is down-mixed to mono before analysis, so panning and stereo width don't appear. You get a single combined frequency view, which is the right tool for spotting tonal problems but not for stereo-field work.
Is anything uploaded when I view the spectrum?
No. The whole pipeline — decode, FFT, render — runs in your browser. The audio never leaves the tab. The only server interaction is an anonymous processed-file counter for signed-in users, with no audio content.
What's the largest file I can view?
On Pro, 200 MB and 120 minutes per file; Pro-media and Developer allow 100 GB with unlimited duration. For a long recording where you only care about one section, trim it first with audio-trimmer.
Privacy first
Every JAD Audio tool runs entirely in your browser via FFmpeg (WebAssembly) and RNNoise. Your audio files never leave your device — verified by zero outbound network requests during processing.