Минута стереозаписи с параметрами компакт-диска занимает в WAV (WAVE file)WAV-файл (WAVE file) — Звуковой файл со структурой RIFF и типом формы WAVE. Чанк fmt описывает параметры звука, чанк data содержит отсчёты; обычно это несжатый PCM. около 10,6 млн байт. Во FLAC (Free Lossless Audio Codec)FLAC (Free Lossless Audio Codec) — Формат сжатия звука без потерь: блоки PCM кодируются предсказанием по предыдущим отсчётам и остатком в кодах Райса. Описан в RFC 9639. та же минута обычно занимает чуть больше половины этого объёма, а в MP3 (MPEG-1/2 Audio Layer III)MP3 (MPEG-1/2 Audio Layer III) — Формат сжатия звука с потерями: гибридный банк фильтров, психоакустическая модель, неравномерное квантование и коды Хаффмана в кадрах по 1152 отсчёта. с битрейтом (bit rate)битрейт (bit rate) — Число бит на секунду звучания. У несжатого PCM равен произведению частоты дискретизации, разрядности и числа каналов: для CD 1 411 200 бит/с. 128 кбит/с — 0,96 млн байт, в 11 раз меньше. За этими числами стоят два разных подхода. FLAC убирает предсказуемую часть данных и после распаковки возвращает те же числа. MP3 отбрасывает то, что по модели слуха не будет услышано, и возвращает другие числа, близкие на слух.
AIFF (Audio Interchange File Format)AIFF (Audio Interchange File Format) — Формат звукового файла Apple на основе контейнера IFF: чанки COMM с параметрами и SSND с отсчётами PCM, числа записаны старшим байтом вперёд. хранит те же отсчёты (sample)отсчёт (sample) — Значение сигнала в один момент дискретизации, одно число. В звукозаписи его также называют сэмплом. PCM (pulse-code modulation, PCM)импульсно-кодовая модуляция (pulse-code modulation, PCM) — Представление сигнала последовательностью квантованных отсчётов, взятых через равные промежутки времени. В WAV код формата 1 означает PCM с целыми отсчётами., что и WAV, без сжатия, поэтому с него удобно начать сравнение. После него разобраны FLAC и MP3, включая то, как MP3 опирается на психоакустику (psychoacoustics)психоакустика (psychoacoustics) — Раздел науки о связи физических свойств звука с тем, что слышит человек: громкостью, высотой, направлением и слышимостью одних звуков на фоне других.; AAC, Opus и ALAC сведены в итоговую таблицу.
Битрейт и два способа сжатия
Битрейтбитрейт (bit rate) — Число бит на секунду звучания. У несжатого PCM равен произведению частоты дискретизации, разрядности и числа каналов: для CD 1 411 200 бит/с. — число бит на секунду звучания. У несжатого PCMимпульсно-кодовая модуляция (pulse-code modulation, PCM) — Представление сигнала последовательностью квантованных отсчётов, взятых через равные промежутки времени. В WAV код формата 1 означает PCM с целыми отсчётами. он определяется параметрами записи:
- битрейт, бит/с;
- частота дискретизации, кадров в секунду;
- разрядность, бит на отсчёт;
- число каналов.
Для компакт-диска бит/с. Это 176 400 байт в секунду и 10 584 000 байт в минуту. В битрейтах кодеков (codec)кодек (codec) — Алгоритм или программа, которая кодирует сигнал в сжатый поток и декодирует его обратно. Формат файла при этом задаёт упаковку данных и метаданных. приставка «кило» означает 1000: 128 кбит/с — это 128 000 бит/с.
Уменьшить битрейт можно двумя способами. Сжатие без потерь (lossless compression)сжатие без потерь (lossless compression) — Уменьшение объёма данных, после которого распаковка возвращает в точности исходные отсчёты. Так работают FLAC и ALAC. находит в данных закономерности и записывает их короче; распаковка возвращает в точности исходные числа. Сжатие с потерями (lossy compression)сжатие с потерями (lossy compression) — Уменьшение объёма за счёт замены сигнала приближением: восстановленные отсчёты отличаются от исходных. Так работают MP3, AAC и Opus. заменяет сигнал приближением: восстановленные отсчёты отличаются от исходных, и разницу уже не вернуть (RFC 9639, разд. 3).
Программу, которая кодирует и декодирует сигнал, называют кодекомкодек (codec) — Алгоритм или программа, которая кодирует сигнал в сжатый поток и декодирует его обратно. Формат файла при этом задаёт упаковку данных и метаданных.. Формат файла задаёт, как закодированные данные упакованы вместе с параметрами и метаданными. WAV и AIFF — контейнеры: внутри обычно несжатый PCM, но код формата допускает и другие способы записи. FLAC и MP3 определяют и способ кодирования, и порядок данных в потоке.
AIFF: тот же PCM в порядке big-endian
AIFFAIFF (Audio Interchange File Format) — Формат звукового файла Apple на основе контейнера IFF: чанки COMM с параметрами и SSND с отсчётами PCM, числа записаны старшим байтом вперёд. описан Apple в 1988–1989 годах (Apple, AIFF 1.3). Он следует стандарту контейнеров EA IFF 85: как и в WAV, файл состоит из чанковчанк (chunk) — Блок файла RIFF: идентификатор из четырёх символов, 32-битный размер данных и сами данные. После данных нечётной длины стоит нулевой байт выравнивания, в размер он не входит. с четырёхсимвольным идентификатором, 32-битным размером и данными, а после данных нечётной длины стоит нулевой байт выравнивания. Главное отличие от WAV — порядок байтов. Многобайтовые числа в AIFF записаны старшим байтом вперёд (big-endian)порядок байтов big-endian (big-endian) — Запись многобайтового числа, при которой старший байт идёт первым. Число 44 100 = 0xAC44 в четырёх байтах хранится как 00 00 AC 44., как в процессорах Motorola 68000 тогдашних компьютеров Macintosh.
Внешний чанк FORM содержит тип AIFF и вложенные чанки. Обязателен COMM с параметрами звука; SSND с отсчётами нужен, если звук не пустой. Порядок чанков спецификация не задаёт, поэтому их читают так же, как в WAV: по идентификатору и размеру, пропуская незнакомые.
| Поле | Байты в файле | Значение |
|---|---|---|
| ckID | 43 4F 4D 4D | COMM |
| ckSize | 00 00 00 12 | 18 байт данных |
| numChannels | 00 02 | 2 канала |
| numSampleFrames | 00 01 58 88 | 88 200 кадров |
| sampleSize | 00 10 | 16 бит |
| sampleRate | 40 0E AC 44 00 00 00 00 00 00 | 44 100 Гц |
Число кадров в AIFF записано явно, а в WAV его вычисляют из размера данных. Кадр здесь означает то же, что в WAV: по одному отсчёту каждого канала.
Частота хранится 80-битным числом с плавающей точкой (extended). Первые 2 байта — знак и 15-битный показатель со смещением 16 383, остальные 8 байт — 64-битная значащая часть с явным целым битом. Значение равно (Wikipedia, Extended precision). В примере и , поэтому значение . В дампе после 40 0E видны байты AC 44: это число 44 100, которое в WAV записано как 44 AC.
Чанк SSND начинается двумя 32-битными полями offset и blockSize для выравнивания данных по блокам; обычно оба равны нулю. Затем подряд идут кадры. Отсчёты — целые в дополнительном коде (two’s complement)дополнительный код (two’s complement) — Представление знакового целого в N битах: при установленном старшем бите беззнаковое значение этих битов уменьшают на 2ᴺ. Диапазон — от −2ᴺ⁻¹ до 2ᴺ⁻¹−1; у нуля одна запись., старший байт первым: 16-битный отсчёт −2 записан как FF FE, а в WAV — как FE FF. 8-битные отсчёты в AIFF тоже со знаком, тогда как в WAV 8 бит хранятся без знака со смещением 128. Если разрядность (bit depth)разрядность (bit depth) — Число бит для представления одного квантованного отсчёта. B бит дают 2ᴮ кодов; при равномерном квантовании шаг зависит также от полного диапазона сигнала. не кратна 8, отсчёт выравнивают по старшим битам в целом числе байтов, а младшие биты заполняют нулями: 12-битный отсчёт занимает 2 байта.
AIFF-C: поле для способа сжатия
Расширение AIFF-C (1991) меняет тип внешнего чанка на AIFC, добавляет чанк версии FVER и два поля в COMM: четырёхсимвольный код сжатия compressionType и его название для людей (Apple, AIFF-C). Код NONE означает обычный PCM. Исходная спецификация перечисляла также сжатие MACE с отношением 3:1 и 6:1. Позже появились коды sowt (PCM с младшим байтом первым), fl32 и fl64 (числа с плавающей точкой), ulaw и alaw (Peter Kabal, AIFF / AIFF-C). Поэтому файл с расширением .aif не обязательно хранит несжатые отсчёты старшим байтом вперёд: способ записи проверяют по COMM.
FLAC: сжатие без потерь
FLACFLAC (Free Lossless Audio Codec) — Формат сжатия звука без потерь: блоки PCM кодируются предсказанием по предыдущим отсчётам и остатком в кодах Райса. Описан в RFC 9639. хранит PCM с 1–8 каналами, частотой до 1 048 575 Гц и разрядностью от 4 до 32 бит. С 2024 года формат описан стандартом IETF (RFC 9639). Сжатие работает, потому что соседние отсчёты звука сильно связаны: по нескольким прошлым значениям можно неплохо угадать следующее. FLAC использует только эту краткосрочную связь и смотрит назад не больше чем на 32 отсчёта, тогда как архиваторы общего назначения ищут повторы по словарю (RFC 9639, разд. 1).
Кодер выполняет четыре шага (разд. 4): делит запись на блоки, для стерео (stereo)стерео (stereo) — Аудиоформат с двумя каналами, обычно левым и правым. Кадр несжатых стереоданных содержит два отсчёта одного момента времени. выбирает преобразование каналов, подбирает для каждого канала предсказатель и записывает остаток кодом переменной длины. Декодер проходит те же шаги в обратном порядке. Все вычисления целочисленные, поэтому обратный путь точно восстанавливает отсчёты.
Предсказание и остаток
Линейное предсказание (linear prediction)линейное предсказание (linear prediction) — Оценка отсчёта взвешенной суммой нескольких предыдущих отсчётов. Во FLAC используются фиксированные предсказатели порядка 0–4 и предсказатели с записанными коэффициентами. оценивает отсчёт взвешенной суммой предыдущих отсчётов. Кодер записывает не сам отсчёт, а остаток (prediction residual)остаток предсказания (prediction residual) — Разность между отсчётом и его предсказанием. При удачном предсказании остаток близок к нулю и записывается меньшим числом бит, чем отсчёт.:
- отсчёт с номером , целое;
- предсказание по предыдущим отсчётам, целое;
- остаток, целое.
Декодер вычисляет то же предсказание по уже восстановленным отсчётам и прибавляет остаток. Если предсказание удачное, остаток близок к нулю и записывается меньшим числом бит.
FLAC определяет пять фиксированных предсказателей порядка от 0 до 4 (таблица 2). Порядок — сколько предыдущих отсчётов использует предсказатель. Коэффициенты известны и кодеру, и декодеру, поэтому в файле записывают только порядок (RFC 9639, разд. 9.2.5).
| Порядок | Предсказание x̂[n] | Что предполагается |
|---|---|---|
| 0 | 0 | ничего: остаток равен отсчёту |
| 1 | x[n−1] | значение не меняется |
| 2 | 2x[n−1] − x[n−2] | значения лежат на прямой |
| 3 | 3x[n−1] − 3x[n−2] + x[n−3] | значения лежат на параболе |
| 4 | 4x[n−1] − 6x[n−2] + 4x[n−3] − x[n−4] | значения лежат на кубической кривой |
Предсказатели связаны с разностями соседних значений. Порядок 2 предполагает, что вторая разность равна нулю, и продолжает прямую через два последних отсчёта; его остаток и есть вторая разность. Возьмём отсчёты 100, 130, 155, 175, 190, 200. Для предсказание , остаток . Дальше остаток тоже равен −5: значения лежат на параболе, у которой постоянна вторая разность. Порядок 3 здесь даёт нулевой остаток.
Первые отсчётов предсказать нечем: каждый подкадр, то есть один канал кадра, кодируется независимо от предыдущих. Эти отсчёты разогрева (warm-up samples) записывают как есть, полной разрядностью.
Кроме фиксированных, FLAC допускает предсказатель с произвольными целыми коэффициентами: до 32 коэффициентов, их разрядность и сдвиг вправо записаны в подкадре (разд. 9.2.6). Он точнее описывает сложный сигнал, но коэффициенты занимают место. В потоковом подмножестве для частот до 48 кГц порядок не больше 12 (разд. 7). Есть и два особых подкадра: постоянный, когда все отсчёты блока равны, как в цифровой тишине, и подкадр без сжатия (verbatim) для сигнала, который не удаётся предсказать (разд. 4.3).
Коды Райса
Остаток — в основном небольшие числа с редкими большими значениями. Для таких данных FLAC использует код Райса (Rice code)код Райса (Rice code) — Код переменной длины для неотрицательных целых: частное от деления на 2^k записывается унарно, остаток — k битами. Короток для чисел около нуля.: короткий код для чисел около нуля и всё более длинный для далёких от нуля (разд. 4.4).
Сначала знак убирают свёрткой (zigzag): 0, −1, 1, −2, 2 … переходят в 0, 1, 2, 3, 4 …
- свёрнутый остаток, целое .
Затем делят на с остатком, где — параметр Райса. Частное записывают в унарном коде: столько нулей, сколько оно равно, и единица в конце. Остаток от деления записывают битами. Деление на степень двойки с остатком сводится к разбиению двоичной записи на старшие и младшие биты. Длина кода:
- длина кода, бит;
- параметр Райса, целое от 0 до 14 при 4-битном поле.
Пример из RFC 9639, разд. 9.2.7.2: , . Старшая часть записывается как 00001, младшие три бита 110 — как есть. Получается код 00001110 длиной 8 бит. Остаток −5 из предыдущего примера даёт ; при частное 2 и остаток 1, код 001 01 — 5 бит вместо 16 у исходного отсчёта.
Выбор — компромисс. Малый удлиняет унарную часть у больших чисел, большой тратит лишние младшие биты на малые. Кодер выбирает с наименьшей суммой длин. Остаток подкадра можно разбить на частей со своим параметром в каждой. Параметр занимает 4 или 5 бит, а значение из одних единиц — escape-код: такая часть записана числами фиксированной длины без кода Райса (разд. 9.2.7).
Попробовать предсказание
Визуализация 1 ниже показывает, как порядок предсказания меняет остаток и размер подкадра. Тон 1 кГц при 44,1 кГц меняется плавно: на период (period)период (period) — Время одного полного повторения периодического колебания. Обозначается T, измеряется в секундах и связано с частотой как T = 1/f. приходится 44 отсчёта, и порядок 4 сокращает подкадр почти втрое. У тона 5 кГц на период меньше 9 отсчётов, соседние значения сильно различаются, и выигрыш меньше. Шум не предсказывается: с ростом порядка остаток только растёт, и кодер записал бы подкадр без сжатия.
- отсчёт
- предсказание
- остаток
- разогрев: хранится как есть
Тон 1 кГц, порядок 2. Остаток от −162 до 146 при отсчётах до ±8 000. Лучший параметр Райса k = 7; подкадр — 324 бита, 62 % от записи без сжатия.
- Заголовок подкадра и поля остатка
- 18 бит
- Разогрев
- 2 × 16 = 32 бита
- Остаток: 30 кодов, k = 7
- 274 бита
- Итого
- 324 бита — 62 %
- Без сжатия
- 8 + 32 × 16 = 520 бит
| n | x[n] | x̂[n] | e[n] | u | код Райса |
|---|---|---|---|---|---|
| 2 | 2 249 | 2 272 | −23 | 45 | 10101101 |
| 3 | 3 316 | 3 362 | −46 | 91 | 11011011 |
| 4 | 4 316 | 4 383 | −67 | 133 | 010000101 |
| 5 | 5 229 | 5 316 | −87 | 173 | 010101101 |
Ещё 26 остатков кодируются так же; u — остаток со свёрнутым знаком.
Стерео: середина и разность
Левый и правый каналы музыки часто похожи. Для каждого блока FLAC может заменить пару каналов на середину и разность (mid-side stereo)мид-сайд (mid-side stereo) — Представление двух стереоканалов через их сумму и разность с выбранной нормировкой. Позволяет отдельно обрабатывать общую и разностную составляющие, а в кодеках — уменьшать избыточность похожих каналов.: , (разд. 4.2). Здесь — сдвиг вправо на один бит. Когда каналы похожи, разность мала и кодируется коротко. Возможны и смешанные варианты: левый канал и разность или разность и правый канал.
Сдвиг отбрасывает младший бит суммы, но потери нет: и всегда одной чётности, и отброшенный бит восстанавливается по чётности . Пусть , . Тогда , . Декодер вычисляет ; нечётно, поэтому прибавляет 1 и получает 1997. Затем , . Разности нужен один дополнительный бит: при 16-битных каналах лежит от −65 535 до 65 535.
Метаданные и кадры
Файл начинается с четырёх байтов fLaC. Затем идут блоки метаданных, каждый с 4-байтовым заголовком: признак последнего блока (1 бит), тип (7 бит) и длина (24 бита). Первым обязательно идёт STREAMINFO (таблица 3). Остальные блоки необязательны: PADDING оставляет место для правки тегов без перезаписи файла, SEEKTABLE хранит точки быстрого перехода, VORBIS_COMMENT — текстовые теги, PICTURE — обложку; есть также CUESHEET и APPLICATION (разд. 8). Числа во FLAC записаны старшим байтом вперёд; исключение — длины полей в тегах VORBIS_COMMENT (разд. 5).
| Поле | Бит | Содержание |
|---|---|---|
| Наименьший размер блока | 16 | без учёта последнего блока |
| Наибольший размер блока | 16 | от 16 до 65 535 |
| Наименьший размер кадра | 24 | байт; 0 — неизвестно |
| Наибольший размер кадра | 24 | байт; 0 — неизвестно |
| Частота дискретизации | 20 | Гц |
| Число каналов − 1 | 3 | от 1 до 8 каналов |
| Разрядность − 1 | 5 | от 4 до 32 бит |
| Число отсчётов на канал | 36 | 0 — неизвестно |
| MD5 | 128 | контрольная сумма исходных отсчётов |
MD5 считается по всем отсчётам, чередующимся по каналам, в знаковом виде младшим байтом вперёд (разд. 8.2). После декодирования сумму можно вычислить заново и проверить, что восстановлены те же числа, даже если поток не содержит ошибок формы.
Заголовок кадра начинается с 15-битного синхрокода 111111111111100 и бита стратегии блоков, поэтому первые 2 байта кадра — FF F8 при постоянном размере блока или FF F9 при переменном. Дальше записаны размер блока, частота, каналы и разрядность, в основном короткими табличными кодами, затем номер кадра и контрольная сумма CRC-8 заголовка. За заголовком идут подкадры: по одному на канал, отсчёты разных каналов не чередуются. Кадр завершают нулевые биты до границы байта и CRC-16 всего кадра (разд. 9). Синхрокод и параметры в каждом заголовке позволяют начать декодирование с середины потока.
Размер блока — от 16 до 65 535 отсчётов на канал; в потоковом подмножестве при частоте до 48 кГц — не больше 4608 (разд. 4.1, разд. 7). Слишком короткие блоки тратят место на заголовки, а в слишком длинных свойства сигнала меняются, и одному предсказателю труднее описать весь блок.
Сколько экономит FLAC
Степень сжатия без потерь зависит от записи. В сравнении Martijn van Beurden на 64 записях с параметрами компакт-диска FLAC 1.4.3 в среднем сократил файлы до 52–57 % от размера WAV в зависимости от настроек кодера; ALAC — до 53–55 % (Lossless audio codec comparison, revision 6, CDDA). Минута стереозаписи CD тогда занимает около 5,5–6 млн байт. Гарантии экономии нет: шум не предсказывается, его подкадры записываются без сжатия, и с заголовками файл получается чуть больше исходного PCM.
MP3: сжатие с потерями
MP3MP3 (MPEG-1/2 Audio Layer III) — Формат сжатия звука с потерями: гибридный банк фильтров, психоакустическая модель, неравномерное квантование и коды Хаффмана в кадрах по 1152 отсчёта. — разговорное название MPEG-1/2 Audio Layer III. Он стандартизирован в ISO/IEC 11172-3 в 1992 году, а MPEG-2 добавил частоты 16; 22,05 и 24 кГц (Brandenburg, разд. 2, 3.1). Стандарт задаёт формат потока и декодер, а способ кодирования оставляет разработчику. Поэтому кодеры при одном битрейте звучат по-разному, а декодеры, соответствующие стандарту, слышимо не различаются (Brandenburg, разд. 3.2, 5.3, 5.4).
Общий принцип перцептивного кодированияперцептивное кодирование (perceptual audio coding) — Сжатие звука с потерями, при котором модель слуха оценивает порог маскировки, а шум квантования стараются удержать ниже него. Применяется в MP3 и AAC. разобран в статье о психоакустике: кодер раскладывает сигнал на частотные составляющие, оценивает порог маскировки (masking threshold)порог маскировки (masking threshold) — Уровень, ниже которого тестовый звук не слышен при наличии маскирующего звука. Выше порога слышимости в тишине рядом с маскером по частоте и времени. и квантует составляющие настолько грубо, чтобы шум квантования (quantization)квантование (quantization) — Замена значения отсчёта одним из конечного набора представимых уровней. Разность между выбранным уровнем и исходным значением называется ошибкой квантования. оставался под порогом. Ниже разобрано, из каких блоков состоит кодер MP3 и где именно он опирается на свойства слуха.
Путь сигнала в кодере
Кодер берёт по 1152 отсчёта на канал — это один кадр MP3 из двух гранул по 576 отсчётов. Сначала многофазный банк фильтров делит сигнал на 32 полосы равной ширины: при 44,1 кГц каждая шириной Гц. Затем модифицированное дискретное косинусное преобразование (modified discrete cosine transform, MDCT)модифицированное дискретное косинусное преобразование (modified discrete cosine transform, MDCT) — Преобразование блока отсчётов в частотные линии с перекрытием соседних блоков. В MP3 делит каждую из 32 полос ещё на 18 линий. делит каждую полосу ещё на 18 частей. Гранула превращается в 576 частотных линий, около 38 Гц на линию. Такой каскад называют гибридным банком фильтров (Brandenburg, разд. 3.3.1; Raissi, разд. 6.1–6.2). Высокое разрешение по частоте позволяет точнее следовать порогу маскировки и лучше сжимать тональные звуки.
Параллельно кодер вычисляет спектрспектр (spectrum) — Представление сигнала через его частотные составляющие: их частоты, амплитуды и фазы. Ограничение спектра задаёт, какие частоты допускаются в сигнале. быстрым преобразованием Фурье (БПФ) на 1024 точки и передаёт его психоакустической модели. Модель находит преобладающие тональные составляющие, оценивает частотную маскировку и выдаёт допустимый уровень шума для каждой полосы масштабного множителя. Эти полосы примерно соответствуют критическим полосам (critical band)критическая полоса (critical band) — Полоса частот, в пределах которой слух объединяет составляющие при оценке громкости и маскировки. Около 100 Гц до 500 Гц, выше — примерно 20 % средней частоты.; при длинных окнах их 21 (Brandenburg, разд. 3.3.2; Raissi, разд. 5.1.2, 6.4). Модель не входит в стандарт, и от неё больше всего зависит качество кодера.
Модель следит и за резкими изменениями сигнала. Если в гранулу попадает атака, MDCT переключается с одного длинного окна на три коротких: разрешение по частоте падает, зато шум квантования распределяется по более короткому отрезку времени. Так кодер удерживает предэхопредэхо (pre-echo) — Артефакт перцептивного кодирования: шум квантования распределяется по блоку и звучит раньше резкой атаки. Слышен, если выходит за время предмаскировки. в пределах предмаскировки. Переход сглаживают окна-переходники: стартовое перед короткими и завершающее после них (Raissi, разд. 6.2). Даже короткие блоки MP3 длиннее, чем у AAC: импульсная характеристика (impulse response, IR)импульсная характеристика (impulse response, IR) — Отклик линейной системы на единичный импульс. В свёрточной реверберации сохранённая характеристика описывает отклик для выбранного положения источника и приёмника. 18,6 мс против 5,3 мс при 48 кГц (Brandenburg, разд. 4.2).
Квантование неравномерное: значение возводят в степень (power)степень (power) — При положительном целом показателе m запись aᵐ означает произведение m одинаковых множителей a. Показатель 0 даёт 1 при ненулевом основании, отрицательный целый показатель — обратную величину соответствующей положительной степени. 3/4, и большие значения записываются менее точно. Общий шаг квантования (quantization step)шаг квантования (quantization step) — Разность между соседними уровнями равномерного квантования. Для диапазона шириной R, разделённого на 2ᴮ равных интервалов, шаг Δ = R/2ᴮ. задаёт глобальное усиление, а масштабные множители (scalefactors) уменьшают шум в отдельных полосах. Их подбирают двумя вложенными циклами анализа через синтез (Brandenburg, разд. 3.3.3). Внутренний цикл увеличивает шаг, пока закодированные данные не уложатся в доступное число бит. Внешний проверяет шум каждой полосы: если он выше допустимого по модели, множитель этой полосы увеличивается, и внутренний цикл повторяется. Вместе циклы могут не сойтись, поэтому кодер прерывает их по дополнительным условиям.
Квантованные значения записываются кодом Хаффмана (Huffman coding)код Хаффмана (Huffman coding) — Префиксный код, в котором частым значениям назначены короткие кодовые слова, а редким — длинные. В MP3 кодирует квантованные частотные линии.: частым малым значениям достаются короткие коды. Значения кодируются парами, а в области, где остались только −1, 0 и 1, — четвёрками; верхние линии, ставшие нулями, не передаются вовсе. Для разных участков спектра кодер выбирает подходящую таблицу кодов (Brandenburg, разд. 3.3.3; Raissi, разд. 5.1.2).
| Блок кодера | Что делает | Свойство слуха |
|---|---|---|
| Психоакустическая модель | оценивает допустимый шум в каждой полосе | частотная маскировка, критические полосы, порог слышимости в тишине |
| Внешний цикл квантования | увеличивает точность в полосах, где шум выше допустимого | шум ниже порога маскировки не слышен |
| Переключение окон | включает короткие окна у атак | предмаскировка скрывает шум лишь около 1–2 мс до начала звука |
| Ограничение полосы | не передаёт частоты выше среза при малом битрейте | в музыке срез около 16 кГц трудно услышать |
| Интенсивностное стерео | передаёт верхние полосы одним сигналом с соотношением уровней каналов | на высоких частотах направление определяется главным образом разностью уровней |
Первые два ряда используют частотную маскировку, критические полосы и порог слышимости (threshold of hearing)порог слышимости (threshold of hearing) — Минимальный уровень звука, который слушатель способен обнаружить в заданных условиях. Зависит от частоты и слушателя; опорные 20 мкПа не задают его для всех частот.: допустимым шумом обычно считают больший из порогов маскировки и слышимости в тишине. Третий ряд связан с временной маскировкой (temporal masking)временная маскировка (temporal masking) — Маскировка тестового звука, звучащего до начала маскера (предмаскировка) или после его окончания (постмаскировка).. Ограничение полосы Brandenburg объясняет так: автору не известен эксперимент, который бы надёжно показал, что слушатели отличают музыку с частотами до 20 кГц от той же музыки с полосой около 16 кГц. При этом постоянный срез звучит лучше, чем граница, которая меняется от кадра к кадру (разд. 5.7). Последний ряд опирается на локализацию по разности уровней и, по Brandenburg, может сдвигать звуковую картину (разд. 3.1).
Кадр MP3
Поток MP3 состоит из кадров по 1152 отсчёта на канал (MPEG-1): 26,1 мс при 44,1 кГц и 24 мс при 48 кГц. Каждый кадр начинается с 4-байтового заголовка (таблица 5). За ним идут необязательная контрольная сумма CRC-16, побочная информация (17 байт для моно (mono)моно (mono) — Аудиоформат с одним каналом. Кадр несжатых монофонических данных содержит один отсчёт. и 32 для стерео), основные данные — масштабные множители и коды Хаффмана — и необязательные дополнительные данные (Raissi, разд. 5.1).
| Поле | Бит | Значение в примере |
|---|---|---|
| Синхрослово | 11 | все единицы |
| Версия MPEG | 2 | 11 — MPEG-1 |
| Слой | 2 | 01 — Layer III |
| Защита | 1 | 1 — без CRC |
| Индекс битрейта | 4 | 1001 — 128 кбит/с |
| Частота | 2 | 00 — 44 100 Гц |
| Заполнение | 1 | 0 — без дополнительного байта |
| Частный бит | 1 | 0 |
| Режим каналов | 2 | 01 — совместное стерео |
| Расширение режима | 2 | 10 — M/S включено, интенсивностное выключено |
| Авторское право | 1 | 0 |
| Оригинал | 1 | 1 |
| Предыскажения | 2 | 00 — нет |
Длину кадра в байтах вычисляют по битрейту и частоте (Supurovic, MPEG Audio Frame Header):
- длина кадра вместе с заголовком, байт;
- битрейт из заголовка, бит/с;
- бит заполнения: 0 или 1 байт.
Число 144 — это : кадр длится 1152 отсчёта, а деление на 8 переводит биты в байты. При 128 кбит/с и 44,1 кГц получается , то есть 417 байт. Кадры с битом заполнения занимают 418 байт, и кодер расставляет их так, чтобы средняя длина оставалась 417,96 байта. При 48 кГц деление точное — 384 байта, заполнение не нужно.
Синхрослово может случайно встретиться и внутри данных. Поэтому декодер считает найденный заголовок настоящим, если на расчётном расстоянии стоит следующий (Brandenburg, разд. 6.1). Параметры повторяются в каждом кадре, так что воспроизведение можно начать с любого места потока.
При постоянном битрейте длина кадра фиксирована, а сигнал бывает то простым, то сложным. Битовый резервуар (bit reservoir)битовый резервуар (bit reservoir) — Механизм MP3: кадр может начать свои данные в месте, оставленном свободным предыдущими кадрами. Сложный фрагмент получает больше бит при постоянном битрейте. позволяет кадру использовать место, не занятое предыдущими кадрами. 9-битное поле main_data_begin в побочной информации указывает, на сколько байтов назад от заголовка начинаются основные данные этого кадра, — до 511 байт (Raissi, разд. 5.1.2). Простой фрагмент оставляет запас, а следующая атака его тратит. Поэтому основные данные кадра могут лежать в предыдущих кадрах, и без них такой кадр не декодируется.
Постоянный и переменный битрейт
MPEG-1 Layer III допускает битрейты 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 и 320 кбит/с (Supurovic). При постоянном битрейте (CBR) все кадры одного размера с точностью до байта заполнения. Индекс битрейта можно менять от кадра к кадру: так получается переменный битрейт (VBR), и декодер обязан его поддерживать (Brandenburg, разд. 3.1, 5.3). При VBR длительность нельзя вычислить по размеру файла и битрейту первого кадра: нужно знать число кадров.
У кодека есть битрейт, ниже которого качество быстро падает, а выше растёт медленно. Для MP3 это около 1,33 бита на отсчёт: 128 кбит/с для стерео при 48 кГц (Brandenburg, разд. 5.6). Для записи CD это отношение : файл в 11 раз меньше WAV.
Совместное стерео
Заголовок задаёт один из четырёх режимов: моно, два независимых канала (dual channel), стерео и совместное стерео (joint stereo). В совместном стерео кодер может передавать вместо и их сумму и разность (M/S), если каналы похожи и разность мала. Само преобразование обратимо, как во FLAC, а потери возникают при квантовании каждой из двух составляющих. На низких битрейтах доступно также интенсивностное стерео: верхние полосы передаются одним общим сигналом и соотношением уровней каналов. Оно экономит биты, но может сместить звуковую картину, например сдвинуть инструменты (Brandenburg, разд. 3.1). Расширение режима в заголовке указывает, какие способы включены в кадре.
Теги ID3
Стандарт MPEG не хранит название трека и исполнителя. Их записывают в теги ID3, которые не входят в поток кадров. ID3v1 занимает 128 байт в конце файла: метка TAG, название, исполнитель и альбом по 30 байт, год 4 байта, комментарий 30 байт и код жанра 1 байт. ID3v2 стоит в начале файла с меткой ID3 и имеет переменную длину (Raissi, разд. 5.2). Декодер пропускает такие данные и ищет первый настоящий заголовок кадра (Brandenburg, разд. 6.1).
Артефакты сжатия
Когда битов не хватает, ошибки MP3 звучат иначе, чем привычный шум или гармонические искажения (Brandenburg, разд. 5.1). Кодер может обнулить верхние линии; если граница полосы меняется от кадра к кадру, это слышнее, чем постоянный срез. Шум квантования распределяется по окну и при неудачном выборе окна звучит как предэхо перед ударом. При низком битрейте звук становится шероховатым: характер ошибки меняется примерно каждые 20 мс, а голос может звучать так, будто его записали дважды и наложили. Качество поэтому оценивают прослушиванием, а не отношением сигнал/шум: перцептивный кодер намеренно снижает это отношение, распределяя шум по частотам (разд. 5.5).
Другие форматы: AAC, Opus и ALAC
Кроме разобранных форматов распространены ещё три. AAC (Advanced Audio Coding) — преемник MP3 из MPEG-2 и MPEG-4: тот же принцип, но больше частотных линий, более гибкое совместное стерео и временное формирование шума TNS (Brandenburg, разд. 2.2.1, 4). Opus — открытый кодек IETF для речи и музыки, в том числе в реальном времени (RFC 6716, разд. 2). ALAC (Apple Lossless) — сжатие без потерь от Apple с открытыми исходниками (Apple, ALAC). Таблица 6 сравнивает их с форматами статьи.
| Формат | Сжатие | Как устроен | Размер или битрейт |
|---|---|---|---|
| WAV, AIFF | нет | PCM в чанках | 1411 кбит/с для CD |
| FLAC | без потерь | предсказание и коды Райса | 52–57 % от WAV |
| ALAC | без потерь | 16, 20, 24 или 32 бита, до 384 кГц, 1–8 каналов | 53–55 % от WAV |
| MP3 | с потерями | гибридный банк фильтров, модель слуха, коды Хаффмана | около 128 кбит/с для стерео |
| AAC | с потерями | MDCT до 1024 линий, короткие блоки, TNS | около 96 кбит/с для стерео 48 кГц; качество MP3 примерно при 70 % его битрейта |
| Opus | с потерями | линейное предсказание (SILK) и MDCT (CELT), кадры 2,5–60 мс | от 6 до 510 кбит/с; 64–128 кбит/с для стерео музыки |
Выбор зависит от задачи. Для записи, обработки и архива нужны форматы без потерь: WAV, AIFF, FLAC или ALAC, причём FLAC и ALAC экономят место без потери точности. Сжатие с потерями подходит для конечного распространения, когда ограничены объём или канал связи. Каждое новое кодирование с потерями снова квантует сигнал, и новые ошибки добавляются к прежним, поэтому обрабатывают исходную запись, а не MP3.
Самопроверка
Отсчёты 10, 12, 14, 16, 18. Какие остатки дадут порядки 1 и 2 и каким будет код Райса остатка 2 при k = 1?
Порядок 1 даёт для остатки 2, 2, 2, 2, порядок 2 для — нули: значения лежат на прямой. Остаток 2 сворачивается в . При частное 2 записывается как 001, остаток 0 — одним битом 0: код 0010, 4 бита.
Почему FLAC не может гарантировать сжатие любого сигнала?
Остаток мал, только если сигнал предсказуем. У некоррелированного белого шума (white noise)белый шум (white noise) — Шум с постоянной спектральной плотностью мощности в рассматриваемой полосе. Полосы одинаковой ширины в герцах содержат одинаковую ожидаемую мощность. соседние отсчёты не помогают предсказать друг друга, и предсказание может не уменьшить размер записи. Тогда кодер может выбрать подкадр без сжатия, а заголовки кадров и метаданные сделают файл немного больше исходного PCM. Это не свойство любого шума: у розового есть временные связи между отсчётами.
Какой длины кадр MP3 при 160 кбит/с и 48 кГц и нужен ли бит заполнения?
байт ровно. Дробной части нет, поэтому заполнение не нужно: все кадры по 480 байт.
Зачем кодеру MP3 короткие окна у резких атак?
Шум квантования распределяется по всему окну. У длинного окна часть шума звучит до атаки и выходит за время предмаскировки — получается предэхо. Короткое окно сокращает этот отрезок, ценой худшего разрешения по частоте.
Источники
- RFC 9639. Free Lossless Audio Codec (FLAC), IETF, 2024 — разд. 1, 3–5 (принцип, определения, этапы кодера), 7 (потоковое подмножество), 8 (метаданные и
STREAMINFO), 9 (кадр, фиксированные и линейные предсказатели, коды Райса). Учебные сигналы и расчёты визуализации собственные. - Apple Computer. Audio Interchange File Format «AIFF», version 1.3, 1989 — чанки
FORM,COMM,SSND, порядок байтов, отсчёты и их выравнивание. - Apple Computer. Audio Interchange File Format AIFF-C, черновик 1991 — тип
AIFC, чанкFVER, поляcompressionTypeиcompressionName. - Kabal P. AIFF / AIFF-C Sound File Specifications. в списке литературы → — коды сжатия AIFF-C, вариант
sowt, частота как 80-битное число. - Wikipedia. Extended precision: x86 extended-precision format — устройство 80-битного числа: знак, показатель со смещением 16 383, явный целый бит.
- Brandenburg K. MP3 and AAC Explained. в списке литературы → — разд. 2–6: стандарты MPEG, режимы и битрейты, гибридный банк фильтров, модель слуха, квантование и циклы, AAC, артефакты, оценка качества, ограничение полосы, заголовок кадра.
- Raissi R. The Theory Behind Mp3. в списке литературы → — разд. 5–6: кадр и гранулы, побочная информация и
main_data_begin, области таблиц Хаффмана, ID3, этапы кодера. Числа сверены с Brandenburg и Supurovic. - Supurovic P. MPEG Audio Frame Header. в списке литературы → — поля заголовка кадра, таблицы битрейтов и частот, бит защиты, формула длины кадра.
- Martijn van Beurden. Lossless audio codec comparison, revision 6, CDDA — средний размер файлов FLAC, ALAC и других кодеков без потерь на 64 записях CD.
- RFC 6716. Definition of the Opus Audio Codec, IETF, 2012 — разд. 2: диапазон битрейтов, полосы, слои SILK и CELT, длительности кадров, рекомендуемые битрейты.
- Apple. Apple Lossless Audio Codec, исходные тексты и ReadMe — разрядность, частоты, число каналов и размер пакета ALAC.