Теория музыки через код: как физика звука объясняет ноты и аккорды

Теория музыки через код: как физика звука объясняет ноты и аккорды

Автор блога runjs.app рассказывает, что несколько раз пытался научиться играть на инструменте и каждый раз останавливался на том же месте: руки запоминали, какие ноты брать, но объяснения теории музыки сводились к «это мажорная гамма, запомни узор» без ответа на вопрос, почему нужен именно такой узор. Вывод, к которому он пришёл: система, в основе которой лежат физика и арифметика, не должна преподаваться как список правил для заучивания, и он решил вывести её с нуля, начав не с инструмента, а с кода.

Отправная точка, то, что звук физически является колебанием давления воздуха, а для компьютера это список чисел, описывающих положение диффузора динамика; браузер через Web Audio API пересчитывает этот список на лету, если задать нужную форму волны. Простейший пример, синусоида с частотой 440 колебаний в секунду: это и есть нота, условно названная «ля», а привязка именно к числу 440, не более чем историческая договорённость (автор предлагает читателю заменить 440 на 300 и услышать, что ничего не «ломается», меняется только высота звука). Отдельно разбирается техническая деталь: если оборвать колебание на середине волны, получается щелчок, динамик резко дёргается в момент остановки; чтобы его убрать, громкость ноты нужно менять по кривой (огибающей, в полной форме, ADSR: атака, спад, сустейн, затухание), а не включать и выключать звук мгновенно.

Далее автор объясняет тембр через гармонический ряд: реальный инструмент, в отличие от чистой синусоиды, звучит на нескольких частотах сразу, например, струна на 440 Гц одновременно колеблется половинами, третями и четвертями, добавляя частоты 880, 1320, 1760 Гц и выше. Именно соотношение громкости этих добавочных частот делает скрипку скрипкой, а не трубой, при том что основная нота остаётся той же. Дальше, ключевой ход всего текста: удвоение частоты воспринимается как «та же самая нота», просто выше (это и есть октава), причём это наблюдение независимо друг от друга сделали культуры, не имевшие контакта между собой. Причина, в гармоническом ряду: все гармоники частоты 440 Гц уже присутствуют в гармоническом ряду частоты 220 Гц, поэтому более высокая нота не добавляет ничего нового, а лишь «высвечивает» уже существующий звук. Отсюда следует, что высота звука работает по принципу умножения, а не сложения (частотное пространство логарифмическое), и что всю задачу построения музыкальной системы достаточно решить один раз, внутри одной октавы, а дальше решение само тиражируется на весь слышимый диапазон.

Следующий шаг, почему одни сочетания частот звучат благозвучно, а другие фальшиво. Автор показывает на примерах, что простые дробные соотношения (2/1, октава, 3/2, квинта, 4/3, кварта, 5/4, большая терция) звучат согласованно, соотношение 16/15 (полутон) звучит как «спор» двух нот, а иррациональное соотношение вроде √2, как автомобильная сигнализация. Объяснение двойное. Во-первых, у частот в простом соотношении гармонические ряды массово совпадают: например, у 220 Гц и 330 Гц (отношение 3:2) общими оказываются частоты 660 и 1320 Гц, а у пары 220 и 311 Гц (близко к √2) не совпадает ни одна гармоника. Во-вторых, работает биение: когда две близкие, но не идентичные частоты звучат вместе, громкость начинает пульсировать с частотой, равной разнице между ними (например, при разнице в 6 Гц слышно ровно шесть пульсаций в секунду), именно это восприятие пульсации и есть механизм диссонанса. Итоговая формулировка автора: консонанс, это когда ухо быстро находит повторяющийся узор в объединённой звуковой волне, а диссонанс, когда узор либо появляется очень нескоро (для соотношения 16:15 нужно пятнадцать циклов), либо не появляется вовсе, как в случае с иррациональным √2.

