Кодирование звука: дискретизация

Разбираемся, как непрерывный звук превращается в числа: что такое дискретизация, частота и глубина кодирования звука.

Дискретизация — это измерение звука много раз в секунду и запись каждого замера числом. Так непрерывная волна превращается в набор цифр.

Звук — это волна

Когда ты говоришь или играет музыка, воздух колеблется — это звуковая волна. Микрофон превращает её в плавно меняющийся электрический сигнал. Но компьютер не умеет хранить «плавное» — ему нужны числа, причём дискретные (отдельные). Как же записать гладкую волну набором чисел? Здесь и приходит на помощь дискретизация.

Дискретизация: измеряем волну по точкам

Представь, что ты снимаешь высоту волны на верёвочке. Гладкую кривую целиком записать нельзя, зато можно очень часто измерять её высоту: сейчас 5, через миг 7, потом 6, потом 2... Получится список чисел, который приблизительно повторяет форму волны. Чем чаще измеряешь — тем точнее приближение.

Это похоже на то, как кино состоит из множества отдельных кадров: показывают их так быстро, что глаз видит непрерывное движение. Звук в компьютере — это тоже «кадры», только звуковые. Их называют отсчётами (или сэмплами).

Два главных параметра

Качество оцифрованного звука зависит от двух чисел.

  • Частота дискретизации — сколько замеров делают за одну секунду. Измеряется в герцах (Гц). Для музыки обычно берут 44100 Гц — то есть 44100 замеров в секунду! Чем выше частота, тем точнее и чище звук.
  • Глубина кодирования — сколько бит отводят на запись одного замера. Чаще всего 16 бит. Чем больше бит, тем точнее записана громкость каждого отсчёта.

Чем выше частота дискретизации и глубина кодирования, тем качественнее звук — и тем больше места занимает файл.

Почему 44100 — не случайное число

Откуда взялась эта странная цифра — 44100 замеров в секунду? Она связана с устройством нашего слуха. Человеческое ухо различает звуки частотой примерно до 20000 колебаний в секунду (20 кГц); выше — уже ультразвук, который слышат собаки и летучие мыши, но не мы. Существует математическое правило (теорема о дискретизации): чтобы точно записать звук, надо делать замеры как минимум вдвое чаще самой высокой частоты звука. Вдвое больше 20000 — это 40000, а с небольшим запасом получилось 44100. Так что частота 44.1 кГц выбрана не наугад, а ровно такой, чтобы захватить весь слышимый человеком диапазон. Для телефонной речи, где важна разборчивость, а не музыкальное богатство, хватает и 8000 Гц — поэтому голос в телефоне звучит «уже», чем музыка в наушниках.

Как посчитать объём звука

Логика та же, что и с картинкой: перемножаем всё, что влияет на размер. Для одного канала (моно):

Объём = частота × глубина × время (в битах)

Если звук стерео (два канала — левый и правый), результат умножают ещё на 2. Посчитаем на примере.

Попробуй сам

Вычислим объём 5 секунд стереозвука хорошего качества. Числа получатся внушительные — поймёшь, почему музыку сжимают в mp3.

chastota = 44100   # замеров в секунду (Гц)
glubina = 16       # бит на один замер
vremya = 5         # секунд
kanaly = 2         # стерео = 2 канала

obem_bit = chastota * glubina * vremya * kanaly
obem_bayt = obem_bit // 8
obem_mb = obem_bayt / 1024 / 1024

print("Замеров всего:", chastota * vremya * kanaly)
print("Объём в битах:", obem_bit)
print("Объём в байтах:", obem_bayt)
print("Объём в Мбайт:", round(obem_mb, 2))

Вывод:

Замеров всего: 441000
Объём в битах: 7056000
Объём в байтах: 882000
Объём в Мбайт: 0.84

Почти мегабайт всего за 5 секунд! Целая песня заняла бы десятки мегабайт. Поменяй kanaly на 1 (моно) — объём уменьшится вдвое. А снизишь chastota до 8000 (как у телефона) — звук станет глуше, зато файл намного легче. Вот тебе и компромисс между качеством и размером.

MP3 и магия «незаметного» сжатия

Мы посчитали, что качественный звук «весит» огромными темпами: пять секунд — почти мегабайт, а целая песня заняла бы десятки мегабайт. Но в плеере песни занимают в разы меньше. Снова работает сжатие, и формат MP3 — самый знаменитый его пример. Его придумали, изучив, как устроен человеческий слух. Оказалось, мы многого не слышим: очень тихий звук рядом с громким «теряется», часть частот ухо не различает. MP3 безжалостно выбрасывает всё, что мы всё равно не услышим, и за счёт этого ужимает файл в 10 и более раз почти без заметной потери качества. Это сжатие с потерями — точь-в-точь как JPG для картинок, только для звука. Благодаря этой идее в карман помещаются тысячи песен, а музыка мгновенно загружается из интернета. Удивительно, но в основе всего этого — простое понимание того, как мы слышим, и готовность пожертвовать тем, что ухо всё равно не заметит. Вот так знание про дискретизацию и объём звука превращается в технологию, которой пользуются миллиарды людей каждый день.

Частые ошибки

  • Забывать про число каналов. Стереозвук вдвое тяжелее моно — не пропусти множитель 2.
  • Путать частоту дискретизации с частотой звука. Частота дискретизации — это сколько замеров в секунду, а не высота тона.
  • Не переводить биты в байты. Формула даёт биты; для байтов делим на 8.

Запомни

  • Дискретизация превращает звуковую волну в набор чисел-отсчётов.
  • Частота дискретизации — число замеров в секунду (обычно 44100 Гц).
  • Глубина кодирования — число бит на один замер (обычно 16).
  • Объём = частота × глубина × время × число каналов (бит), делим на 8 для байт.
Проверьте себя
1. Что такое дискретизация звука?
AУсиление громкости
BИзмерение звуковой волны много раз в секунду и запись замеров числами
CСжатие файла
DУдаление шума
2. Что показывает частота дискретизации?
AВысоту звука
BСколько замеров делают за одну секунду
CГромкость
DДлину файла в секундах
3. Во сколько раз стереозвук тяжелее такого же по параметрам моно?
AНе отличается
BВ 2 раза
CВ 4 раза
DВ 8 раз
Поддержать проект