When Karlheinz Brandenburg at Fraunhofer IIS needed a reference track to develop what would become MP3, he chose an a cappella recording of Suzanne Vega's "Tom's Diner." No drums, no bass, no reverb. Just a solo voice with very specific tonal qualities that the early codec kept mangling. If the algorithm could preserve that recording at a fraction of the original bitrate, it was working.
The format was standardized as ISO/IEC 11172-3 in August 1993. Brandenburg and his team called it MPEG-1 Audio Layer III. The .mp3 extension wasn't settled until an internal email poll on July 14, 1995.
The reason it took years to get right is that perceptual audio coding is not compression in the naive sense. It's not just dropping high frequencies or averaging sample values. It's running a real-time simulation of the human auditory system and exploiting every limitation that simulation predicts.
The Cochlea Has 24 Bands
The auditory system doesn't process frequency linearly. The basilar membrane, the structure inside the cochlea that converts vibration to neural signals, has a roughly logarithmic response. High-frequency signals excite one end, low-frequency signals excite the other, and the whole structure integrates energy in chunks called critical bands.
The Bark scale maps this. It divides the audible frequency range into 24 critical bands, numbered 1 through 24, each roughly 100 Hz wide at the low end and several hundred Hz wide at the high end. Bark 1 covers 0-100 Hz; Bark 24 covers roughly 13.5-15.5 kHz. Each band corresponds to approximately the same physical distance along the basilar membrane.
This is why audio codecs don't think in linear frequency bins. When an MP3 encoder calculates its masking threshold, it works in the Bark domain, grouping spectral data into these perceptually meaningful chunks.
Simultaneous Masking: Loud Things Hide Quiet Things Nearby
Within each critical band, there's a masking phenomenon: if a loud signal is present at one frequency, quieter signals at nearby frequencies become inaudible. The neural excitation pattern from the loud signal spreads along the basilar membrane, raising the effective threshold of hearing across a band of frequencies.
The encoder measures the energy in each critical band, estimates the masking threshold that results, and then quantizes signals below that threshold more aggressively. If a frequency component will be masked by something louder nearby, you get to use fewer bits to represent it. The quantization noise introduced by that coarser encoding stays below the masking threshold and is perceptually transparent, at least in theory.
Masking is asymmetric. A loud tone at 1 kHz masks signals above it more than below it. The spreading function in the Bark domain has a steep cutoff below the masker and a gentler slope above it. Encoders model this asymmetry explicitly.
Temporal Masking: The Time Dimension
Masking isn't only simultaneous. The auditory system also masks across time, in both directions.
Post-masking (forward masking) is the better-known effect: after a loud sound ends, there's a period of elevated threshold before sensitivity returns to normal. This can last up to around 200 milliseconds for strong maskers, meaning quieter sounds in that window are difficult or impossible to perceive.
Pre-masking (backward masking) runs the other direction. Sounds that occur up to about 20 milliseconds before a masker can be masked by it, because the auditory system needs integration time to build up a percept. The effect is strongest in the 1-5 ms immediately before the masker onset.
Codecs exploit both. Quantization noise introduced just before a loud transient might be hidden by pre-masking. Noise just after is hidden by post-masking. This works well for sustained, stationary signals.
Why Pre-Echo Happens
The problem appears when you have a sharp transient: a snare hit, a rimshot, a clap.
MP3 uses the Modified Discrete Cosine Transform (MDCT) to convert audio into the frequency domain for quantization. The MDCT operates on a window of audio samples. For stationary signals, long windows are efficient: more frequency resolution, better compression. MP3's long window spans about 26 ms.
When the encoder quantizes the frequency-domain representation of a long window that contains a transient, any quantization error introduced into those coefficients gets spread evenly across the entire window when the decoder reconstructs the time-domain signal. That includes the samples before the transient.
The result: a smear of low-level noise appearing 20-plus milliseconds before the transient hit. The ear was supposed to mask it (pre-masking), but pre-masking only works for 1-5 ms before onset. The noise arrives too early. You hear it as a soft wash, a flutter, a ghost of the hit before the hit.
This is pre-echo, and it's the characteristic failure mode of transform-based codecs on transient material.
Window Switching: The Partial Fix
The solution is to detect transients and switch to shorter windows before they arrive. A shorter window contains fewer samples, so quantization error spreads over a smaller time range, and the pre-masking window can cover it.
MP3's short window is much shorter than its long window, and the encoder can transition between them using a mixed structure. But there's a complication: MP3 uses a hybrid filter bank, combining a 32-subband polyphase filter with an 18-coefficient MDCT on top of each subband. This design introduces additional latency and limits how quickly the encoder can respond to transient events. MP3's short-block impulse response at 48 kHz is around 18.6 ms.
AAC eliminated the polyphase filter bank and uses a pure MDCT. This allows it to switch between a long block of 1024 points and 8 short blocks of 128 points, with a short-block impulse response of about 5.3 ms at 48 kHz. AAC's window switching is both faster and more precise, which is the main reason it handles percussive material more cleanly than MP3 at the same bitrate.
Opus Does This Differently
Opus, standardized as RFC 6716 in September 2012, takes a different architectural approach. It combines two codecs: SILK, originally developed by Skype for voice, and CELT, developed by Xiph.Org for music. The encoder can blend them frame by frame based on the signal content.
The CELT layer uses a pure MDCT with very short frames, which naturally reduces temporal spread. For signals with sharp transients, CELT's approach sidesteps much of the pre-echo problem by keeping windows short enough that quantization noise never drifts far from the event that caused it.
What This Means for Your Mixes
The practical takeaway is about vulnerability. Transient-heavy material in sparse arrangements is the worst case for any lossy codec. A snare hit in a dense mix is partly shielded by all the other spectral energy, which raises masking thresholds across the board and leaves less audible room for pre-echo to emerge. That same snare hit over silence, or in a sparse arrangement with a lot of low-frequency energy below it, has no masking to hide behind.
Cymbals are particularly vulnerable because they have fast attack transients, wide-band frequency content, and high energy, all of which stress the window-switching logic and create pre-echo that sits in a frequency range where the ear is fairly sensitive.
A useful delivery check: bounce your mix at 128kbps MP3 and listen specifically to drum hits in sparse sections. If you hear a subtle pre-ring or smear before transient events, that's the codec exposing the limits of the psychoacoustic model. Most streaming platforms use AAC at 128-256 kbps; at 256, pre-echo is rarely audible. At 128, especially with MP3, it can be.
Understanding what the encoder is actually doing, which parts of your signal it's treating as disposable and why, is the difference between trusting your delivery chain and actually checking it.