Почему я создал TuningSynth.com

Задний план

Пять лет назад я отправился в путешествие, открывающее меня, которое продвинуло меня дальше, чем я ожидал. Это началось, когда я создавал Conditional Orchestra, веб-приложение, которое преобразует данные о погоде в музыку. Для определенных погодных условий я хотел создавать музыку, используя больше, чем в стандартной западной системе с 12 нотами (12 TET), но я не мог найти подходящую существующую библиотеку или краткие инструкции о том, как это сделать. Оглядываясь назад, я рад, что не смог просто взять что-то с полки, потому что это заставило меня узнать о физике звука и теории музыки. Результатом этой работы стал Tuning Synth, который разработан, чтобы помочь вам услышать и увидеть, как разные музыкальные системы настройки отличаются и перекрываются.

Аккорды и компромиссы

В природе, когда материя колеблется с заданной частотой, она часто производит гармоники. По сути, это более высокие частоты (обертоны), которые являются частью математического паттерна. Каждую из этих нот можно описать с помощью целочисленных соотношений, которые принадлежат гармоническому ряду. Это сакральная математика, а также ее можно найти в других аспектах природы.

Чтобы услышать некоторые ноты из этой серии, перейдите в Tuning Synth и выберите Harmonic Series в меню Tuning System.

Затем сыграйте ноту с помощью экранной клавиатуры, QWERTY-клавиатуры или MIDI-устройства. Обратите внимание, насколько это отличается от настройки стандартной западной клавиатуры - вторая верхняя нота намного выше, фактически на октаву выше. По мере того, как вы поднимаетесь вверх по шкале, вы заметите, что более высокие гармоники воспринимаются как более близкие друг к другу, чем более низкие. Это потому, что человеческое ухо реагирует на звук нелинейным образом.

Первые в мире конструкторы музыкальных инструментов основывали свою систему настройки на том, что они могли слышать, поэтому первые системы использовали так называемую Just Intonation.

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

Пифагор использовал отношения, включающие только степени 3 и 2 (3/2 равно 1,5 или идеальная пятая).

Проблема, с которой он столкнулся, заключалась в том, что 12-я нота в последовательности не совсем такая же, как оригинал, она просто немного больше - 81:80. Это известно как пифагорейская запятая, и это означает, что каждая нота за пределами октавы не является точной двойной или половиной от оригинала. Если вы хотите, чтобы ваши октавы были точно двойными (2: 1), вам придется использовать другую систему.

В Tuning Synth выберите True Pythagorean - это система, которая включает запятую - сыграйте основную ноту (ноль), затем сыграйте 12-ю ноту. Верхний немного острее, хотя вы, вероятно, не заметите этого, пока не сравните его с другой системой, что мы и сделаем позже в этой статье.

Эти компромиссы привели людей к созданию системы, которая аппроксимирует каждую ноту в пределах октавы, так что каждая более высокая или более низкая октава составляет ровно вдвое или половину исходной ноты соответственно, и, таким образом, был создан равный темперамент.

После столетий экспериментов с использованием целочисленных соотношений Equal Temperament победил Just Intonation, потому что намного проще создавать инструменты, поддерживающие несколько октав и полифонию (более одной ноты за раз). Равный темперамент настолько распространен, что используется почти во всей музыке, которую вы, вероятно, слышите во всем мире.

Волшебная формула

Равный темперамент основан на довольно простой формуле, позволяющей легко извлекать любую ноту. По словам автора музыки Бо Константинсена, «12-тоновая одинаковая темперация делит звуковое расстояние между гармониками 1 и 2 на 12 равноотстоящих элементов».

Используя язык программирования, если мне нужна частота 3-й ноты в 12-нотной октаве, и мы предполагаем, что базовая частота равна 440 Гц (A в большинстве западной музыки), мы можем просто сделать:

440 * Math.pow(2, 3 / 12)
> 523.2511306

Если я хочу разделить октаву, скажем, на 19 нот (19 TET) и получить частоту для третьей ноты, мы просто делаем

440 * Math.pow(2, 3 / 19)
> 490.8894838

Учитывая, что на рынке существовала нехватка библиотеки JavaScript, поддерживающей этот подход ввода / вывода, я создал Freqi, самая ранняя версия которой поддерживала только Equal Temperament, но потенциально бесконечное количество систем настройки. Freqi используется в качестве основы для Tuning Synth.

Видеть и слышать

С Tuning Synth вы можете услышать разницу между истинной пифагорейской системой и другими системами.

