Оцифровка звука: как это работает

Начи­на­ем рас­ска­зы­вать, как рабо­та­ют при­выч­ные тех­но­ло­гии: ком­пью­тер­ный звук, видео, MP3, веща­ние и стри­мин­ги, все­воз­мож­ные алго­рит­мы и всё подоб­ное.

👍 У этой ста­тьи нет ника­кой прак­ти­че­ской цен­но­сти, она про­сто для удо­воль­ствия. Ино­гда мож­но себя поба­ло­вать 🙂

Немного школьной физики

Звук — это коле­ба­ния воз­ду­ха. Как вол­ны на воде, толь­ко в воз­ду­хе. Воз­дух давит нам на уши, а в ушах есть чув­стви­тель­ные части, кото­рые тон­ко чув­ству­ют коле­ба­ния воз­ду­ха. Эти коле­ба­ния люди вос­при­ни­ма­ют как звук. В откры­том кос­мо­се зву­ков нет, пото­му что там нет воз­ду­ха. И людей.

Часто­та. Чем быст­рее коле­ба­ния, тем тонь­ше вос­при­ни­ма­е­мый нами звук. Чело­век вос­при­ни­ма­ет коле­ба­ния от 20 раз в секун­ду до при­мер­но 20 тысяч раз в секун­ду. По-другому это назы­ва­ет­ся часто­той коле­ба­ний: гер­ца­ми. То есть диа­па­зон, кото­рый мы слы­шим — от 20 герц до 20 кило­герц.

Для срав­не­ния, соба­ки слы­шат от 40 герц до 60 кило­герц, поэто­му соба­чий сви­сток не вос­при­ни­ма­ет­ся людь­ми, но очень хоро­шо слы­шен соба­кам. Соба­чий сви­сток как раз зву­чит в диа­па­зоне 23–54 КГц.

Ампли­ту­да. Чем силь­нее коле­ба­ния — тем гром­че, и наобо­рот. Мож­но пред­ста­вить, что это высо­та волн на поверх­но­сти пру­да: может быть мел­кая рябь (тихий звук), а могут быть боль­шие мощ­ные вол­ны.

Гра­фик. Если мы про­из­не­сём фра­зу «При­вет, это жур­нал „Код“», то с точ­ки зре­ния волн он будет выгля­деть как-то так (очень при­мер­но):

Делим звук на отрезки

Давай­те уве­ли­чим наш гра­фик и посмот­рим, что про­ис­хо­дит, напри­мер, за одну секун­ду (опять же, очень при­мер­но и упро­щён­но!):


Упро­щён­но!

А теперь сде­ла­ем вот что: раз­де­лим секун­ду на 4 части, и для каж­дой най­дём зна­че­ние ампли­ту­ды:


Мы за секун­ду четы­ре раза изме­ри­ли состо­я­ние вол­ны. Это назы­ва­ет­ся дис­кре­ти­за­ци­ей

Мы изме­ри­ли зна­че­ние ампли­ту­ды в каж­дой из четы­рёх точек, полу­чи­ли, услов­но гово­ря, четы­ре чис­ла: +30, −50, −50 и −60. Тео­ре­ти­че­ски, если взять ток и подать эти четы­ре напря­же­ния на дина­мик, у нас полу­чит­ся вос­про­из­ве­сти тот же звук. Но есть несколь­ко про­блем:

  • Из-за того, что мы заме­ри­ли вол­ну толь­ко в четы­рёх местах, мы про­пу­сти­ли целое коле­ба­ние. Оно было настоль­ко быст­рым, что уме­сти­лось меж­ду наши­ми клю­че­вы­ми точ­ка­ми.
  • Опять же, из-за боль­ших отрез­ков мы полу­чим очень гру­бый звук по срав­не­нию с ори­ги­на­лом. Это то же самое, как взять кар­ти­ну с тыся­чей раз­ных оттен­ков и нари­со­вать её тре­мя цве­та­ми, не сме­ши­вая их.

Дис­кре­ти­за­ция с часто­той 4 (сколь­ко зна­че­ний мы изме­ря­ем в секун­ду) — это слиш­ком мало для зву­ка. Что­бы полу­чить более или менее раз­бор­чи­вую речь, нуж­но секун­ду делить на 8 тысяч отрез­ков, а для музы­ки обыч­но хва­та­ет 41 тыся­чи.

