Что такое аудиоформат QOA? Особенности, архитектура и как открыть файл
В цифровой аудиоинженерии и разработке игр балансировка размера файлов, задержки воспроизведения и нагрузки на ЦП всегда была сложной задачей. Стандартные форматы, такие как MP3, AAC и Ogg Vorbis, обеспечивают высокий коэффициент сжатия, но требуют сложных конвейеров декодирования, тяжёлой арифметики с плавающей запятой и значительных объёмов памяти. С другой стороны, несжатый PCM (.wav) обеспечивает воспроизведение без задержек ценой огромного использования диска и медленной доставки ресурсов.
Формат QOA (Quite OK Audio) закрывает эту нишу. Созданный Домиником Сзаблевски (создателем широко признанного формата изображений QOI), QOA — это открытый, с потерями аудиоформат, оптимизированный для молниеносного декодирования, минимальной сложности и предсказуемого использования памяти.
Что такое файл QOA?
Файл с расширением .qoa хранит сжатый цифровой аудио в формате Quite OK Audio. Он работает с данными pulse-code modulated (PCM) аудио глубиной 16 бит при частотах дискретизации от $1\text{ Hz}$ до $16,777,215\text{ Hz}$ и поддерживает до 31 аудиоканала.
В отличие от психоакустических кодеков, которые полагаются на преобразования в частотной области (например, Modified Discrete Cosine Transform или 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{ bits per sample}$ |
| Битрейт (44,1 кГц, стерео) | $\approx 278\text{ kbps}$ ($282.24\text{ kbps}$ полезная нагрузка) |
| Диапазон частоты дискретизации | $1\text{ Гц}$ по $16,777,215\text{ Гц}$ ($24\text{-bit}$ беззнаковый) |
| Поддерживаемые каналы | $1$ по $31$ аудиоканалов (Mono, Stereo, 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 - (Optional) Если собран с
HAS_DRLIBS=true,qoaconvтакже может напрямую транскодировать файлы.flacи.mp3.
Метод 2: Кодирование внутри движка (Godot Engine)
Начиная с Godot 4.3, разработчики игр могут импортировать несжатые файлы .wav и выбирать сжатие QOA непосредственно из панели импорта Godot. Это создаёт компактные игровые ресурсы, которые декодируются нативно с пренебрежимо малой задержкой процессора даже в тяжёлых игровых сценах.
Метод 3: Веб‑конвертеры в браузере
Несколько веб‑утилит на основе WebAssembly (например, размещённых на qoaformat.org и связанных открытых демо) позволяют пользователям перетаскивать стандартные аудиофайлы и загружать закодированный локально ресурс .qoa без необходимости выполнять команды в терминале.
Как открыть и воспроизвести файлы QOA
Поскольку QOA — это лёгкий формат, созданный в первую очередь для интеграции во время выполнения, обычные медиаплееры для потребителей могут требовать плагины или специальные сборки.
- Dedicated CLI Player (
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).
Справочные URL‑адреса и официальные ресурсы
- Официальный сайт: https://qoaformat.org/
- Официальная спецификация (PDF): https://qoaformat.org/qoa-specification.pdf
- Репозиторий GitHub: https://github.com/phoboslab/qoa
- Техническое погружение автора: Блог PhobosLab — объявление QOA и бенчмарки