Если не lossless, то кот? MP3, AAC — что еще? Ранее мы уже несколько раз изучали алгоритмы сжатия музыки, настало время сравнить самых достойных.

По-хорошему следовало бы отречься от lossy-кодеков вовсе, но всегда интересно прочертить границу, где количество переходит в качество. Кроме того, даже lossy-кодек может кое-чем удивить, вот увидите.

В данном обзоре было решено не морочить голову разными VBR-режимами, а сразу остановиться на максимальном битрейте с постоянной величиной 320 кб/с. Сегодня, при современной емкости портатива, выпрашивать лишние 10 Мб на емкость альбома с риском потерять в качестве? Зачем? В целом, даже с древними кодеками поток 320 кб/с обеспечивает отсутствие характерных артефактов с мерзкими позвякиваниями. Первая часть обзора будет посвящена сравнению роста артефактов с помощью софта RMAA, во второй — изложен субъективный опыт слушателя на реальных фонограммах.

Сравнительная АЧХ трех lossy-форматов относительно оригинала WAV

Если в прошлый раз в качестве источника звука использовался iPad Mini, то сейчас для повышения точности мы выносим любое влияние железа за скобки, и далее весь анализ искажений будет проводиться исключительно в цифровом домене, без преобразования в аналог, поскольку RMAA предоставляет такую возможность.

Для этого генерируем в RMAA тестовый образец в WAV, затем поочередно загоняем его в различные lossy-кодеки. Далее конвертим обратно из них WAV, чтобы программа могла «узнать» файл и оценить отклонения от оригинального шаблона. Теперь смотрим, как рубятся высокие частоты и растут искажения, которые придают противную окраску звуку. Их, кстати, будет не так уж и много. Вообще, на битрейте 320 кб/с поймать на слух явно что-то вредное будет не так просто. Речь пойдет не об артефактах даже, а разве что некоторой «тупости» звука по сравнению с оригиналом. Фонограмма как будто чуть выдыхается, теряет подвижность из-за нарушения переходных процессов после психоакустической обработки. Но явственно зафиксировать эту разницу получится не всегда, зависит от конкретного трека.

MP3: лавинообразные искажения

Начинаем с самого популярного формата. МР3 — чудовище из института Фраунгофера, которое захватило Землю. Из-за него сегодня никому не приходит в голову использовать чистый WAV для записи звуков. Даже если выдирают изуродованное аудио из YouTube, то все равно крошат его еще раз в МР3, да еще и с похабным битрейтом 128 кб/с. Мы так делать не будем, и для теста используем самую актуальную на сегодня версию кодера LAME 3.100 с пресетом insane и битрейтом 320 кб/с.

На самом первом рисунке было видно, что спектр в МР3 ожидаемо испытывает колебания в области ВЧ и окончательно отфильтровывается на границе 20 кГц. Разумеется, это предел синтетического теста, на реальном музыкальном сигнале она наверняка окажется еще ниже. Размеры динамического диапазона в МР3-файле не изменились по сравнению с оригиналом. Т.е. кодер LAME 3.100 на битрейте 320 кб/с не добавляет в запись никаких собственных шумов.

Искажения формы сигнала 1 кГц при кодировании в МР3 в сравнении с оригиналом WAV

Конвертация в МР3 одиночного сигнала 1 кГц показала появление множества мелких гармонических искажений. И хотя формально их доля невелика (0,0009%) — т.е. раза в полтора-два меньше, чем на выхлопе у хорошего ЦАПа, — в динамичном спектре реальной фонограммы их число будет расти в лавинообразном и непредсказуемом порядке. Также «утолщение» основания узкого в оригинале пика 1 кГц указывает на определенные проблемы, обрастание паразитными колебаниями. Эту особенность наглядно иллюстрирует «квадратная» 100 Гц волна после ее конвертации в МР3. Как видите, по горизонтальной оси ее контур теряет четкость. Все это в конечном итоге отрицательно сказывается на утомляемости слуха при прослушивании МР3, увы, даже самых максимальных битрейтов.

