Що таке аудіоформат QOA? Особливості, архітектура та як його відкрити
У цифровій аудіоінженерії та розробці ігор балансування розміру файлу, затримки відтворення та навантаження процесора завжди було складним завданням. Стандартні формати, такі як MP3, AAC та Ogg Vorbis, забезпечують високі коефіцієнти стиснення, але вимагають складних конвеєрів декодування, важких операцій з плаваючою комою та значних обсягів пам’яті. На протилежному кінці спектру, нестиснений PCM (.wav) забезпечує відтворення без затримки за рахунок величезного використання дискового простору та повільної доставки ресурсів.
Формат QOA (Quite OK Audio) заповнює цю прогалину. Створений Домініком Сзаблевським (творцем широко оціненого формату зображень QOI), QOA — це відкритий, аудіо формат з втратами, розроблений для надшвидкого декодування, мінімальної складності та передбачуваного використання пам’яті.
Що таке файл QOA?
Файл з розширенням .qoa зберігає стисле цифрове аудіо у форматі Quite OK Audio. Він працює з даними аудіо, модуляції імпульсного коду (PCM), з глибиною 16 біт і частотою дискретизації від $1\text{ Hz}$ до $16,777,215\text{ Hz}$ і підтримує до 31 аудіоканалу.
На відміну від психоакустичних кодеків, які покладаються на перетворення у частотній області (наприклад, модифіковане дискретне косинусне перетворення або MDCT), QOA працює повністю у часовій області. Він стискає аудіо до фіксованого співвідношення точно $3.2\text{ bits per sample}$, досягаючи постійного коефіцієнту стискання $5:1$ над сирим 16‑бітним лінійним PCM.
Для стандартного аудіо CD‑якості (44,1 кГц, стерео) потік QOA досягає точної, постійної швидкості бітів:
$$\text{Bitrate} = 44,100 \times 2 \times 3.2 = 282,240\text{ bits/s} \approx 278\text{ kbps}$$
Детальні особливості QOA
1. Мінімалістична специфікація та реалізація
Традиційні сучасні кодеки вимагають сотні сторінок технічних специфікацій і тисячі рядків коду для реалізації. Навпаки, вся специфікація формату QOA вміщується в односторінковий PDF, а офіційна референс‑реалізація (qoa.h) складається приблизно з 400 рядків стандартного коду на C.
2. Прогнозування LMS у часовій області
QOA уникає обчислювально інтенсивних алгоритмів перетворення. Замість цього вона використовує адаптивний предиктивний фільтр найменших середніх квадратів (LMS) з чотирма історичними вагами на канал. Оцінюючи майбутні значення вибірок і записуючи лише квантизовані залишкові різниці, QOA забезпечує прозору сприйнятливу якість аудіо без великого навантаження на процесор.
3. Надзвичайно швидке декодування
Оскільки QOA покладається виключно на цілочисельну арифметику та легкі операції, вона декодує до $3\times$ швидше, ніж Ogg Vorbis і значно перевершує стандартні декодери MP3. Вона навіть декодує швидше, ніж Microsoft ADPCM, що робить її ідеальною для низьковольтного вбудованого обладнання, мікроконтролерів та реального часу ігрових движків.
4. Архітектура з розбиттям, готова до потокової передачі
Файли QOA розділені на автономні кадри, що містять до $5,120$ вибірок на канал ($256$ зрізів по $20$ вибірок). Кожен кадр містить власні ваги LMS‑фільтра та історію, що дозволяє миттєве перемотування, відновлення без штрафу після втрачених пакетів та динамічне потокове передавання «на льоту» без обов’язкового глобального індексування.
Ключові характеристики QOA
| Характеристика | Специфікація / Деталь |
|---|---|
| Розширення файлу | .qoa |
| Магічні байти | qoaf (0x71, 0x6f, 0x61, 0x66) |
| Розробник / Творець | Dominic Szablewski (PhobosLab) |
| Тип стиснення | З втратами (прогнозування LMS у часовій області) |
| Коефіцієнт стискання | Фіксоване $5:1$ відносно 16‑біт PCM |
| Обсяг на зразок | Точно $3.2\text{ біт на зразок}$ |
| Бітрейт (44.1 кГц, стерео) | $\approx 278\text{ кбіт/с}$ ($282.24\text{ кбіт/с}$ корисне навантаження) |
| Діапазон частоти дискретизації | $1\text{ Hz}$ to $16,777,215\text{ Hz}$ ($24\text{-bit}$ беззнаковий) |
| Підтримувані канали | $1$ to $31$ аудіоканали (моно, стерео, 5.1, 7.1, тощо.) |
| Накладка заголовка | 8-байтовий заголовок файлу, 8-байтовий заголовок кадру |
| Ліцензування | MIT (Вихідний код) / CC0 (Специфікація та логотип) |
Як створювати та кодувати файли QOA
Кодування аудіо у QOA просте завдяки готовим бінарним файлам для розробників та інструментальним ланцюжкам спільноти.
Метод 1: Використання офіційного qoaconv CLI
Основний кодувальник розповсюджується безпосередньо в офіційному репозиторії.
- Клонувати репозиторій і зібрати бінарний файл:
git clone https://github.com/phoboslab/qoa.git cd qoa make - Перетворити некомпресований WAV‑файл у QOA:
./qoaconv input.wav output.qoa - (Опціонально) Якщо зібрано з
HAS_DRLIBS=true,qoaconvможе безпосередньо транскодувати файли.flacта.mp3.
Метод 2: Кодування в движку (Godot Engine)
Починаючи з Godot 4.3, розробники ігор можуть імпортувати некомпресовані файли .wav і вибирати стиснення QOA безпосередньо з панелі імпорту Godot. Це створює компактні ігрові ресурси, які декодуються нативно з незначною затримкою процесора під час інтенсивних ігрових сцен.
Метод 3: Веб-конвертори в браузері
Кілька веб‑орієнтованих WebAssembly‑утиліт (наприклад, розміщених на qoaformat.org та пов’язаних відкритих демо) дозволяють користувачам перетягувати стандартні аудіофайли та завантажувати закодований .qoa ресурс локально без використання команд у терміналі.
Як відкривати та відтворювати файли QOA
Оскільки QOA — це легковажний формат, створений переважно для інтеграції під час виконання, звичайні медіаплеєри для споживачів можуть вимагати плагіни або спеціальні збірки.
- Присвячений CLI‑плеєр (
qoaplay): Офіційний репозиторій компілюється уqoaplay, який використовує нативні аудіосистеми (ALSA у Linux, CoreAudio у macOS, WASAPI у Windows) для прямого відтворення файлів.qoa:./qoaplay audio.qoa - Ігрові фреймворки та движки:
- Raylib: Нативна підтримка через модуль
raudio. - Godot Engine: Повна нативна підтримка відтворення (Godot 4.3+).
- Raylib: Нативна підтримка через модуль
- Медіаплеєри та плагіни:
- Qmmp: Просунутий мультимедійний плеєр з нативними модулями декодування QOA.
- OpenCubicPlayer: Класичний трекер та аудіофайловий плеєр, що підтримує потоки QOA.
- Audacious / foobar2000: Підтримується через відкриті плагіни вводу спільноти.
- IDE та інструменти розробника:
- VS Code: Розширення QOA Preview дозволяє розробникам переглядати та відтворювати звукові кліпи
.qoaбезпосередньо у їхньому дереві джерел.
- VS Code: Розширення QOA Preview дозволяє розробникам переглядати та відтворювати звукові кліпи
Поширені запитання (FAQ)
Що означає QOA?
QOA означає Quite OK Audio, швидкий, простий, відкритий формат аудіо з втратами.
Чи є аудіо QOA без втрат чи з втратами?
QOA — це з втратами формат аудіо стиснення, але він зберігає майже прозору якість звуку для більшості практичних випадків використання.
Яку ступінь стиснення забезпечує QOA?
QOA стискає 16‑бітне нестиснене аудіо з постійним співвідношенням $5:1$ (точно $3.2\text{ біт на вибірку}$).
Чи може QOA замінити MP3 або AAC для загального потокового відтворення музики?
Ні, QOA пріоритетно забезпечує надшвидке, легковагове декодування замість максимального зменшення пропускної здатності, що робить його більш придатним для ігор, мікроконтролерів та низьколатентних застосувань, ніж високощільне веб‑стримінг.
Чи має QOA ліцензійні або патентні збори?
Ні, QOA повністю вільний від патентів і випущений під ліберальною ліцензією MIT, тоді як його специфікація та логотип належать публічному достоянию (CC0).
Посилання та офіційні ресурси
- Офіційний веб‑сайт: https://qoaformat.org/
- Офіційна специфікація (PDF): https://qoaformat.org/qoa-specification.pdf
- Репозиторій GitHub: https://github.com/phoboslab/qoa
- Технічний погляд автора: Блог PhobosLab — Оголошення QOA та бенчмарки