panicStudios

audio tool

panicStudios audio tool

What this is

A/B/X comparison for audio files. Every loaded track plays in lockstep from a single clock; only the selected one is audible. Switching is a 5 ms gain crossfade, so tracks stay sample-aligned and switches are click-free. Files are decoded in your browser and never uploaded.

Loading

Drop files anywhere on the page or use browse. Any format your browser can decode works (WAV, AIFF, FLAC, MP3, M4A…). Each row shows length, channels, and measured integrated loudness. Add and remove tracks at any time, even while playing.

Comparing

Click a track or press its number to hear it. Playback position is shared, so you always hear the same moment from each file. The waveform shows the selected track; click it to seek. The volume slider is in dB and only affects what you hear, not the meters. Double-click it to reset to 0 dB.

Loop region

Drag across the waveform to set a loop, then drag the in/out handles to refine it. Press I / O to set in/out at the playhead, L to toggle looping, Clear to remove the region. Enter jumps to the loop start (or to 0 with no loop).

Loudness match

Level differences dominate A/B judgements. When enabled, each track is trimmed so its integrated loudness (ITU-R BS.1770-4 / EBU R128) equals the target. Match quietest sets the target to the quietest track so nothing is boosted. A track needing positive gain is flagged, since there is no limiter and it may clip. M toggles.

Meters

Meters read the selected track after loudness match and before the volume slider, so they show what you are comparing. Peak is sample peak per channel with a 1.5 s hold; the top segment latches red on a full-scale sample. RMS is a 300 ms average. M and S are momentary (400 ms) and short-term (3 s) loudness in LUFS. Corr is the L/R correlation over 300 ms: +1 is mono, 0 is uncorrelated, negative means phase problems that will cancel in mono. The goniometer plots L against R rotated so mono is vertical; the spectrum is a log-frequency FFT with a slow-decay peak line. V toggles the panel.

Analyse

Each track row has an Analyse button. It runs a full offline pass over the decoded samples in a background worker and opens a report: loudness (integrated, range, momentary and short-term maxima, streaming-service normalisation), peaks (sample and 4× oversampled true peak, clipping, DC offset), dynamics (RMS, crest factor, peak-to-loudness ratio, TT-style DR, noise floor, leading and trailing silence), stereo (correlation, width, balance, mono sum), spectrum (long-term average plot, band energy shares, centroid, rolloff, bandwidth, tilt), and tempo and key estimates. Download .txt saves the report as plain text; Copy puts the same text on the clipboard. Nothing is uploaded and no AI is involved; the numbers come only from the maths described below.

How the stats are calculated

Integrated loudness follows ITU-R BS.1770-4. Each channel passes through the K-weighting filter: a second-order high shelf (+4 dB above ~1.5 kHz, f₀ = 1681.97 Hz, Q = 0.7072) followed by a second-order high-pass (f₀ = 38.14 Hz, Q = 0.5003). Coefficients are derived for the actual sample rate with the bilinear transform, so 44.1, 48, 88.2 and 96 kHz files are all measured correctly. Mean-square power is taken in 400 ms blocks with 75 % overlap (100 ms hop), summed across channels with the standard channel weights (1.0 for L/R/C, 1.41 for surrounds). Blocks below −70 LKFS absolute are dropped, then blocks more than 10 LU below the mean of what remains are dropped (relative gate), and the result is −0.691 + 10·log₁₀ of the mean power of the surviving blocks. The live M and S meters are the same K-weighted power over 400 ms and 3 s windows without gating; the report's maxima are the largest values those windows reach.

Loudness range (LRA) follows EBU Tech 3342: the short-term (3 s) loudness series is gated at −70 LUFS absolute and then at −20 LU relative to its mean; LRA is the difference between the 95th and 10th percentiles of the survivors.

Streaming normalisation is simply the service's published playback target minus the integrated loudness: Spotify, YouTube, Amazon and Tidal −14 LUFS, Apple Music −16, Deezer −15. A negative number is how far the service will turn the track down. Whether a service turns quiet tracks up depends on its settings and on peak headroom, so positive deltas are only indicative.

Sample peak is the largest absolute sample value per channel. True peak estimates inter-sample peaks by 4× oversampling as in BS.1770 Annex 2: around every sample within 6 dB of the sample peak, three fractional positions are reconstructed with a 16-tap Blackman-windowed sinc interpolator and the largest magnitude is kept. This is a lower bound on the analogue peak but matches dedicated true-peak meters to within a few tenths of a dB. Clipping counts runs of three or more consecutive samples at or above 0.999 full scale (−0.01 dBFS); each run is one event. DC offset is the mean sample value per channel, reported as the largest magnitude across channels in percent of full scale.

