Audio Waveform Visualizer

Open a song, a podcast episode, or a voice memo. Each pixel column shows its loudest sample and its average energy. Red marks flag clipped samples, blue bands shade silent gaps, and the file never leaves your device.

Four passes through a freshly loaded file

A first look at a new file goes faster in a fixed order. Each pass uses one part of the page and answers one question about the audio.

  1. Pass 1Shape. Press Fit and read the whole file at once. Intros, choruses, drops, and long pauses show as changes in height. A podcast looks like even blocks with short breaks where one person stops and the next starts.
  2. Pass 2Readings. Compare Sample peak with RMS level. A crest factor under 8 dB means heavy limiting. A DC offset above 0.5% points to a hardware fault to fix before any other edit.
  3. Pass 3Clipped spots. Click the first row in the list. The view zooms to the spot with a margin on both sides. Keep pressing + until single samples show as dots. Flat runs of red dots along the top or bottom edge confirm digital clipping.
  4. Pass 4Silent gaps. Switch Scale to dB to see the noise floor between phrases, then set the gap threshold a few dB above the floor. The list now holds the pauses worth trimming, each one a click away.

Peak and RMS: the two shades in every column

Zoomed all the way out, one pixel column of a 3-minute song covers about 7,000 samples. The outer shape marks the highest and lowest of those samples. This is the sample peak. The lighter inner shape is RMS, the root-mean-square of the same samples, which tracks how loud the passage feels.

The distance between peak and RMS, in dB, is the crest factor. A small number means heavy compression or limiting. Rough ranges from real recordings:

MaterialCrest factorWhat the waveform looks like
Steady sine tone3 dBA solid block, both shades nearly touching
Loud pop or EDM master6 to 9 dBA brick with flat edges near full scale
Podcast voice after compression10 to 14 dBEven shapes per phrase, short gaps between
Raw speech, solo acoustic guitar14 to 20 dBTall thin spikes over a low body
Orchestral or film score18 dB and upLong quiet stretches, rare tall peaks

The RMS reading follows the plain math, so a full-scale sine reads -3.0 dBFS. Meters built on the AES17 convention add 3 dB and show the same sine at 0. A 3 dB disagreement with one of those meters comes from the convention, not a fault in either tool.

Linear or dB scale

Linear

The default in Audacity, Premiere Pro, and most editors. Loud passages fill the lane. Anything under about -30 dBFS shrinks to a hairline. Pick linear to judge clipping, overall loudness, and where a song builds.

dB

The lane spans 0 down to -60 dBFS, so quiet detail gets room. Room tone, breaths, reverb tails, and fade-outs become visible. Pick dB to check a noise floor or to place an edit inside true silence.

How the clipping finder decides

A single sample at full scale is a normalized peak, not damage. The finder flags a run of three or more samples in a row at or above -0.01 dBFS, the same start rule Audacity's Find Clipping uses by default. Runs less than 50 ms apart merge into one spot, so a clipped bass note lists once instead of once per wave cycle.

Lossy files add a twist. MP3 and AAC decoders rebuild the wave from frequency data, and the rebuilt peaks overshoot. A master limited to -0.1 dBFS often decodes with samples above 1.0. Those show in the Clipping reading as samples over 0 dBFS. If a master clips only after encoding, set the limiter ceiling to -1 dBTP before export.

Clipped audio stays clipped. The finder shows where to look. Repair needs a declipper such as iZotope RX or Audacity's Clip Fix effect, or a fresh export from the source session.

Tuning the silence finder for podcast edits

The finder measures RMS in 10 ms windows, keeps the louder channel, and lists every stretch where all windows stay under the threshold for at least the minimum length. Defaults are -50 dBFS and 0.5 seconds.

  • Noisy home room. Fan and traffic noise often sits between -55 and -45 dBFS. If obvious pauses go unlisted, raise the threshold to -42.
  • Treated booth. The floor sits near -65 dBFS. Drop the threshold to -58 to keep soft breaths out of the gap list.
  • Dead air only. Set the minimum length to 1.5 seconds. You get the long pauses worth cutting and skip the natural gaps between sentences.
  • Every pause. Set 0.25 seconds to map pacing across a whole interview.

