Skip to content

LOSSY

make it survive the internet

An MDCT front end, a psychoacoustic masking model, and a bit allocation loop that has to fit each block into a budget you set. Take the budget away and it fails the way encoders fail: birdies, pre-echo, a vanishing top octave, a stereo image that collapses from the top down.

VST3CLAPAULV2Standalone

macOS on Apple Silicon. Windows builds in progress.

Get Lossy
The Lossy interface: encoder, spectrum and transport panels above a live spectrum strip showing which bands are coded in stereo, flattened to mono, or discarded.

Why it exists

Lo-fi plugins fake codec damage with bitcrushing, sample-rate reduction and a filter. That is not what a codec does and it does not sound like one. A codec's damage is decided: it builds a masking curve, works out what it thinks you cannot hear, and spends its bits everywhere else.

When the bits run out, those decisions get wrong in a very particular and very recognisable way. Every part of that character comes from the allocation loop, not from distortion — which is why nothing that skips the allocation loop gets close.

What is actually happening

01 — Allocation

One number decides every artifact

Third-of-a-bark bands, a spreading function at −10 dB/bark up and +27 dB/bark down, spectral-flatness tonality and the absolute threshold of hearing build the masking curve. Then a binary search finds how far that whole threshold has to be raised for the block to fit its budget. Everything you hear is downstream of that one number.

02 — Generations

Six encodes, and no two agree on where blocks start

Up to six complete encode/decode passes, each offset onto a different block phase so the grids never line up — because two encoders that agree on block boundaries barely damage each other, and no real transcoding chain agrees. This is what a file sounds like after it has been reposted, rather than what one encoder sounds like turned down.

03 — Transport

Losing a packet happens to a stream, not to audio

A Gilbert model for bursty loss, four concealment modes — mute, hold, fade, scramble — and block stutter. Applied once, after the last generation, because that is where it happens in reality. Above the joint-stereo cutoff the difference channel is dropped entirely and both channels are rebuilt from one waveform plus a pair of per-band gains: real intensity stereo, collapsing from the top down.

Specification

Bitrate
8 – 320 kbps
Block sizes
128 – 2048 coefficients
Generations
1 – 6
Latency
2048 samples at default, ~43 ms at 48 kHz
CPU
0.6% at one generation, 3.3% at six
Test assertions
173, across three suites

Presets

  • 128k Rip
  • 64k Stream
  • Voice Note
  • Reposted Eight Times
  • Deep Fried
  • Bad Connection
  • Mono From The Top

Measured, not claimed

Perfect reconstruction, unchanged
5.2e-7
Error at 320 kbps
−20.1 dB
Error at 16 kbps
−5.6 dB
Cutoff, 320 → 16 kbps
20.5 kHz → 3.8 kHz
L/R correlation, 320 → 64 kbps
0.014 → 0.978
Reported vs measured latency
exact, all 10 combinations

Every figure here is printed by Lossy’s own test suite on rendered audio. Nothing in this table is an estimate.

Get Lossy

Free
Download Lossy

Free, and it stays free. No account, no email, no licence key.

The legal position

An original psychoacoustic model and quantiser over an original MDCT. Lossy implements no published bitstream format, contains no format's tables, and cannot decode or produce any format's files. It is not an MP3 encoder and it is not an AAC encoder. The artifacts are reproduced by doing the same kind of work, not by reimplementing anyone's codec.

See it work

Walkthrough

Being filmed. It will show Lossy on real material with the controls moving, because that is the only demonstration worth anything for this kind of plugin.