«Квадратная» волна 100 Гц после конвертации в МР3 (вверху) и AAC (внизу)

AAC: поднять шум, но сохранить чистоту

Более аккуратным образом действует алгоритм ААС, которым активно оперирует Apple, да и не только он. С данным аудиокодеком работают цифровые ТВ-бродкастеры, а кроме того, ААС входит в пакет контейнера MPEG-4.

Квадратная волна после конвертации в ААС сохраняет свою форму, хотя искажения основания и гармоники вокруг пика 1 кГц тоже имели место, хотя и менее заметно, чем в МР3. При этом ААС демонстрирует больший на 1 дБ измеренный уровень шума. Что бы это значило — промежуточная запись на кассету, что ли? Нет, наверняка в алгоритме ААС используется что-то вроде нойзшейпинга — великое изобретение, позволяющее снижать ошибки квантования за счет подмешивания псевдослучайного шумового сигнала. Повторюсь, это не просто утопление искажений ниже шумового порога — здесь применяется более изощренная математика.

Для иллюстрации посмотрим артефакты вокруг так называемого джиттер-теста на частоте 11,025 кГц. Почему именно эта частота? Потому что кратная гармоника к этому пику приходится ровно на верхнюю границу спектра из цифрового потока с дискретизацией 44 кГц, а все остальные будут находиться за его пределами. Паразитные маленькие пики, особенно те, которые располагаются симметрично относительно основного тона (продукты модуляции, «боковые полосы») — вот это и есть зерна джиттера.

Устойчивость в джиттер-тесте ААС (вверху) и МР3 (внизу)

Как видим, дурак-МР3 сберег низкий уровень шума, но сгенерировал больше высокочастотного джиттера (наиболее заметного на слух), а AAC немного поднял шум, зато избежал паразитов на остальных участках спектра. Но еще большие фокусы с нойзшепингом вытворяет кодер WavPack.

WavPack: сохранить частоту, поменять разрядность

Вообще, если уж сразу и совсем коротко, то математика кодера WavPack на сегодня относится к самым гибким и крутым протоколам для аудиоэнтузиастов, без шуток. В отличие от FLAС, он умеет поддерживать 32-битное исчисление (я рекомендовал его для создания lossless виниловых рипов). Более того, в WavPack даже можно запаковать DSD-файл, не обращая его в РСМ. При этом размер такого файла получится гораздо меньше, чем dsf-оригинал. Но об lossless WavPack мы поговорим как-нибудь в другой раз, а пока рассмотрим уникальный принцип действия lossy-кодека WavPack.

В одном из своих обзоров я показывал, что в ряде случаев при сжатии с потерями имеет смысл снижать не частоту дискретизации, а непосредственно битность сигнала (т.е. ниже 24 или 16 бит), аккуратно подмешивая дизер (т.е. специальный профиль шума для уменьшения ошибок квантования). WavPack пошел именно этим славным путем, не трогая дискретность и частотку вообще, зато изменяя глубину бит, которая теперь является динамической величиной, описывая уровень громкости сигнала. Чем-то напоминает DSD-принцип, не правда ли?

Примечательно, что при конвертации в такой lossy WavPack, можно дополнительно сохранить параллельный «корректирующий» файл, с помощью которого можно будет полностью, до последнего бита, восстановить оригинал. Правда, экономить место на диске в этом случае не получится, так как размер такой пары будет все равно соответствовать lossless-оригиналу. Но тем не менее функционал протокола все равно впечатляет.

Битрейт нашего тестового файла был выставлен на 320 кб/с, чтобы сопоставить его с максимумом наших МР3 и ААС, но теоретически в WavPack его можно ставить и выше. Особенно это пригодится для хайрезов, далее я покажу как — и никакой MQA больше не нужен!

Сравнение гармонических искажений оригинала (зеленым) и файла, закодированного в lossy WavPack (белым). Чуть подрос уровень шума и почти никаких искажений

