Spectrum analysis

Audio spectrum analyzer

The file is decoded locally and analysed with a windowed FFT. You get an averaged spectrum, a spectrogram over time, and the measured high-frequency cutoff — which is how a lossy-sourced file is identified.

MP3WAVM4AAACOGGOpusFLACAIFFM4RAMRCAF3GPMOVMP4WebM

…or drag files and folders here. Add as many as you like — everything is processed on this device.

.3g2 .3gp .aac .aif .aifc .aiff .amr .caf .flac .m4a .m4r .m4v .mkv .mov .mp3 .mp4 .oga .ogg .opus .qt .wav .wave .weba .webm

The most useful thing a spectrum analyser tells you is where the audio stops. Every lossy encoder applies a lowpass filter: MP3 at 128 kbps typically cuts around 16 kHz, at 320 kbps around 20 kHz, AAC and Opus have their own signatures. Genuine lossless audio has content right up to the Nyquist limit. A sharp horizontal edge partway up a spectrogram is proof that a file described as lossless was made from a lossy source.

It is also the fastest way to diagnose a recording: mains hum sits as a spike at 50 or 60 Hz and its harmonics, a rumbling air conditioner shows as low-frequency energy below 100 Hz, clipping shows as broadband energy across the top of the spectrum, and a dead microphone channel is obvious as one empty half of the analysis. Everything is computed in your browser with a Hann-windowed FFT, and you can export the numbers.

Does this change the audio quality?

This tool only measures — it never writes an audio file, so it cannot change your audio in any way. Analysis uses a 4,096-point FFT with a Hann window and 50% overlap; the methodology is stated on the results panel with every measurement.

  • The measured cutoff indicates a lossy encode somewhere in the file’s history. It does not prove what the encoder or bitrate was.
  • Sparse recordings can look like they have a cutoff simply because there is nothing loud in the top octave. Check the spectrogram over time, not just the average.
  • Very long files are analysed on a sampled subset of windows to keep memory within budget, and the panel states how much was analysed.

A worked example

Checking whether a “lossless” download is genuine

  1. Drop the FLAC or WAV file in. Analysis begins as soon as it decodes.
  2. Look at the spectrogram: real lossless audio has content up to 22 kHz for a 44.1 kHz file.
  3. Read the measured cutoff figure. A hard edge at 16 kHz means the audio passed through a low-bitrate MP3 at some point.
  4. Export the JSON report if you need to document the finding.

Read the spectrogram before the averaged spectrum

The averaged spectrum hides time-varying problems. A spectrogram shows the cutoff as a straight horizontal line across the whole file — unmistakable and stable regardless of content — while a genuine lack of high-frequency material varies from moment to moment. For diagnosing recordings, look at the bottom of the spectrogram first: most real-world problems are hum, rumble and handling noise below 200 Hz.

Supported formats, limits and browser notes

Sonic Batch decodes with the browser when it can (faster, no engine download) and falls back to the self-hosted WebAssembly engine when it cannot. Every combination below works in every listed browser; the column only tells you which decoder does the work.

Input formats accepted by this page
InputWhat it isChromeFirefoxSafariiOS
MP3The universal lossy format. Plays on essentially every device made since 1998.NativeNativeNativeNative
WAVRaw PCM samples with a small header. Perfect fidelity, roughly 10 MB per stereo minute.NativeNativeNativeNative
M4AApple’s default AAC container. Better quality than MP3 at the same bitrate.NativeNativeNativeNative
AACBare AAC frames with no MP4 wrapper — used by broadcast streams and some hardware.NativePartialNativeNative
OGGRoyalty-free lossy codec. Standard in game engines, Godot, Unity and Wikimedia.NativeNativeEngineEngine
OpusThe best-sounding lossy codec below 128 kbps. Used by WhatsApp, Discord and YouTube.NativeNativePartialPartial
FLACLossless compression, typically 50–60% of WAV size, bit-identical when decoded.NativeNativeNativeNative
AIFFApple’s uncompressed PCM format — the WAV equivalent for Logic and Pro Tools.PartialPartialNativeNative
M4RAn M4A file with a .m4r extension. iOS only lists it as a ringtone if it is ≤ 40 seconds.PartialPartialNativeNative
AMRPhone-call speech codec: 8 kHz mono, 4.75–12.2 kbps. Decode only — nothing should be created in it.EngineEngineEngineEngine
CAFApple container used by older iOS Voice Memos. Usually holds ALAC, IMA4 or raw PCM.EngineEnginePartialPartial
3GPLegacy phone recording container, normally AMR-NB or low-bitrate AAC audio.EngineEnginePartialPartial
MOVQuickTime video from iPhone and DSLR cameras. Audio is normally AAC or PCM.PartialEngineNativeNative
MP4The standard video container. Its audio track is almost always AAC.NativePartialNativeNative
WebMOpen container used by browser recorders and YouTube downloads. Audio is Opus or Vorbis.NativeNativePartialPartial
Max per file
400.0 MB
Max per queue
4.00 GB
Max duration
4:00:00
Max archive
1.50 GB

These are enforced ceilings, checked before any decoding starts, not measured maximums — a file over the limit is rejected rather than allowed to exhaust the tab’s memory. Real-world capacity is lower on older phones, which is why the scheduler runs one file at a time on iOS and Safari.

Where your audio goes

Nowhere. Your file is read from disk into this browser tab with the File API, decoded and encoded by code running in that same tab, and handed back to you as a download. It is never transmitted.

That is a structural property of the application, not a policy promise: there are no API routes, no server actions and no third-party processing services in this project, so there is nothing capable of receiving a file. The page’s Content-Security-Policy also restricts connections to this origin, and the automated test suite includes a browser test that fails if any network request during import, preview, conversion or download carries media bytes.

The trade-off, stated plainly:results live in your tab’s memory until you download them. Closing or reloading the page discards them. There is nothing on a server to recover, because nothing was ever put there.

Read the full privacy detail

Troubleshooting

The spectrum looks empty above 10 kHz.

Either the source is heavily compressed, or the material genuinely has no high-frequency content — a bass-heavy track or a narrowband speech recording. Compare against the spectrogram to see whether the limit is constant.

The analysis is slow on a long file.

Full decoding is required before analysis. Files above the memory budget are analysed on a sampled subset of windows, which the panel states explicitly.

My file will not decode.

The engine reports the codec it found. Very unusual codecs and DRM-protected files cannot be analysed.

Frequently asked questions

How can I tell if a file is really lossless?

Look for a sharp, constant high-frequency cutoff in the spectrogram. Lossless audio has content up to the Nyquist frequency; a hard edge at 16–20 kHz means a lossy encoder was involved at some point.

What FFT settings does this use?

A 4,096-point FFT with a Hann window and 50% overlap, magnitudes averaged across the analysed windows and reported in dBFS. The panel states the window count for each file.

Can I export the data?

Yes — a JSON report with the full spectrum and measurements, or a CSV of frequency and magnitude pairs. Both are generated in your browser.

Is my audio uploaded for analysis?

No. Decoding and the FFT both run in your browser tab, on a worker thread so the page stays responsive.