Вспомните, как лет 20 назад все слушали кассеты, диски, или даже грампластинки! Складывали их стопочками, делали оригинальные обложки, давали перезаписать друзьям. Эх… ностальгия!
Но MP3 изменил все! Качество звука осталось на высоком уровне, но файлы стали занимали в 11 раз меньше, чем на CD-диске! Теперь можно было легко и просто скачивать музыку в интернете, плееры начали помещаться на детской ладони, и мы забыли о пыльных полках со старыми дисками и кассетами.
Как же получается сжать аудиофайлы, без существенной потери качества? Как работают форматы сжатия звуковых файлов? И почему все это обман? Давайте рассмотрим основные принципы сжатия на примере культового MP3!
CD и WAV
Чтобы понять насколько гениальная штука – MP3, нужно понять, как кодируется обычный файл на CD или WAV. Делается это простейшим образом: записывается уровень аналогового сигнала через очень маленькие промежутки времени. На CD дисках это делается 44100 раз в секунду.
В каждом замере уровень сигнала записывается 16-битным числом (65536 градаций). Все это называется импульсно-кодовой модуляцией. При ней плавный аналоговый сигнал заменяется цифровым ступенчатым. Но разбиение настолько мелкое, что человеческий слух не должен заметить разницы.
Если учесть, что запись идет стерео, то есть два канала параллельно, очень просто можно посчитать, что одна секунда такого аудио занимает 1411,2 килобит (44100*16*2 = 1411200).
MP3
Но MP3 может иметь битрейт в 128 кбит/с, что в 11 раз меньше, чем у CD! Однако, качество ухудшается, очевидно, не в 11 раз. Так как достигается такой эффект? Что за магия происходит при сжатии?
Да, это формат сжатия с потерями. Но что именно вырезается из звуковой картины? Как это понимает алгоритм? Наверняка же не пропускается по 10 отсчетов!
Преобразование Фурье
В MP3 информация записывается чуть по-другому. В основе всего лежит так называемое преобразование Фурье. Что же это такое?
Мы знаем, что звук – это волна. Но если посмотреть, как выглядит аудиосигнал, окажется, что это какая-то уродливая волна:
На самом деле это не звук такой страшный. Просто часто звук - это смесь волн разной частоты. Накладываясь друг на друга они и приводят к такому виду.
Но преобразование Фурье позволяет понять, какие частоты есть в этом звуке. И, соответственно, с какой интенсивностью звучит каждая из них. Оно раскладывает сигнал на элементарные составляющие. По сути, графический эквалайзер это и есть преобразование Фурье.
Когда кодируется MP3 файл, он сначала разбивается на фреймы (фрейм — структура, содержащая некоторую информацию, обычно по 1152 сэмпла/замера). Над каждым производится преобразование Фурье, благодаря которому мы узнаем, какие частоты есть в каждом фрейме. И вот тут начинается самое интересное!
Психоакустика
В дело вступает то, что наше ухо не идеально (и это не то, что кому-то медведь на него наступил). Просто само по себе восприятие звуков нами очень необычно.
Обрезка высоких частот
Например, в MP3 используется то, что чувствительность к высоким частотам с возрастом ухудшается. После 35 лет многие уже не слышат все, что выше 16000 Герц. Таким образом, кстати, с помощью звука можно определять примерный возраст человека:
Поэтому MP3 сразу обрезает частоты выше 16000 Герц. Жестко, согласен, но сами послушайте 16000 Герц. Писк может быть ощутимый, но редко где он будет сильно влиять на восприятие звуковой картины.
Эффект маскировки
Обрезая частоты удается немного уменьшить размер файла. Но есть и другие хитрости, например, эффект маскировки.
Частотная маскировка. Если сигнал на какой-то частоте довольно громкий, он может заглушить соседние частоты. И частоты, кратные ему, по-другому, гармоники. То есть мы можем просто убрать часть звукового сигнала, и никто не заметит!
Временная маскировка. Оказывается, если есть громкий сигнал, то после него возникает очень кратковременный период глухоты (до 50 микросекунд). Так что если в одном фрейме был такой звук, то в другом на этой частоте можно просто убрать весь звук и никто не заметит.
Кстати, маскирующий звук может быть даже после того, что мы вырезаем. Вот смотрите. При хлопке ладошами (звук хлопка оригинал) получается такой сигнал:
Теперь добавим перед каждым ударом еще этот же удар (звук хлопка продублировано) Даже внимательно слушая, вы не заметите, что теперь звук хлопка продублирован. Вот она – маскировка в действии!
Стерео
Так же, при записи стерео, есть очень хитрый ход, который уменьшает данные, но не ухудшает качество. В файл записываются не левый и правый канал отдельно, а, внимание: сумма каналов, деленная пополам (среднее арифметическое), и разность каналов.
Музыкальные треки микшируются так, что большая часть инструментов звучит в обоих каналах одинаково, то есть в разности каналов не очень много деталей. Поэтому кодируется эта разность более грубо, что дополнительно уменьшает размер файла. При воспроизведении, разумеется, из такой записи восстанавливаются истинный левый и правый каналы.
Алгоритм Хаффмана
Но это не совсем удаление информации. Мы просто заменяем ее одинаковыми символами (например, нулями), но эти символы-то остаются в файле! Так что для итогового уменьшения размера используется код Хаффмана.
Работает он так. Символы, которые встречаются часто в последовательности, кодируются меньшим количеством бит. А символы, которые редко встречаются, кодируются бóльшим количеством бит.
Теперь все просто. Если в нашем кусочке будет много удаленных звуковых составляющих, оно будет кодироваться просто малым количеством бит, и итоговый файл будет занимать намного меньше места!
Ну а далее, все выжившие коэффициенты преобразования записываются во фрейм, фреймы склеиваются и получается готовый файл. Декодирование происходит полностью в обратном порядке.
Итог
Как понимаете, при кодировании MP3 возникают потери. Да, нас очень сильно обманывают. Но это только потому что наше восприятие звука неидеально и мы сами позволяем подобную ложь.
Однако, это хорошо, ведь благодаря такой «неидеальности» мы можем слышать собеседника в шумной толпе, мы не глохнем, когда оказываемся на рок-концерте и можем скачивать много-много музыки из интернета, не тратя драгоценный трафик.
И с одной стороны да, наш слух может различить только 9% звуковой информации. Но с другой стороны, это же круто! Нам достаточно только 9%, чтобы отчетливо воспринимать всё звучание. Так что на самом деле наши мозг и уши – большие молодцы!