RMS is the root of the mean-square of the whole file, with channel powers averaged. Crest factor is sample peak minus RMS in dB, averaged across channels. Peak to loudness ratio is true peak (dBTP) minus integrated loudness (LUFS), the usual gauge of how much limiting has been applied. DR reproduces the TT Dynamic Range Meter method: per channel, 3 s blocks are measured for RMS and peak; the RMS values of the loudest 20 % of blocks are power-averaged and expressed with the AES17 +3 dB sine convention; DR is the second-highest block peak minus that RMS, in dB, averaged across channels and rounded for the DRxx figure. Noise floor is the RMS of the quietest 400 ms block between the first and last sample exceeding −60 dBFS; leading and trailing silence are the time before the first and after the last such sample.

Correlation is the Pearson correlation of L and R over the whole file, Σ(L·R)/√(ΣL²·ΣR²): +1 for identical channels, 0 for unrelated, −1 for inverted. The live meter uses the same formula with 300 ms leaky integrators. Width is the side signal power (L−R)/2 relative to the mid signal (L+R)/2 in dB; −∞ is pure mono. Balance is the L power minus R power in dB. Mono sum is the mid power relative to the average channel power, i.e. how much level changes when the mix is folded to mono; −3 dB means fully uncorrelated, below that means cancellation.

Spectrum is a long-term average: 4096-point FFTs with a Hann window and 50 % overlap over the whole file, power-averaged per bin and per channel, scaled so a full-scale sine reads 0 dBFS at its bin. The plot shows the maximum per log-spaced pixel column. Band shares are the fraction of total 20 Hz–20 kHz power in each band (sub 20–60, bass 60–250, low mid 250–500, mid 500–2k, high mid 2–6k, high 6–20k). Centroid is the power-weighted mean frequency, a rough brightness measure. Rolloff is the frequency below which 95 % of the power lies. Bandwidth is the highest frequency whose average level is within 60 dB of the spectral peak; a hard stop near 16–19 kHz usually means the file has been through a lossy codec or a low-rate resample. Tilt is the slope of a least-squares line fitted to the dB spectrum against log₂(frequency) between 100 Hz and 10 kHz; most mastered music sits around −3 to −6 dB per octave.

Tempo is an onset-based estimate on the first four minutes of the mono mix: 1024-point FFTs at a 512-sample hop give a spectral-flux onset curve (sum of positive log-magnitude increases per frame), which is detrended with a 1 s moving average and half-wave rectified. Its autocorrelation is evaluated at lags corresponding to 50–220 BPM and weighted with a log-normal prior centred on 115 BPM; the best lag is reported to 0.5 BPM. Confidence is the z-score of the winning peak against the other lags. Octave errors (half or double) are common for sparse or very dense material. Key accumulates a 12-bin chroma from the same 4096-point FFTs (bins 55 Hz–4.2 kHz mapped to pitch class by rounding 12·log₂(f/440)), then correlates it with Krumhansl–Kessler major and minor profiles in all 24 rotations; confidence is the gap between the best and second-best correlation. Both are estimates, not measurements.

Blind ABX

Pick two tracks as A and B. X is secretly one of them, re-drawn each trial. Listen to A, B, and X as often as you like, then vote [ (X is A) or ] (X is B). The result is revealed; N starts the next trial. The running score shows a p-value: the chance of doing at least that well by guessing. Below about 0.05 you are reliably hearing a difference.

Keyboard

SpacePlay / pause19Select track
EnterRewindMLoudness match on/off
I OLoop in / out at playheadVMeters on/off
LLoop on/offA B XListen (blind mode)
?This help[ ] NVote X is A / X is B, next trial

Notes

  • Audio is resampled to your device's output rate (shown top left). For a bit-exact comparison, set the system output rate to match the files first.
  • Compare files of equal length. A track shorter than the loop-out point drifts after the first wrap.
  • Large files decode fully into memory (about 10 MB per stereo minute).

Analysis

Starting…
Drop audio files here, or . Files stay in your browser.
    0:00.000 / 0:00.000
    Vol0.0 dB
    −60−48−36 −24−12−60
    Peak L
    −∞ dBFS
    Peak R
    −∞ dBFS
    RMS
    −∞ dBFS
    M
    −∞ LUFS
    S
    −∞ LUFS
    Corr
    0.00