Мы сконцентрируемся на передаче через Интернет аудио, которое обычно близко к CD-качеству. При передаче такого аудио тоже желательно сократить объем данных. Без сжатия для передачи аудио в стереокачестве потребуется ширина канала в 1,411 Мбит/с, что будет тормозить многие широкополосные каналы, оставляя меньше места для видео и другого веб-трафика. Скорость передачи данных можно уменьшить на порядок благодаря сжатию, при этом потери качества будут незначительными или же их не будет вовсе.
Сжатие и распаковка требуют обработки сигнала. К счастью, цифровой звук и видеоролики могут легко обрабатываться компьютерами при помощи специального ПО. На самом деле, существуют десятки программ, позволяющих пользователям записывать, отображать, редактировать и хранить медиаданные из различных источников. Это привело к тому, что большое количество музыки и фильмов доступно через Интернет — правда, это не всегда законно, — в результате чего артисты и правообладатели подают множество исков.
Для сжатия аудиофайлов было разработано множество алгоритмов. Вероятно, самые популярные форматы — это MP3 (MPEG audio layer 3 — MPEG аудио, уровень 3) и ACC (Advanced Audio Coding — усовершенствованное кодирование аудио),
использующееся в файлах MP4 (MPEG-4). Чтобы не путаться, учтите, что MPEG обеспечивает сжатие и аудио и видео. MP3 относится к блоку сжатия аудио (часть 3) стандарта MPEG-1, а не к третьей версии. На самом деле, третья версия формата MPEG не выходила, вышли только MPEG-1, MPEG-2 и MPEG-4. AAC — это формат, который последовал за NP3. Он по умолчанию используется для кодирования аудио в MPEG-4. В MPEG-2 возможны оба варианта кодирования аудио, MP3 и AAC. Теперь понятно? Что хорошо в стандартах, так это то, что всегда есть выбор. И если какой-то вам не нравится, просто подождите год-другой.
Существует две концепции сжатия звука. При кодировании формы сигналов (waveform coding) сигнал раскладывается на компоненты при помощи преобразования Фурье. В главе 2 мы привели пример в виде временной функции и амплитуд, получающихся в результате ее разложения в ряд Фурье (см. рис. 2.1, а). Амплитуда каждой компоненты кодируется с минимальными искажениями. Задачей является максимально аккуратная передача формы сигнала с минимально возможной затратой битов.
Другая концепция называется перцепционным кодированием (perceptual coding). Она основана на некоторых недостатках слухового аппарата человека, позволяющих кодировать сигнал таким образом, что слушатель не ощутит никакой разницы по сравнению с настоящим сигналом, хотя на осциллографе эта разница будет весьма заметна. Наука, на которой базируется перцепционное кодирование, называется психоакустикой (psychoacoustics). Она изучает восприятие звука человеком. Оба формата, MP3 и AAC, используют перцепционное кодирование.
Ключевым свойством перцепционного кодирования является то, что одни звуки могут маскировать другие. Представьте себе, что теплым летним вечером вы медитируете на лужайке, слушая живой концерт для флейты с оркестром. Затем, откуда ни возьмись, появляется бригада рабочих с отбойными молотками в руках, которая начинает вскрывать асфальт на близлежащей улице. Расслышать флейту, к сожалению, уже никто не в состоянии. Нежные звуки, издаваемые ею, подверглись маскированию звуками отбойных молотков. Если рассматривать ситуацию с точки зрения передачи данных, то в этот момент достаточно кодировать лишь диапазон частот, в котором работают отбойные молотки, — все равно флейту за этим грохотом не слышно. Способность громких звуков определенного диапазона частот «прятать» более тихие звуки других диапазонов (которые были бы слышны при отсутствии громких звуков) называется частотным маскированием (frequency masking). На самом деле, даже после того как рабочие выключат отбойные молотки, слушатели не будут слышать флейту в течение некоторого небольшого периода времени. Это связано с тем, что при появлении очень громкого звука коэффициент усиления человеческого уха резко снизился, и после прекращения работы отбойных молотков требуется время на его возвращение в нормальное состояние. Этот эффект называется временным маскированием (temporal masking).
Чтобы перейти от качественного описания этих эффектов к количественным, представим себе проведение некого эксперимента 1. Человек, находящийся в тихом помещении, надевает наушники, соединенные со звуковой картой компьютера. Компьютер генерирует звук (чистую синусоидальную звуковую волну) с частотой 100 Гц, сила которого постепенно возрастает. Испытуемый должен нажать клавишу на клавиатуре, как только он услышит звук. Компьютер запоминает силу звука, при которой была нажата клавиша, и повторяет эксперимент на частотах 200 Гц, 300 Гц и т. д., доходя до верхнего предела слышимых частот. Эксперимент необходимо провести над большим количеством испытуемых. На рис. 7.19, а показан график с логарифмическим масштабом на обеих осях, показывающий усредненную зависимость порога слышимости от частоты звука. Наиболее очевидный вывод, который можно сделать при взгляде на эту кривую, состоит в том, что нет никакой необходимости когда бы то ни было кодировать частоты, амплитуда которых ниже порога слышимости. Например, если сила звука на частоте 100 Гц равна 20 дБ, этот звук можно не кодировать, и качество звучания при этом не ухудшится, так как уровень 20 дБ при 100 Гц находится ниже порога слышимости (см. рис. 7.19, а).
Теперь рассмотрим эксперимент 2. Пусть компьютер повторяет действия эксперимента 1, но на этот раз на каждую тестовую частоту будет накладываться синусоидальная звуковая волна постоянной амплитуды с частотой, скажем, 150 Гц. Мы обнаружим, что порог слышимости для частот, расположенных вблизи 150 Гц, резко возрастает. Это отражено на графике на рис. 7.19, б.
Из последнего наблюдения можно сделать следующий вывод: зная, какие сигналы маскируются более мощными сигналами на близлежащих частотах, мы можем пренебречь соответствующими частотами и не кодировать их, экономя тем самым биты. Из рис. 7.19, б очевидно, что сигналом с частотой 125 Гц можно полностью пренебречь, и никто не заметит разницы. Даже после прекращения звучания громкого сигнала в каком бы то ни было частотном диапазоне знание свойств временного маскирования позволяет в течение некоторого времени (пока ухо настраивается на меньшую мощность звука) продолжать пренебрегать кодированием этой частоты. Суть алгоритмов
MP3 и AAC состоит в разложении сигнала в ряд Фурье для получения силы звука на каждой из частот с последующей передачей исключительно немаскированных частот, кодируемых минимально возможным числом бит.
Рис. 7.19. Порог слышимости как функция частоты (а); эффект маскирования (б)
Теперь, зная основной принцип, мы можем рассмотреть, как производится само кодирование. Сжатие звука выполняется путем замеров амплитуды сигнала, производимых с частотой от 8 до 96 кГц для AAC, а часто просто с частотой 44,100 кГц, чтобы звук получался в качестве, близком к CD. Замеры могут сниматься по одному (моно) или двум (стерео) каналам. Затем выбирается желаемая выходная битовая скорость. С помощью алгоритма MP3 можно сжать записанную на компакт-диск стереофоническую запись рок-н-ролла до 96 Кбит/с с потерей качества, едва заметной даже для фанатов рок-н-ролла, не лишенных слуха. Если мы хотим «перегнать в MP3» фортепианный концерт, нам понадобится формат AAC с битовой скоростью по крайней мере 128 Кбит/с. Разница обусловлена тем, что соотношение сигнал/шум в рок-н-ролле гораздо выше, чем в фортепианном концерте (только в техническом смысле, разумеется). Можно, впрочем, выбрать меньшую битовую скорость и получить более низкое качество воспроизведения.
После этого отсчеты обрабатываются небольшими группами. Каждая группа предварительно проходит через набор цифровых фильтров, выделяющих частотные диапазоны. Информация о частоте заводится в психоакустическую модель для определения маскирующих частот. Следующим шагом является распределение имеющегося запаса бит между частотными диапазонами. При этом большее число бит отводится под диапазон с наибольшей немаскированной спектральной мощностью, меньшее — под немаскируемые диапазоны с меньшей спектральной мощностью, и совсем не отводятся биты под маскируемые диапазоны. Наконец, битовые последовательности шифруются с помощью кода Хаффмана (Huffman), который присваивает короткие коды числам, появляющимся наиболее часто, и длинные — появляющимся редко. Если вас заинтересовала эта тема и вы хотите узнать о ней побольше — обратитесь к книге Бранденбурга (Brandenburg, 1999).