Hvad er QOA-lydfilformatet? Funktioner, arkitektur og hvordan man åbner det
I digital lydteknik og spiludvikling har det altid været en udfordring at balancere filstørrelse, afspilningslatens og CPU-belastning. Standardformater som MP3, AAC og Ogg Vorbis tilbyder høje kompressionsforhold, men kræver komplekse dekodingspipeline, tung flydende‑punkt‑aritmetik og betydelige hukommelsesfodaftryk. I den anden ende af spektret giver ukomprimeret PCM (.wav) nul‑latens afspilning på bekostning af enorm diskforbrug og langsom levering af assets.
QOA (Quite OK Audio)-formatet adresserer dette hul. Skabt af Dominic Szablewski (skaberen af det bredt rostede QOI-billedformat), er QOA et open‑source, tabsgivende lydformat, der er skræddersyet til lynhurtig dekodning, minimal kompleksitet og forudsigelig hukommelsesbrug.
Hvad er en QOA-fil?
En fil med .qoa-udvidelsen gemmer komprimeret digital lyd ved hjælp af Quite OK Audio-formatet. Den arbejder med pulskode-moduleret (PCM) lyddata med 16-bit dybde over samplingshastigheder fra $1\text{ Hz}$ op til $16,777,215\text{ Hz}$ og understøtter op til 31 lydkanaler.
I modsætning til psykoakustiske codecs, der er afhængige af frekvensdomæne-transformationer (såsom Modified Discrete Cosine Transform eller MDCT), fungerer QOA udelukkende i tidsdomænet. Den komprimerer lyd til et fast forhold på præcis $3.2\text{ bits per sample}$, og opnår en konstant $5:1$ komprimeringsratio over rå 16-bit lineær PCM.
For standard CD-kvalitetslyd (44,1 kHz, stereo) opnår en QOA-stream en præcis, konstant bithastighed på:
$$\text{Bithastighed} = 44,100 \times 2 \times 3.2 = 282,240\text{ bit/s} \approx 278\text{ kbps}$$
Detaljerede funktioner ved QOA
1. Minimalistisk specifikation og implementering
Traditionelle moderne codecs kræver hundreder af sider med tekniske specifikationer og tusinder af kodelinjer for at implementere. I modsætning hertil passer den komplette QOA-formatspecifikation på en enkelt-side PDF, og den officielle referenceimplementation (qoa.h) består af cirka 400 linjer standard C-kode.
2. Tidsdomæne LMS-forudsigelse
QOA undgår beregningsintensive transformalgoritmer. I stedet anvender den et adaptivt Least Mean Squares (LMS) forudsigelsesfilter med fire historiske vægte pr. kanal. Ved at estimere fremtidige prøveværdier og kun registrere kvantiserede residualforskelle leverer QOA gennemsigtig perceptuel lydkvalitet uden tung CPU-brug.
3. Ekstremt hurtig afkodning
Fordi QOA udelukkende baserer sig på heltalsaritmetik og letvægtsoperationer, dekoder den op til $3\times$ hurtigere end Ogg Vorbis og overgår markant standard MP3-dekodere. Den dekoder endda hurtigere end Microsoft ADPCM, hvilket gør den ideel til lavstrøm-indlejret hardware, mikrokontrollere og realtidsspilmotorer.
4. Streaming‑klar chunked-arkitektur
QOA-filer er opdelt i selvstændige rammer, der indeholder op til $5,120$ prøver pr. kanal ($256$ segmenter af $20$ prøver). Hver ramme bærer sine egne LMS-filtervægte og historik, hvilket muliggør øjeblikkelig søgning, nul‑straffebaseret genoprettelse fra tabte pakker og dynamisk on‑the‑fly streaming uden obligatorisk global indeksering.
Vigtige egenskaber ved QOA
| Egenskab | Specifikation / Detalje |
|---|---|
| Filendelse | .qoa |
| Magiske Bytes | qoaf (0x71, 0x6f, 0x61, 0x66) |
| Udvikler / Skaber | Dominic Szablewski (PhobosLab) |
| Kompressionstype | Tabsgivende (tidsdomæne LMS-forudsigelse) |
| Komprimeringsforhold | Fast $5:1$ i forhold til 16-bit PCM |
| Lagring pr. prøve | Præcis $3.2\text{ bits per sample}$ |
| Bitrate (44,1 kHz, Stereo) | $\approx 278\text{ kbps}$ ($282.24\text{ kbps}$ payload) |
| Samplefrekvensområde | $1\text{ Hz}$ til $16,777,215\text{ Hz}$ ($24\text{-bit}$ uden fortegn) |
| Understøttede kanaler | $1$ til $31$ lydkanaler (Mono, Stereo, 5.1, 7.1, osv.) |
| Header overhead | 8-byte filheader, 8-byte rammeheader |
| Licensering | MIT (Kildekode) / CC0 (Specifikation & Logo) |
Sådan oprettes og kodes QOA-filer
Kodning af lyd til QOA er ligetil takket være forudbyggede udvikler‑binære filer og fællesskabets værktøjskæder.
Metode 1: Brug af den officielle qoaconv CLI
Den primære encoder distribueres direkte i det officielle reference‑lager.
- Klon repository’et og byg den binære fil:
git clone https://github.com/phoboslab/qoa.git cd qoa make - Konverter en ukomprimeret WAV-fil til QOA:
./qoaconv input.wav output.qoa - (Valgfrit) Hvis den er kompileret med
HAS_DRLIBS=true, kanqoaconvogså direkte transkode fra.flac- og.mp3-filer.
Metode 2: In‑engine kodning (Godot Engine)
Fra og med Godot 4.3 kan spiludviklere importere ukomprimerede .wav-filer og vælge QOA-komprimering direkte fra Godot Import-dokken. Dette producerer kompakte spilelementer, der afkodes native med ubetydelig CPU-latens under tunge gameplay-scener.
Metode 3: Webkonvertere i browseren
Flere webbaserede WebAssembly-værktøjer (såsom dem, der er hostet på qoaformat.org og relaterede open-source-demoer) giver brugerne mulighed for at trække og slippe standardlydfiler og downloade et kodet .qoa-asset lokalt uden at køre terminalkommandoer.
Sådan åbnes og afspilles QOA-filer
Da QOA er et letvægtsformat, der primært er bygget til runtime-integration, kan konventionelle forbruger-medieafspillere kræve plugins eller dedikerede builds.
- Dedikeret CLI-afspiller (
qoaplay): Det officielle repository kompileres tilqoaplay, som bruger native lydundersystemer (ALSA på Linux, CoreAudio på macOS, WASAPI på Windows) til at afspille.qoa-filer direkte:./qoaplay audio.qoa - Spilrammer & -motorer:
- Raylib: Indbygget support via
raudio-modulet. - Godot Engine: Fuld indbygget afspilningssupport (Godot 4.3+).
- Raylib: Indbygget support via
- Medieafspillere & Plugins:
- Qmmp: Avanceret multimedieafspiller med indbyggede QOA-dekodningsmoduler.
- OpenCubicPlayer: Klassisk tracker og lydfilafspiller, der understøtter QOA-streams.
- Audacious / foobar2000: Understøttet via open‑source fællesskabets input‑plugins.
- IDE & Udviklingsværktøjer:
- VS Code: QOA Preview-udvidelsen giver udviklere mulighed for at forhåndsvise og afspille
.qoa-lydklip direkte i deres kilde‑træ.
- VS Code: QOA Preview-udvidelsen giver udviklere mulighed for at forhåndsvise og afspille
Ofte stillede spørgsmål (FAQ)
Hvad står QOA for?
QOA står for Quite OK Audio, et hurtigt, enkelt, open-source lossy lydformat.
Er QOA-lyd tabsfri eller tabsgivende?
QOA er et lossy lydkomprimeringsformat, men det bevarer næsten gennemsigtig lydkvalitet for de fleste praktiske anvendelsestilfælde.
Hvor meget kompression giver QOA?
QOA komprimerer 16-bit ukomprimeret lyd med et konstant forhold på $5:1$ (præcis $3.2\text{ bits per sample}$).
Kan QOA erstatte MP3 eller AAC til generel musikstreaming?
Nej, QOA prioriterer ultrahurtig, letvægtsdekodning frem for maksimal båndbreddebesparelse, hvilket gør den bedre egnet til spil, mikrokontrollere og lavlatensapplikationer end høj‑tæthed web‑streaming.
Har QOA licens- eller patentgebyrer?
Nej, QOA er fuldstændig patentrettet og udgivet under den tilladende MIT-licens, mens dens specifikation og logo tilhører det offentlige domæne (CC0).
Reference-URL’er & officielle ressourcer
- Officielt websted: https://qoaformat.org/
- Officiel specifikation (PDF): https://qoaformat.org/qoa-specification.pdf
- GitHub-arkiv: https://github.com/phoboslab/qoa
- Forfatterens tekniske dybdegående analyse: PhobosLab Blog - QOA-meddelelse og benchmark-test