Cos’è il formato audio QOA? Caratteristiche, architettura e come aprirlo
Nell’ingegneria audio digitale e nello sviluppo di giochi, bilanciare la dimensione dei file, la latenza di riproduzione e il carico della CPU è sempre stato una sfida. Formati standard come MP3, AAC e Ogg Vorbis offrono alti rapporti di compressione ma richiedono pipeline di decodifica complesse, pesanti operazioni in virgola mobile e un notevole utilizzo di memoria. All’estremità opposta dello spettro, il PCM non compresso (.wav) fornisce una riproduzione a latenza zero a scapito di un enorme utilizzo del disco e di una lenta consegna delle risorse.
Il formato QOA (Quite OK Audio) colma questa lacuna. Creato da Dominic Szablewski (creatore del molto apprezzato formato immagine QOI), QOA è un formato audio lossy open-source progettato per una decodifica ultra‑veloce, complessità minima e utilizzo di memoria prevedibile.
Cos’è un file QOA?
Un file con estensione .qoa memorizza audio digitale compresso utilizzando il formato Quite OK Audio. Funziona su dati audio a modulazione di codice di impulso (PCM) a 16‑bit di profondità su frequenze di campionamento che vanno da $1\text{ Hz}$ fino a $16,777,215\text{ Hz}$ e supporta fino a 31 canali audio.
A differenza dei codec psicoacustici che si basano su trasformate nel dominio della frequenza (come la Trasformata Coseno Discreta Modificata o MDCT), QOA opera interamente nel dominio temporale. Comprende l’audio fino a un rapporto fisso di esattamente $3.2\text{ bit per campione}$, raggiungendo un rapporto di compressione costante di $5:1$ sui PCM lineari grezzi a 16‑bit.
Per audio di qualità CD standard (44,1 kHz, stereo), un flusso QOA ottiene un bitrate esatto e costante di:
$$\text{Bitrate} = 44,100 \times 2 \times 3.2 = 282,240\text{ bit/s} \approx 278\text{ kbps}$$
Caratteristiche dettagliate di QOA
1. Specifica e implementazione minimalista
I codec moderni tradizionali richiedono centinaia di pagine di specifiche tecniche e migliaia di righe di codice per essere implementati. Al contrario, l’intera specifica del formato QOA sta su un PDF di una sola pagina, e l’implementazione di riferimento ufficiale (qoa.h) consiste di circa 400 righe di codice C standard.
2. Predizione LMS nel dominio del tempo
QOA evita algoritmi di trasformazione computazionalmente intensivi. Invece, utilizza un filtro predittivo adattivo a Minimi Quadrati (LMS) con quattro pesi storici per canale. Stimando i valori futuri dei campioni e registrando solo le differenze residue quantizzate, QOA offre una qualità audio percettiva trasparente senza un uso intensivo della CPU.
3. Decodifica estremamente veloce
Poiché QOA si basa esclusivamente su aritmetica intera e operazioni leggere, decodifica fino a $3\times$ più velocemente rispetto a Ogg Vorbis e supera significativamente i decoder MP3 standard. Decodifica persino più velocemente di Microsoft ADPCM, rendendolo ideale per hardware embedded a basso consumo, microcontrollori e motori di gioco in tempo reale.
4. Architettura a blocchi pronta per lo streaming
I file QOA sono suddivisi in frame autonomi che contengono fino a $5,120$ campioni per canale ($256$ slice di $20$ campioni). Ogni frame porta i propri pesi del filtro LMS e la cronologia, consentendo una ricerca immediata, un recupero senza penalità da pacchetti persi e lo streaming dinamico on-the-fly senza indicizzazione globale obbligatoria.
Caratteristiche chiave di QOA
| Caratteristica | Specificazione / Dettaglio |
|---|---|
| Estensione file | .qoa |
| Byte Magici | qoaf (0x71, 0x6f, 0x61, 0x66) |
| Sviluppatore / Creatore | Dominic Szablewski (PhobosLab) |
| Tipo di compressione | Con perdita (predizione LMS nel dominio del tempo) |
| Rapporto di compressione | Fisso $5:1$ relativo a PCM a 16 bit |
| Memoria per campione | Esattamente $3.2\text{ bits per sample}$ |
| Bitrate (44,1 kHz, Stereo) | $\approx 278\text{ kbps}$ ($282.24\text{ kbps}$ carico utile) |
| Intervallo di frequenza di campionamento | $1\text{ Hz}$ a $16,777,215\text{ Hz}$ ($24\text{-bit}$ senza segno) |
| Canali supportati | $1$ a $31$ canali audio (Mono, Stereo, 5.1, 7.1, ecc.) |
| Sovraccarico dell’intestazione | Intestazione file di 8 byte, intestazione frame di 8 byte |
| Licenza | MIT (Codice sorgente) / CC0 (Specifiche e Logo) |
Come creare e codificare file QOA
Codificare audio in QOA è semplice grazie ai binari precompilati per sviluppatori e alle catene di strumenti della community.
Metodo 1: Utilizzare la CLI ufficiale qoaconv
L’encoder principale è distribuito direttamente all’interno del repository di riferimento ufficiale.
- Clona il repository e compila il binario:
git clone https://github.com/phoboslab/qoa.git cd qoa make - Converti un file WAV non compresso in QOA:
./qoaconv input.wav output.qoa - (Opzionale) Se compilato con
HAS_DRLIBS=true,qoaconvpuò anche transcodificare direttamente da file.flace.mp3.
Metodo 2: Codifica in motore (Godot Engine)
A partire da Godot 4.3, gli sviluppatori di giochi possono importare file .wav non compressi e selezionare la compressione QOA direttamente dal dock di importazione di Godot. Ciò produce asset di gioco compatti che si decodificano nativamente con una latenza CPU trascurabile durante scene di gioco intense.
Metodo 3: Convertitori web in-browser
Diversi strumenti WebAssembly basati sul web (come quelli ospitati su qoaformat.org e le relative demo open-source) consentono agli utenti di trascinare e rilasciare file audio standard e scaricare localmente un asset .qoa codificato senza eseguire comandi terminale.
Come aprire e riprodurre file QOA
Poiché QOA è un formato leggero progettato principalmente per l’integrazione a runtime, i lettori multimediali consumer convenzionali potrebbero richiedere plugin o build dedicate.
- Player CLI dedicato (
qoaplay): Il repository ufficiale viene compilato inqoaplay, che utilizza i sottosistemi audio nativi (ALSA su Linux, CoreAudio su macOS, WASAPI su Windows) per riprodurre direttamente i file.qoa:./qoaplay audio.qoa - Framework e motori di gioco:
- Raylib: Supporto nativo tramite il modulo
raudio. - Godot Engine: Supporto completo di riproduzione nativa (Godot 4.3+).
- Raylib: Supporto nativo tramite il modulo
- Media Player e Plugin:
- Qmmp: Lettore multimediale avanzato con moduli di decodifica QOA nativi.
- OpenCubicPlayer: Tracker classico e lettore di file audio che supporta flussi QOA.
- Audacious / foobar2000: Supportato tramite plugin di input della community open-source.
- IDE e Strumenti per Sviluppatori:
- VS Code: L’estensione QOA Preview consente agli sviluppatori di visualizzare in anteprima e riprodurre clip audio
.qoadirettamente all’interno della loro struttura di sorgente.
- VS Code: L’estensione QOA Preview consente agli sviluppatori di visualizzare in anteprima e riprodurre clip audio
Domande frequenti (FAQ)
Cosa significa QOA?
QOA sta per Quite OK Audio, un formato audio lossy veloce, semplice e open-source.
L’audio QOA è lossless o lossy?
QOA è un formato di compressione audio lossy, ma mantiene una qualità audio quasi trasparente per la maggior parte dei casi d’uso pratici.
Quanto compressione fornisce QOA?
QOA comprime audio non compresso a 16 bit con un rapporto costante di $5:1$ (esattamente $3.2\text{ bits per sample}$).
QOA può sostituire MP3 o AAC per lo streaming musicale generale?
No, QOA privilegia la decodifica ultra-veloce e leggera rispetto al massimo risparmio di larghezza di banda, rendendola più adatta per giochi, microcontrollori e applicazioni a bassa latenza rispetto allo streaming web ad alta densità.
QOA ha costi di licenza o brevetto?
No, QOA è completamente priva di brevetti e rilasciata sotto la permissiva MIT license, mentre la sua specifica e il logo appartengono al pubblico dominio (CC0).
URL di riferimento e risorse ufficiali
- Sito ufficiale: https://qoaformat.org/
- Specificazione ufficiale (PDF): https://qoaformat.org/qoa-specification.pdf
- Repository GitHub: https://github.com/phoboslab/qoa
- Approfondimento Tecnico dell’Autore: PhobosLab Blog - Annuncio QOA e Benchmark