В конце разобранного фрагмента автор пробует построить полный набор из двенадцати нот, откладывая только чистые квинты (соотношение 3/2) и каждый раз сворачивая результат обратно в исходную октаву, по его словам, примерно так действовал Пифагор, и метод какое-то время работает исправно. Но после двенадцати последовательных квинт от стартовой частоты 220 Гц результат, 222,99 Гц, а не ожидаемые 220 Гц. Автор подчёркивает, что расхождение, не ошибка округления при вычислениях, а структурное свойство самой системы. На этом эпизоде доступный фрагмент текста обрывается, сама статья, судя по вступлению, дальше выводит гаммы, аккорды и аккордовую последовательность и лишь в самом конце вводит нотную запись, но это уже за пределами того, что попало в выгрузку.

Ключевые факты

  • Автор, не умеющий играть ни на одном инструменте, решил вывести теорию музыки с нуля через код, начав с одного числа, частоты колебания, а не с инструмента.
  • Звук, это колебание давления воздуха; компьютер описывает его списком чисел (сорок четыре тысячи раз в секунду), а браузер через Web Audio API вычисляет этот список на лету по заданной форме волны, например, синусоиде на 440 Гц (условная нота «ля»).
  • Тембр объясняется гармоническим рядом: частота 440 Гц тянет за собой добавочные частоты 880, 1320, 1760 Гц и выше, и именно соотношение их громкости отличает звучание одного инструмента от другого.
  • Удвоение частоты воспринимается разными культурами как «та же нота» (октава); простые дробные соотношения частот (3/2, квинта, 4/3, кварта, 5/4, большая терция) звучат благозвучно, потому что их гармонические ряды совпадают и не создают биений, а иррациональное соотношение вроде √2 звучит диссонансом.
  • Попытка выстроить 12 нот, откладывая только чистые квинты и сворачивая результат в октаву (метод, близкий к пифагоровскому), после 12 шагов от 220 Гц приводит к 222,99 Гц вместо ожидаемых 220 Гц, расхождение, которое автор называет структурным, а не ошибкой округления.

Почему это важно

Материал, не новость об инструменте или продукте, а образовательный подход: автор показывает, что теорию музыки можно вывести из физики и арифметики через код, а не заучивать наизусть. Для аудитории, которая мыслит категориями программирования, это способ понять предмет, традиционные объяснения которого («это гамма, запомни узор») оставляли открытым вопрос «почему именно так».

Кому это важно

В первую очередь, программистам и вообще людям с техническим складом ума, которые пробовали разобраться в музыке и упирались в те же немотивированные правила, что и автор. Также полезно тем, кто работает с Web Audio API или интересуется синтезом звука: в тексте разобраны рабочие примеры кода (осциллятор, огибающая громкости, разные формы волны).

Как это применить

Статья построена как последовательность запускаемых сниппетов на Web Audio API: можно открыть код в браузере и на слух проверить каждое утверждение, сравнить синусоиду и пилообразную волну на одной частоте, услышать разницу между чистой квинтой и "фальшивым" интервалом, посчитать, что двенадцать чистых квинт от 220 Гц не возвращаются в 220 Гц. Это делает материал скорее интерактивным упражнением, чем текстом для чтения.

Можно ли доверять

Это личное эссе на блоге runjs.app, а не рецензируемый материал, но опирается оно на общеизвестные и легко проверяемые факты акустики, гармонический ряд, эффект биений, логарифмическую природу восприятия высоты звука; на Hacker News пост набрал 105 баллов и 41 комментарий, то есть прошёл проверку технической аудиторией. Доступный для пересказа фрагмент обрывается на середине изложения (на моменте с двенадцатью квинтами), не доходя до обещанных в начале гамм и аккордов, поэтому итоговый вывод статьи проверить по этому фрагменту нельзя.

Риски и подводные камни

Материал прямо не связан с индустрией ИИ и попал в подборку как образовательный курьёз на стыке музыки и программирования, не ждите от него новостей о моделях или продуктах. Кроме того, захваченный текст обрывается до того, как автор называет конкретное решение проблемы "двенадцати квинт" (например, переход к равномерной темперации), в разобранном фрагменте это расхождение остаётся заявленным, но не разрешённым.

«Консонанс, это когда ухо быстро находит повторяющийся узор.»

— автор эссе «Music Theory for Programmers» на runjs.app