Vad är QOA-ljudfilformatet? Funktioner, arkitektur och hur man öppnar det
Inom digital ljudteknik och spelutveckling har det alltid varit en utmaning att balansera filstorlek, uppspelningslatens och CPU-belastning. Standardformat som MP3, AAC och Ogg Vorbis erbjuder höga kompressionsgrader men kräver komplexa avkodningspipeline, tung flyttalsaritmetik och betydande minnesavtryck. I den andra änden av spektrumet ger okomprimerad PCM (.wav) uppspelning utan latens på bekostnad av enormt diskutrymme och långsam leverans av resurser.
Formatet QOA (Quite OK Audio) fyller detta gap. Skapat av Dominic Szablewski (skaparen av det mycket hyllade QOI-bildformatet) är QOA ett öppet källkods, förlustigt ljudformat som är anpassat för blixtsnabb avkodning, minimal komplexitet och förutsägbar minnesanvändning.
Vad är en QOA-fil?
En fil med filändelsen .qoa lagrar komprimerad digital audio med Quite OK Audio-formatet. Den arbetar med puls‑kodmodulerad (PCM) ljuddata med 16‑bitars djup över samplingsfrekvenser från $1\text{ Hz}$ upp till $16,777,215\text{ Hz}$ och stödjer upp till 31 ljudkanaler.
Till skillnad från psykoakustiska kodekar som förlitar sig på frekvensdomäntransformer (såsom Modified Discrete Cosine Transform eller MDCT) arbetar QOA helt i tidsdomänen. Den komprimerar ljud till ett fast förhållande på exakt $3.2\text{ bits per sample}$, vilket ger en konstant komprimeringsgrad på $5:1$ över rå 16‑bitars linjär PCM.
För standard CD‑kvalitet ljud (44,1 kHz, stereo) uppnår en QOA‑ström en exakt, konstant bithastighet på:
$$\text{Bitrate} = 44,100 \times 2 \times 3.2 = 282,240\text{ bits/s} \approx 278\text{ kbps}$$
Detaljerade funktioner för QOA
1. Minimalistisk specifikation och implementering
Traditionella moderna kodekar kräver hundratals sidor med tekniska specifikationer och tusentals kodrader för att implementeras. Till skillnad från detta ryms hela QOA‑formatets specifikation på en en‑sidig PDF, och den officiella referensimplementeringen (qoa.h) består av ungefär 400 rader standard‑C‑kod.
2. Tidsdomän LMS-prediktion
QOA undviker beräkningsintensiva transformalgoritmer. Istället använder den ett adaptivt Least Mean Squares (LMS) förutsägelsefilter med fyra historiska vikter per kanal. Genom att uppskatta framtida samplingsvärden och endast spela in kvantiserade residualskillnader levererar QOA transparent perceptuell ljudkvalitet utan tung CPU-användning.
3. Extremt snabb avkodning
Eftersom QOA förlitar sig uteslutande på heltalsaritmetik och lätta operationer, avkodar den upp till $3\times$ snabbare än Ogg Vorbis och överträffar avsevärt vanliga MP3-avkodare. Den avkodar till och med snabbare än Microsoft ADPCM, vilket gör den idealisk för lågströmsinbäddad hårdvara, mikrokontroller och realtidsspelmotorer.
4. Strömning‑klar segmenterad arkitektur
QOA-filer är indelade i självständiga ramar som rymmer upp till $5,120$ samplar per kanal ($256$ segment av $20$ samplar). Varje ram bär sina egna LMS-filtervikter och historik, vilket möjliggör omedelbar sökning, återhämtning utan straff från förlorade paket och dynamisk on-the-fly‑strömning utan obligatorisk global indexering.
Nyckelfunktioner för QOA
| Egenskap | Specifikation / Detalj |
|---|---|
| Filändelse | .qoa |
| Magiska byte | qoaf (0x71, 0x6f, 0x61, 0x66) |
| Utvecklare / Skapare | Dominic Szablewski (PhobosLab) |
| Kompressionstyp | Med förlust (tidsdomän LMS-prediktion) |
| Komprimeringsförhållande | Fast $5:1$ relativt 16-bit PCM |
| Lagring per prov | Exakt $3.2\text{ bits per sample}$ |
| Bithastighet (44,1 kHz, Stereo) | $\approx 278\text{ kbps}$ ($282.24\text{ kbps}$ nyttolast) |
| Samplingsfrekvensintervall | $1\text{ Hz}$ to $16,777,215\text{ Hz}$ ($24\text{-bit}$ osignerad) |
| Stödda kanaler | $1$ to $31$ ljudkanaler (Mono, Stereo, 5.1, 7.1, osv.) |
| Header-överskott | 8-byte filhuvud, 8-byte ramhuvud |
| Licensiering | MIT (Källkod) / CC0 (Specifikation & Logotyp) |
Hur man skapar och kodar QOA‑filer
Att koda ljud till QOA är enkelt tack vare färdigbyggda utvecklarbinärer och community-verktygskedjor.
Metod 1: Använd den officiella qoaconv‑CLI
Den primära kodern distribueras direkt i det officiella referensförrådet.
- Klona repot och bygg den binära filen:
git clone https://github.com/phoboslab/qoa.git cd qoa make - Konvertera en okomprimerad WAV-fil till QOA:
./qoaconv input.wav output.qoa - (Valfritt) Om den kompileras med
HAS_DRLIBS=truekanqoaconvockså direkt transkoda från.flac- och.mp3-filer.
Metod 2: Kodning i motorn (Godot Engine)
Från och med Godot 4.3 kan spelutvecklare importera okomprimerade .wav-filer och välja QOA-komprimering direkt från Godot Import-dockan. Detta skapar kompakta spelresurser som avkodas nativt med försumbar CPU-latens under intensiva spelscener.
Metod 3: Webbkodare i webbläsaren
Flera webbaserade WebAssembly-verktyg (såsom de som finns på qoaformat.org och relaterade öppen källkod-demoer) låter användare dra och släppa vanliga ljudfiler och ladda ner en kodad .qoa-resurs lokalt utan att köra terminalkommandon.
Hur man öppnar och spelar QOA‑filer
Eftersom QOA är ett lättviktigt format som främst är byggt för runtime-integration kan konventionella konsumentmediaspelare kräva plugins eller dedikerade versioner.
- Dedikerad CLI-spelare (
qoaplay): Det officiella repot kompileras tillqoaplay, som använder inbyggda ljudsystem (ALSA på Linux, CoreAudio på macOS, WASAPI på Windows) för att spela.qoa-filer direkt:./qoaplay audio.qoa - Spelramverk & motorer:
- Raylib: Inbyggt stöd via
raudio-modulen. - Godot Engine: Fullt inbyggt uppspelningsstöd (Godot 4.3+).
- Raylib: Inbyggt stöd via
- Mediaspelare & tillägg:
- Qmmp: Avancerad multimediaspelare med inbyggda QOA-avkodningsmoduler.
- OpenCubicPlayer: Klassisk tracker och ljudfilspelare som stödjer QOA-strömmar.
- Audacious / foobar2000: Stöds via öppen källkodsgemenskapens inmatningstillägg.
- IDE & utvecklingsverktyg:
- VS Code: QOA Preview-tillägget låter utvecklare förhandsgranska och spela
.qoa-ljudklipp direkt i deras källkodsträd.
- VS Code: QOA Preview-tillägget låter utvecklare förhandsgranska och spela
Vanliga frågor (FAQ)
Vad står QOA för?
QOA står för Quite OK Audio, ett snabbt, enkelt, öppet källkodsformat med förlustkomprimering.
Är QOA-ljud förlustfritt eller förlustigt?
QOA är ett förlust ljudkomprimeringsformat, men det behåller nästan transparent ljudkvalitet för de flesta praktiska användningsfall.
Hur mycket kompression ger QOA?
QOA komprimerar 16-bitars okomprimerat ljud med ett konstant förhållande på $5:1$ (exakt $3.2\text{ bits per sample}$).
Kan QOA ersätta MP3 eller AAC för generell musikströmning?
Nej, QOA prioriterar ultrasnabb, lättviktig avkodning framför maximal bandbreddsbesparing, vilket gör det bättre lämpat för spel, mikrokontroller och låglatensapplikationer än högdensitets webbstreaming.
Har QOA licens- eller patentavgifter?
Nej, QOA är helt patentfri och släppt under den tillåtande MIT-licensen, medan dess specifikation och logotyp tillhör det offentliga området (CC0).
Referens-URL:er & officiella resurser
- Officiell webbplats: https://qoaformat.org/
- Officiell specifikation (PDF): https://qoaformat.org/qoa-specification.pdf
- GitHub‑arkiv: https://github.com/phoboslab/qoa
- Författarens tekniska djupdykning: PhobosLab Blogg - QOA‑meddelande & prestandamätningar