Попробуйте послушать пятую ноту на языке Equal Temperament, а затем на пифагорейском. Вы должны услышать и увидеть небольшое падение высоты звука. Это действительно иллюстрирует то, что равная темперация является приближением и что любые две ноты (кроме октавы), звучащие вместе, будут иметь некоторый диссонанс.

Взгляните на иллюстрацию ниже из Превосходного курса Удеми Бо Константинсена, чтобы увидеть несоответствия, о которых я говорю.

Теперь давайте посмотрим на разницу при использовании Tuning Synth. Я сознательно выбрал ноту с наибольшим несоответствием.

Визуализация звука

Существует множество способов визуализировать звук, от 2D-волновых диаграмм до 3D-систем частиц - я уверен, что вы видели их все. Самый распространенный способ добиться визуального представления сигнала, преобразованного из временной области в частотную, с помощью БПФ (быстрое преобразование Фурье). При использовании с такими языками программирования, как JavaScript, передача звука по конвейеру в буфер БПФ даст массив значений, каждое из которых представляет амплитуду частоты. Количество частот в массиве - это разрешение преобразования. В моем случае он установлен на 1024, чтобы было достаточно данных, чтобы сделать их полезными, но не настолько, чтобы они замедляли работу программы.

Ясно видя

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

Режим полосы может помочь пользователям быстро увидеть общую форму.

Вы также можете увеличить конкретную полосу частот. Это полезно при сравнении двух заметок аналогичных систем или на устройствах с меньшими экранами.

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

Корневая нота

Как упоминалось ранее, я настроил приложение на использование 440 Гц в качестве базовой частоты. Есть некоторые споры о том, следует ли использовать 440 Гц для ноты A в западной музыке, при этом некоторые люди утверждают, что это должно быть 432 Гц. Какими бы ни были ваши предпочтения, вы можете установить корневую ноту через поле ввода числа, например:

Также может быть предпочтительнее установить основную ноту на среднюю C, которая составляет 256 Гц (при использовании 440 Гц для A).

Тип волны

Я намеренно предложил только четыре основных типа волн, чтобы каждая нота была как можно более чистой. Более сложные волны затрудняют различение тонких различий в высоте тона, поскольку они создают более широкий выбор гармоник. Эти гармоники придают звуку текстуру, известную в музыке как тембр. У вашего голоса есть свой уникальный тембр, поэтому определенные частоты будут доминировать.

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

Режимы игры

Еще одна последняя функция, которую я добавил, - это возможность играть либо однократную, либо длительную ноту. По умолчанию для него установлен режим сустейна, так как он помогает слышать и видеть разные частоты. Если вы следили за использованием синтезатора, вы заметили, что изменение системы настройки во время воспроизведения ноты не прерывает воспроизведение, и поэтому изменения высоты звука более слышны.

Однако, просто для удовольствия, я добавил режим покадрового выстрела для тех, кто хочет играть с остановками между нотами.

Известные проблемы

Хотя Web MIDI теперь поддерживается в большинстве современных браузеров, на момент написания, к сожалению, он еще не доступен в Safari или Firefox. Если вы хотите воспроизвести любое веб-аудио с помощью MIDI-клавиатуры, вам придется использовать другой браузер. См. Полный список caniuse.

Кроме того, на iPhone 8 звук воспроизводится с тресками и искажениями. Похоже, это известная проблема с осцилляторами WebAudio в этой версии iOS.

Как я это сделал

Tuning Synth - это специальное приложение JavaScript с открытым исходным кодом, в котором используется как можно меньше сторонних пакетов. Первичной зависимостью является P5.js, который предоставляет API для анимации Canvas и управления звуком.

Как уже упоминалось ранее, движком настройки музыки является моя собственная библиотека Freqi. Это позволило мне создать желаемые частоты и сопоставить их с нотами.

Вывод

Когда я начал создавать Tuning Synth, мои цели состояли в том, чтобы позволить:

  • Любой желающий может получить доступ к этому инструменту бесплатно
  • Пользователи могут играть ноты из широкого спектра международных и исторических систем настройки.
  • Пользователи могут услышать разницу между данной нотой (в октаве из двенадцати нот) в Equal Temperament и Just Intonation.
  • Пользователи, чтобы услышать разницу между данной нотой в обеих системах Пифагора, а именно с запятой и без
  • Пользователи могут увидеть некоторые математические закономерности в чистых звуках

Я считаю, что это веб-приложение отвечает этим целям, но мне хотелось бы знать, считаете ли вы его полезным или вдохновляющим. Комментарии и вклады приветствуются. Вы можете форкнуть его на GitHub здесь.

Удачного тюнинга!