На графиках lossy WavPack демонстрирует похвальное отсутствие частокола гармоник, которые набегали у двух предыдущих кодеров из-за агрессивной психоакустической модели. В WavPack подобные хитрые алгоритмы отсутствуют, фильтров АЧХ тоже нет — работает просто динамическое взвешивание уровня сигнала под заданный битрейт, и все. В итоге тестирование 1 кГц дает всего несколько гармоник нечетного порядка — 3-я, 7-я, 9-я и т. д. Частотный диапазон сохранен, квадратная волна тоже. На джиттер-тесте 11 кГц по остальному спектру кроме подросшего шума не замечено, никакой паразитной деятельности.

В джиттер-тесте тоном 11025 Гц у lossy WavPack все чисто

Для слухового опыта я отобрал пару достаточно звонких и неплохо прописанных фонограмм, которые вы также можете скачать и послушать в трех вариациях lossy-кодирования с битрейтом 320 кб/с: MP3, AAC и WavPack. Там же, в этих двух архивах, будут приложены оригиналы FLAC в стандартном CD-разрешении 16 бит / 44 кГц.

Композиция «White Wood» группы Lush поможет оценить деградацию ВЧ-диапазона. Кто-то на форуме шутил над моей верностью шугейзу, но именно такая, хрупкая, но спектрально насыщенная ткань оказывается весьма чувствительной к бульдозеру lossy-кодеков и поганой аппаратуры. Стоит чуть уступить, и все гитарные хорусы с медью тарелочек превратятся в жестяную помойку. Вторая фонограмма, «Deep Sleep» B-52’s, представляет собой пример адекватного мастеринга с сочным саундом, студийными эффектами и сохраненным при этом динамическим диапазоном.

Выводы

По итогам прослушивания все треки разделились на две группы. В первую по степени неразличимости попали оригинал, AAC и WavPack. На их фоне МР3 прозвучал явным аутсайдером-одиночкой. Звук МР3 на 320 кб/с не делается жестким, нет, скорее даже наоборот. Я бы, кстати, звучание этого кодека охарактеризовал скорее как теплое — подача музыки как будто оборачивается мутноватым полиэтиленом. Само собой, мастеринг и частотная коррекция у альбомов бывает очень разной, в том числе и такой вот теплой. И если просто запустить подобный MP3 без сравнения с оригиналом, никто ничего и не заподозрит. Но в целом следует признать, что МР3 справляется со своей задачей хуже всех.

Конечно, можно обратиться к старинным МР3-кодекам типа LAME 3.93, где отключался полифазный фильтр, покрутить еще какие-то настройки. Но после ясного и естественного звука AAC на том же битрейте, заниматься подобными экспериментами пропадает желание. К тому же AAC и WavPack можно слушать на любом софте и в том числе на телефонах после установки какой-нибудь портативной версии Foobar. С поддержкой WavPack в Car Audio придется повозиться, но в принципе все преодолимо.

В заключение также предлагаю сравнить работу WavPack на образце моего винилового рипа из «Щелкунчика». Здесь уже продемонстрирована обработка высокодискретного сигнала. Оригинал был закодирован во FLAC с размерностью 24 бит / 88 кГц. Далее из него было сделано два варианта:

№1 — это стандартный FLAC 16 бит / 44 кГц, совместимый с CD-стандартом.

№2 — lossy WavPack с дискретностью 88 кГц и битрейтом 700 кб/с.

Величину данного битрейта lossy WavPack можно было сделать меньше или больше, она подбиралась экспериментально. Для нашего сравнения было важно, чтобы конечный файл WavPack совпадал по размеру с конкурентом FLAC 16 бит / 44 кГц. Все три файла также можно скачать и сравнить самостоятельно.

Непосредственное сравнение образцов подтвердило идею о том, что стандартное понижение HD-мастеров до CD-разрешения, пускай и незначительно, но все же огрубляет музыкальную фактуру оригинала. Деградация происходит, главным образом, за счет потери глубины передних и дальних планов. Сцена как бы выстраивается в единую плоскость. При этом стоит отметить, что вариант lossy WavPack при сопоставимом размере файла оказался лишен данного недостатка и может быть рекомендован для широкого применения в портативном аудио и различных стриминговых сервисах.