Уве­ли­чим часто­ту дис­кре­ти­за­ции: наре­жем звук на более мел­кие кусоч­ки за ту же еди­ни­цу вре­ме­ни:


Теперь изме­ре­ния будут намно­го точ­нее, а полу­чив­ший­ся звук — есте­ствен­нее

Переводим в цифру

После того как мы раз­би­ли звук на мел­кие отрез­ки и изме­ри­ли зна­че­ние ампли­ту­ды для каж­до­го из них, мы можем запи­сать это в виде таб­лич­ки:

Вре­мя Ампли­ту­да
0.01 сек. 5
0.02 сек. 7
0,03 сек 10
... ...
1 сек −21

Если мы весь звук раз­би­ва­ем на оди­на­ко­вые отрез­ки, то вре­мя мож­но не писать, пото­му что мы зна­ем, как оно меня­ет­ся, доста­точ­но запи­сать в строч­ку толь­ко зна­че­ния ампли­ту­ды:

5 7 10 … −21

Что­бы ком­пью­тер пони­мал эти чис­ла, пере­ве­дём эти чис­ла в дво­ич­ную систе­му счис­ле­ния. Для про­сто­ты будем счи­тать, что одно чис­ло зани­ма­ет ров­но один байт памя­ти, но на самом деле чем боль­ше байт выде­ля­ет­ся на чис­ло, тем точ­нее будет изме­ре­ние и каче­ство зву­ка. После пере­во­да полу­чим такое:

00000101

00000111

00001010

11101011

Послед­нее боль­шое чис­ло полу­чи­лось отто­го, что нам нуж­но хра­нить и отри­ца­тель­ные зна­че­ния, поэто­му пер­вая еди­ни­ца в бай­те озна­ча­ет, что это отри­ца­тель­ное чис­ло и его нуж­но счи­тать немно­го ина­че.

Вот эту после­до­ва­тель­ность ком­пью­тер уже может понять и вос­про­из­ве­сти в виде зву­ка.

Как теперь воспроизвести звук

Что­бы что-то зазву­ча­ло, нуж­но сде­лать сле­ду­ю­щие шаги:

  • Взять колон­ки или науш­ни­ки — что угод­но, что уме­ет «тол­кать воз­дух», то есть созда­вать аку­сти­че­ские вол­ны. В колон­ках за это отве­ча­ют дина­ми­ки, к кото­рым под­клю­че­ны спе­ци­аль­ные мяг­кие кону­сы, кото­рые, соб­ствен­но, и созда­ют коле­ба­ния воз­ду­ха. Та круг­лая ерун­да в колон­ке — это и есть конус.
  • Подать на эти колон­ки некий ток. От того, насколь­ко мощ­ный этот ток, конус будет дви­гать­ся по-разному.
  • Что­бы полу­чить этот меня­ю­щий­ся ток, нужен спе­ци­аль­ный чип под назва­ни­ем ЦАП — цифро-аналоговый пре­об­ра­зо­ва­тель. Он полу­ча­ет на вход чис­ло, а на выхо­де дает ток. У всех ваших смарт­фо­нов и ком­пью­те­ров есть такие ЦАПы.

Ито­го:

  1. Про­цес­сор отправ­ля­ет циф­ры из зву­ко­во­го фай­ла в ЦАП.
  2. ЦАП полу­ча­ет чис­ла и выда­ёт меня­ю­ще­е­ся элек­три­че­ство по этим циф­рам.
  3. Элек­три­че­ство попа­да­ет в колон­ку, пере­да­ёт­ся на дина­мик.
  4. Дина­мик из-за элек­три­че­ства начи­на­ет дви­гать конус колон­ки.
  5. Конус начи­на­ет тол­кать воз­дух перед собой, созда­вая зву­ко­вые вол­ны.
  6. Вол­ны доле­та­ют до наших ушей, и мы вос­при­ни­ма­ем их как звук.

Что дальше

У тако­го спо­со­ба есть одна про­бле­ма: файл полу­ча­ет­ся слиш­ком боль­шим, что­бы им было удоб­но поль­зо­вать­ся. Пред­ставь­те: 44 тыся­чи чисел за одну секун­ду!

Что­бы умень­шить раз­мер фай­ла, при­ду­ма­ли два реше­ния: сжа­тие с поте­ря­ми и без них. Каж­дое раз­бе­рём отдель­но, несмот­ря на то, что у них мно­го обще­го.