Czym jest format pliku audio QOA? Funkcje, architektura i jak go otworzyć
W inżynierii dźwięku cyfrowego i tworzeniu gier, równoważenie rozmiaru pliku, opóźnienia odtwarzania i obciążenia CPU zawsze było wyzwaniem. Standardowe formaty, takie jak MP3, AAC i Ogg Vorbis, oferują wysokie współczynniki kompresji, ale wymagają skomplikowanych potoków dekodowania, intensywnych obliczeń zmiennoprzecinkowych i znacznych zużycia pamięci. Z drugiej strony, nieskompresowany PCM (.wav) zapewnia odtwarzanie bez opóźnień kosztem ogromnego zużycia dysku i wolnego dostarczania zasobów.
Format QOA (Quite OK Audio) wypełnia tę lukę. Stworzony przez Dominica Szablewskiego (twórcę szeroko chwalonego formatu obrazu QOI), QOA jest otwarto‑źródłowym, stratnym formatem audio, zaprojektowanym pod kątem błyskawicznego dekodowania, minimalnej złożoności i przewidywalnego zużycia pamięci.
Czym jest plik QOA?
Plik z rozszerzeniem .qoa przechowuje skompresowany dźwięk cyfrowy w formacie Quite OK Audio. Działa na danych audio modulowanych impulsowo-kodowo (PCM) o głębokości 16 bitów, przy częstotliwościach próbkowania od $1\text{ Hz}$ do $16,777,215\text{ Hz}$ i obsługuje do 31 kanałów audio.
W przeciwieństwie do kodeków psychoakustycznych, które opierają się na przekształceniach w dziedzinie częstotliwości (takich jak Zmodyfikowana Dyskretna Transformata Cosinusowa, MDCT), QOA działa całkowicie w dziedzinie czasu. Kompresuje dźwięk do stałego współczynnika dokładnie $3.2\text{ bits per sample}$, osiągając stały współczynnik kompresji $5:1$ w stosunku do surowego 16‑bitowego liniowego PCM.
Dla standardowego dźwięku w jakości CD (44,1 kHz, stereo) strumień QOA osiąga dokładną, stałą przepływność:
$$\text{Przepływność} = 44,100 \times 2 \times 3.2 = 282,240\text{ bitów/s} \approx 278\text{ kbps}$$
Szczegółowe funkcje QOA
1. Minimalistyczna specyfikacja i implementacja
Tradycyjne nowoczesne kodeki wymagają setek stron specyfikacji technicznych i tysięcy linii kodu do implementacji. Natomiast pełna specyfikacja formatu QOA mieści się w jednostronicowym PDF, a oficjalna implementacja referencyjna (qoa.h) składa się z około 400 linii standardowego kodu C.
2. Predykcja LMS w dziedzinie czasu
QOA unika obliczeniowo intensywnych algorytmów transformacji. Zamiast tego wykorzystuje adaptacyjny filtr predykcyjny Least Mean Squares (LMS) z czterema historycznymi wagami na kanał. Szacując przyszłe wartości próbek i zapisując jedynie kwantowane różnice resztkowe, QOA dostarcza przejrzystą percepcyjną jakość dźwięku bez dużego zużycia CPU.
3. Niezwykle szybkie dekodowanie
Ponieważ QOA opiera się wyłącznie na arytmetyce całkowitej i lekkich operacjach, dekoduje nawet $3\times$ szybciej niż Ogg Vorbis i znacząco przewyższa standardowe dekodery MP3. Dekoduje nawet szybciej niż Microsoft ADPCM, co czyni go idealnym dla niskoprądowych układów wbudowanych, mikrokontrolerów i silników gier w czasie rzeczywistym.
4. Architektura podzielona na fragmenty gotowa do strumieniowania
Pliki QOA są podzielone na samodzielne ramki zawierające do $5,120$ próbek na kanał ($256$ segmentów po $20$ próbek). Każda ramka niesie własne wagi filtru LMS i historię, co umożliwia natychmiastowe przewijanie, odzyskiwanie bez kar z utraconych pakietów oraz dynamiczne strumieniowanie w locie bez obowiązkowego globalnego indeksowania.
Kluczowe cechy QOA
| Cecha | Specyfikacja / Szczegół |
|---|---|
| Rozszerzenie pliku | .qoa |
| Bajty Magiczne | qoaf (0x71, 0x6f, 0x61, 0x66) |
| Programista / Twórca | Dominic Szablewski (PhobosLab) |
| Typ kompresji | Stratny (predykcja LMS w dziedzinie czasu) |
| Współczynnik kompresji | Stały $5:1$ względem 16-bitowego PCM |
| Pamięć na próbkę | Dokładnie $3.2\text{ bits per sample}$ |
| Przepustowość (44,1 kHz, Stereo) | $\approx 278\text{ kbps}$ ($282.24\text{ kbps}$ ładunek) |
| Zakres częstotliwości próbkowania | $1\text{ Hz}$ do $16,777,215\text{ Hz}$ ($24\text{-bit}$ bez znaku) |
| Obsługiwane kanały | $1$ do $31$ kanały audio (Mono, Stereo, 5.1, 7.1, itp.) |
| Nadmiar nagłówka | Nagłówek pliku 8‑bajtowy, nagłówek ramki 8‑bajtowy |
| Licencjonowanie | MIT (Kod źródłowy) / CC0 (Specyfikacja i logo) |
Jak tworzyć i kodować pliki QOA
Kodowanie dźwięku do QOA jest proste dzięki gotowym binariom deweloperskim i łańcuchom narzędzi społeczności.
Metoda 1: Użycie oficjalnego qoaconv CLI
Główny enkoder jest dystrybuowany bezpośrednio w oficjalnym repozytorium referencyjnym.
- Sklonuj repozytorium i zbuduj plik binarny:
git clone https://github.com/phoboslab/qoa.git cd qoa make - Konwertuj nieskompresowany plik WAV do QOA:
./qoaconv input.wav output.qoa - (Opcjonalnie) Jeśli skompilowano z
HAS_DRLIBS=true,qoaconvmoże również bezpośrednio transkodować pliki.flaci.mp3.
Metoda 2: Kodowanie w silniku (Godot Engine)
Od wersji Godot 4.3 programiści gier mogą importować nieskompresowane pliki .wav i wybierać kompresję QOA bezpośrednio w dokumencie importu Godota. To tworzy kompaktowe zasoby gry, które są dekodowane natywnie z pomijalnym opóźnieniem CPU podczas intensywnych scen rozgrywki.
Metoda 3: Konwertery internetowe w przeglądarce
Kilka internetowych narzędzi WebAssembly (takich jak te hostowane na qoaformat.org i powiązane otwarte demonstracje) umożliwia użytkownikom przeciąganie i upuszczanie standardowych plików audio oraz pobieranie zakodowanego zasobu .qoa lokalnie bez uruchamiania poleceń terminala.
Jak otwierać i odtwarzać pliki QOA
Ponieważ QOA jest lekkim formatem zaprojektowanym głównie do integracji w czasie wykonywania, tradycyjne odtwarzacze multimedialne mogą wymagać wtyczek lub dedykowanych wersji.
- Dedykowany odtwarzacz CLI (
qoaplay): Oficjalne repozytorium kompiluje się doqoaplay, który używa natywnych podsystemów audio (ALSA w Linuksie, CoreAudio w macOS, WASAPI w Windows) do bezpośredniego odtwarzania plików.qoa:./qoaplay audio.qoa - Frameworki i silniki gier:
- Raylib: Natywne wsparcie poprzez moduł
raudio. - Godot Engine: Pełne natywne wsparcie odtwarzania (Godot 4.3+).
- Raylib: Natywne wsparcie poprzez moduł
- Odtwarzacze multimedialne i wtyczki:
- Qmmp: Zaawansowany odtwarzacz multimedialny z natywnymi modułami dekodowania QOA.
- OpenCubicPlayer: Klasyczny tracker i odtwarzacz plików audio obsługujący strumienie QOA.
- Audacious / foobar2000: Wspierane poprzez otwartoźródłowe wtyczki wejściowe społeczności.
- IDE i narzędzia programistyczne:
- VS Code: Rozszerzenie QOA Preview umożliwia programistom podgląd i odtwarzanie klipów dźwiękowych
.qoabezpośrednio w drzewie źródłowym.
- VS Code: Rozszerzenie QOA Preview umożliwia programistom podgląd i odtwarzanie klipów dźwiękowych
Najczęściej zadawane pytania (FAQ)
Co oznacza skrót QOA?
QOA oznacza Quite OK Audio, szybki, prosty, otwarto‑źródłowy format stratny audio.
Czy audio QOA jest bezstratne czy stratne?
QOA jest formatem stratnym kompresji audio, ale utrzymuje prawie przezroczystą jakość dźwięku w większości praktycznych zastosowań.
Jaką kompresję zapewnia QOA?
QOA kompresuje 16‑bitowe nieskompresowane audio ze stałym współczynnikiem $5:1$ (dokładnie $3.2\text{ bity na próbkę}$).
Czy QOA może zastąpić MP3 lub AAC w ogólnym strumieniowaniu muzyki?
Nie, QOA priorytetyzuje ultraszybkie, lekkie dekodowanie ponad maksymalne oszczędności przepustowości, co sprawia, że jest lepiej dopasowane do gier, mikrokontrolerów i aplikacji o niskiej latencji niż wysokogęstościowe strumieniowanie w sieci.
Czy QOA ma opłaty licencyjne lub patenty?
Nie, QOA jest całkowicie wolne od patentów i wydane na liberalnej licencji MIT, podczas gdy jego specyfikacja i logo należą do domeny publicznej (CC0).
Adresy URL i oficjalne zasoby
- Oficjalna strona: https://qoaformat.org/
- Oficjalna specyfikacja (PDF): https://qoaformat.org/qoa-specification.pdf
- Repozytorium GitHub: https://github.com/phoboslab/qoa
- Techniczny przegląd autora: Blog PhobosLab - Ogłoszenie QOA i benchmarki