Click a gap to zoom there and park the playhead at its start. The visualizer finds gaps but cuts nothing. Copy the times into your editor.

Exporting a picture or the peak data

PNG and SVG copy the current channel, scale, style, and color. Pick the whole file or only the zoomed view. SVG stays sharp at any size, which suits podcast cover art, video thumbnails, and print. Tick Transparent to drop the waveform onto a design without a background box.

Peaks JSON for web players

Decoding a whole MP3 in a visitor's browser to draw one waveform is slow on phones and burns data. Players skip the work when you hand them precomputed peaks. Export the JSON once, host the file next to the audio, and point the player at both.

// wavesurfer.js v7, "Normalized floats" export
const { duration, peaks } = await (await fetch('/media/episode-42-peaks.json')).json()WaveSurfer.create({ container: '#wave', url: '/media/episode-42.mp3', peaks, duration })Peaks.init({zoomview: { container: document.getElementById('zoomview') },overview: { container: document.getElementById('overview') },mediaElement: document.querySelector('audio'),dataUri: { json: '/media/episode-42-peaks.json' }}, (err, peaks) => { if (err) console.error(err) })

The audiowaveform format matches the JSON written by the BBC's audiowaveform command-line tool: 8-bit min and max pairs, interleaved per channel. Points per second sets the detail. At 10 per second a mono, hour-long episode comes to about 250 KB of JSON, plenty for a full-width player. Zoomable editors want 100 or more.

What this visualizer will not tell you

  • Long files on phonesThe browser decodes the whole file into 32-bit floats. One hour of 48 kHz stereo takes about 1.4 GB. Desktops cope with a few hours. Phones often stall past 30 minutes.
  • The file's own sample rateBrowsers resample on decode to the audio device's rate, often 48,000 Hz. A 44.1 kHz file reads as 48,000 Hz here. The Media File Inspector reads the rate stored in the file.
  • True peakThe readout reports sample peaks. The reconstructed wave between samples runs higher, so a file at -0.2 dBFS here reaches above 0 dBTP on some converters.
  • Loudness in LUFSRMS here is unweighted and ungated. Streaming targets such as -14 LUFS need a K-weighted loudness meter.
  • EditingNothing gets trimmed, normalized, or saved back to the file. Take the times and readings into your editor.
  • Every format everywhereDecoding follows your browser. Safari has the weakest OGG Vorbis and Opus support. Files locked by DRM in streaming apps never decode.

Questions from editing sessions

Why does my song look like a solid brick?

The master is limited hard, so nearly every column peaks near full scale. Zoom past 20x to see individual beats. Check the crest factor reading: under 8 dB confirms heavy limiting. If the top edge runs dead flat for whole sections, the clipping finder lists those spots.

Does the waveform visualizer upload my audio?

No. Your browser reads and decodes the file, and every reading and export is computed on your device. Closing the tab discards the audio.

Why are the left and right lanes identical?

The file is mono saved as stereo, a common result of phone recorders and some podcast exports. Peak and RMS match on both sides. Exporting the episode as mono halves the size of a WAV with no loss.

Why is the duration a few milliseconds off from my editor?

MP3 and AAC encoders pad the start and end of a file with silent frames. Some browsers trim the padding using the encoder's gapless info, others keep part of the padding. WAV and FLAC durations match to the sample.

How large a file will the visualizer open?

Up to 250 MB. Decoded length sets the real limit, since an hour of stereo audio takes about 1.4 GB of memory once decoded. A 250 MB MP3 at 128 kbps runs past four hours, beyond what most phones handle.

How do I make a SoundCloud-style bar waveform for a website?

Set Style to Bars, pick a color, tick Transparent, and download the SVG. For a player synced to playback, export peaks JSON instead and let wavesurfer.js draw the bars from the data.

Why does a quiet recording sit above or below the center line?

DC offset. A cheap interface or a faulty preamp adds a constant voltage, which shifts the whole wave. The DC offset reading shows the shift as a percentage of full scale. Fix readings above 0.5% with a 20 Hz high-pass filter or your editor's DC offset removal.