Wat is het QOA-audiobestandformaat? Kenmerken, architectuur en hoe je het opent
In digitale audio‑engineering en game‑ontwikkeling is het altijd een uitdaging geweest om bestandsgrootte, afspeel‑latentie en CPU‑overhead in balans te brengen. Standaardformaten zoals MP3, AAC en Ogg Vorbis bieden hoge compressieverhoudingen, maar vereisen complexe decodeerpijplijnen, zware floating‑point‑rekenkunde en aanzienlijke geheugengebruik. Aan de andere kant van het spectrum levert ongecomprimeerde PCM (.wav) nul‑latentie‑afspelen, ten koste van enorme schijfruimte en trage asset‑levering.
Het QOA (Quite OK Audio)‑formaat vult dit gat. Gecreëerd door Dominic Szablewski (maker van het breed geprezen QOI‑beeldformaat), is QOA een open‑source, lossy‑audioformaat dat is afgestemd op razendsnelle decodering, minimale complexiteit en voorspelbaar geheugengebruik.
Wat is een QOA-bestand?
Een bestand met de extensie .qoa slaat gecomprimeerd digitaal audio op met behulp van het Quite OK Audio-formaat. Het werkt met pulse-code gemoduleerde (PCM) audiogegevens met een diepte van 16 bits over bemonsteringsfrequenties variërend van $1\text{ Hz}$ tot $16,777,215\text{ Hz}$ en ondersteunt tot 31 audiokanalen.
In tegenstelling tot psychoakoestische codecs die afhankelijk zijn van frequentiedomeintransformaties (zoals de Modified Discrete Cosine Transform of MDCT), werkt QOA volledig in het tijdsdomein. Het comprimeert audio tot een vaste verhouding van exact $3.2\text{ bits per sample}$, waardoor een constante compressieverhouding van $5:1$ wordt bereikt ten opzichte van ruwe 16-bit lineaire PCM.
Voor standaard CD-kwaliteit audio (44,1 kHz, stereo) bereikt een QOA‑stroom een exact, constant bitrate van:
$$\text{Bitrate} = 44,100 \times 2 \times 3.2 = 282,240\text{ bits/s} \approx 278\text{ kbps}$$
Gedetailleerde kenmerken van QOA
1. Minimalistische specificatie en implementatie
Traditionele moderne codecs vereisen honderden pagina’s met technische specificaties en duizenden regels code om te implementeren. Daarentegen past de volledige QOA‑formaatspecificatie op een enkele-pagina PDF, en bestaat de officiële referentie‑implementatie (qoa.h) uit ongeveer 400 regels standaard C‑code.
2. Tijdsdomein LMS-voorspelling
QOA vermijdt computationeel intensieve transformatialgoritmen. In plaats daarvan maakt het gebruik van een adaptief Least Mean Squares (LMS) voorspellingsfilter met vier historische gewichten per kanaal. Door toekomstige monsterwaarden te schatten en alleen gekwantiseerde residuele verschillen op te nemen, levert QOA transparante perceptuele audiokwaliteit zonder zware CPU‑belasting.
3. Extreem Snelle Decodering
Omdat QOA uitsluitend vertrouwt op gehele getallenrekenkunde en lichtgewicht bewerkingen, decodeert het tot $3\times$ sneller dan Ogg Vorbis en overtreft het aanzienlijk standaard MP3‑decoders. Het decodeert zelfs sneller dan Microsoft ADPCM, waardoor het ideaal is voor low‑power embedded hardware, microcontrollers en realtime game‑engines.
4. Streaming-klaar Chunked Architectuur
QOA‑bestanden zijn opgedeeld in zelfstandige frames die tot $5,120$ monsters per kanaal bevatten ($256$ slices van $20$ monsters). Elk frame draagt zijn eigen LMS‑filtergewichten en -geschiedenis, waardoor direct zoeken, herstel zonder straf van verloren pakketten, en dynamische on‑the‑fly streaming mogelijk zijn zonder verplichte globale indexering.
Belangrijkste Kenmerken van QOA
| Kenmerk | Specificatie / Detail |
|---|---|
| Bestandsextensie | .qoa |
| Magische Bytes | qoaf (0x71, 0x6f, 0x61, 0x66) |
| Ontwikkelaar / Maker | Dominic Szablewski (PhobosLab) |
| Compressietype | Lossy (tijdsdomein LMS-voorspelling) |
| Compressieverhouding | Vast $5:1$ ten opzichte van 16-bit PCM |
| Opslag per sample | Exact $3.2\text{ bits per sample}$ |
| Bitrate (44,1 kHz, Stereo) | $\approx 278\text{ kbps}$ ($282,24\text{ kbps}$ payload) |
| Bereik van samplefrequentie | $1\text{ Hz}$ tot $16,777,215\text{ Hz}$ ($24\text{-bit}$ ongetekend) |
| Ondersteunde Kanalen | $1$ tot $31$ audio-kanalen (Mono, Stereo, 5.1, 7.1, enz.) |
| Header Overhead | 8-byte bestandsheader, 8-byte frame-header |
| Licentie | MIT (Broncode) / CC0 (Specificatie & Logo) |
Hoe QOA-bestanden te Maken en Coderen
Audio coderen naar QOA is eenvoudig dankzij kant-en-klare ontwikkelaarsbinaries en community toolchains.
Methode 1: De Officiële qoaconv CLI Gebruiken
De primaire encoder wordt rechtstreeks gedistribueerd binnen de officiële referentie‑repository.
- Kloon de repository en bouw de binary:
git clone https://github.com/phoboslab/qoa.git cd qoa make - Converteer een ongecomprimeerd WAV-bestand naar QOA:
./qoaconv input.wav output.qoa - (Optioneel) Als gecompileerd met
HAS_DRLIBS=true, kanqoaconvook direct transcoderen van.flac- en.mp3-bestanden.
Methode 2: Coderen In-Engine (Godot Engine)
Vanaf Godot 4.3 kunnen game‑ontwikkelaars ongecomprimeerde .wav-bestanden importeren en QOA-compressie direct selecteren vanuit het Godot‑importpaneel. Dit levert compacte game‑assets op die native decoderen met verwaarloosbare CPU‑latentie tijdens intensieve gameplay‑scènes.
Methode 3: Webconverters In-Browser
Verscheidene webgebaseerde WebAssembly‑hulpmiddelen (zoals die gehost op qoaformat.org en gerelateerde open‑source‑demo’s) stellen gebruikers in staat standaard audiobestanden te slepen en een gecodeerd .qoa‑asset lokaal te downloaden zonder terminal‑opdrachten uit te voeren.
Hoe QOA-bestanden te Openen en Afspelen
Omdat QOA een lichtgewicht formaat is dat voornamelijk is ontworpen voor runtime‑integratie, kunnen conventionele consument‑mediaplayers plugins of speciale builds nodig hebben.
- Dedicated CLI Player (
qoaplay): De officiële repository compileert naarqoaplay, dat native audiosubsystemen gebruikt (ALSA op Linux, CoreAudio op macOS, WASAPI op Windows) om.qoa‑bestanden direct af te spelen:./qoaplay audio.qoa - Game‑frameworks & -engines:
- Raylib: Native ondersteuning via de
raudiomodule. - Godot Engine: Volledige native afspeelondersteuning (Godot 4.3+).
- Raylib: Native ondersteuning via de
- Mediaplayers & plug‑ins:
- Qmmp: Geavanceerde multimedia‑speler met native QOA‑decodeermodules.
- OpenCubicPlayer: Klassieke tracker en audiobestandspeler die QOA‑streams ondersteunt.
- Audacious / foobar2000: Ondersteund via open‑source community‑invoegtoepassingen.
- IDE & ontwikkeltools:
- VS Code: De QOA Preview-extensie stelt ontwikkelaars in staat om
.qoageluidsfragmenten direct in hun bronboom te bekijken en af te spelen.
- VS Code: De QOA Preview-extensie stelt ontwikkelaars in staat om
Veelgestelde vragen (FAQ)
Waar staat QOA voor?
QOA staat voor Quite OK Audio, een snel, eenvoudig, open-source audioformaat met verlies.
Is QOA-audio lossless of lossy?
QOA is een verliesachtig audio-compressieformaat, maar het behoudt bijna transparante audiokwaliteit voor de meeste praktische toepassingen.
Hoeveel compressie biedt QOA?
QOA comprimeert 16-bit ongecomprimeerde audio met een constante verhouding van $5:1$ (exact $3.2\text{ bits per sample}$).
Kan QOA MP3 of AAC vervangen voor algemene muziekstreaming?
Nee, QOA geeft prioriteit aan ultra-snelle, lichtgewicht decodering boven maximale bandbreedtebesparing, waardoor het beter geschikt is voor games, microcontrollers en toepassingen met lage latentie dan voor high‑density webstreaming.
Zijn er licentie- of patentrechten kosten voor QOA?
Nee, QOA is volledig patentrechtvrij en uitgebracht onder de permissieve MIT‑licentie, terwijl de specificatie en het logo tot het publieke domein (CC0) behoren.
Referentie-URL’s & Officiële bronnen
- Officiële website: https://qoaformat.org/
- Officiële specificatie (PDF): https://qoaformat.org/qoa-specification.pdf
- GitHub‑repository: https://github.com/phoboslab/qoa
- Technische verdieping van de auteur: PhobosLab Blog - QOA-aankondiging & benchmarks