QOA

From Hydrogenaudio Knowledgebase
Jump to: navigation, search

The Quite OK Audio Format (QOA) is a niche lossy audio codec created by Dominic Szablewski in 2023. It designed to be, in the author's words, lossy, simple and quite ok: "simple" to computers in terms of decoding speed (intended to close in on ADPCM speeds at better quality[1]) and to humans in terms of the format specification, which fits a single page[2]. It is not intended to compete with current lossy encoders in terms of near-transparency at low bitrates – indeed, "low" bitrates are arguably not possible at the sample rates that yield "quite ok" quality.

QOA is available as a free and open-source (MIT licensed) library. Its github repository[3] links to alternative implementations; also, ffmpeg can decode it (from version 7.0). A third-party foobar2000 QOA playback component is available (note the warning given).

Properties

(Disclaimer: Part of the following is taken from the author's initial presentation[4], which pre-dates the current version.)

  • QOA is a CBR format, spending 3.2 bytes per sample per channel, each channel encoded separately. In addition, there is a frame header per 5120 interchannel sample, and a file header.
  • Bit rate is then defined by sample rate, which could be from 1 to 224 Hz in integer steps, and by channel count. For 44.1 kHz stereo, bit rate will then amount to 277 kbit/s.
  • Multichannel support: Format allows for 255 channels. A decoder is required to support 1 to 8 channels, possibly varying over frames (channel allocation coinciding with FLAC frames' channel allocation).
  • Encoding method: Like several audio formats, it works with a predictor from past samples (fourth order). The residual – i.e. the difference between "predicted" and "actual" sample value in the source signal – is then replaced by one out of eight hard-coded values (this is the lossy part).

The reference implementation is 400 lines of C code. The format can encode fast, but it is also possible to try to improve quality by spending computing effort on noise shaping upon encoding, selecting the residual value in a more clever way than naive roundoff[5].

References

  1. QOA at qoaformat.org
  2. QOA specification (CC0 licensed)
  3. QOA at github
  4. "Time Domain Audio Compression at 3.2 bits per Sample" (blog post introducing QOA)
  5. Hydrogenaudio discussion thread