Вычисление значения частоты любой ноты и интересное звучание «псевдонатурального» строя

от автора

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

Что, если существует формула нахождения частоты любой выбранной ноты на любом аккорде? Что ж, углубившись в построение частот нот и настройку музыкальных инструментов, можно выяснить, что, во-первых, лучше использовать алгоритм, а во-вторых — всё будет зависеть от того, какой звукоряд используется:

На сегодняшний день, стандартом звукоряда является «равномерно темперированный строй«. В нём, ноты всех аккордов образуются от ноты «ля», а соотношение между соседними нотами всегда одинаковое: 1 делить на корень из двух по основанию 12. Значение частоты ноты «ля» в так называемой «первой октаве» (четвёртой по стандарту MIDI) равна 440 герц.

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

А раньше — стандарта на частоту ноты «ля» вообще не было. Её настраивали по-разному для разных композиций и инструментов, что делало каждую мелодию более уникальной. Попробуйте сравнить ноты «ля» в современных мелодиях и на настоящих записях старых композиций: ноты в старых мелодиях зачастую будут звучать намного ниже, ибо частота часто была в районе 415-и герц.

Но просто менять частоту ноты «ля», и образовывать от неё другие — это скучно, ведь это почти равнозначно простому понижению питча итоговой мелодии. Что, если можно добиться очень необычного звучания? Например: поменять звукоряд.

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

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

Соотношения между частотами по официальным данным
Соотношения между частотами по официальным данным

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

Для начала нужно понять, какая будет частота ноты «ля» в субконтроктаве (нулевой аккорд по стандарту MIDI):

Стандарт (440)

440 — 220 — 110 — 55 — 27.5

Среднее старых мелодий (415)

415 — 207.5 — 103.75 — 51.875 — 25.9375

Для фанатов 432 (432, ого)

432 — 216 — 108 — 54 — 27

А соотношения можно взять обратные тем, что указаны на картинке немного выше.

Ну, и теперь можно продумать весь алгоритм:

база_ля          = 27.5 либо 25.9375 либо 27 колтчество_октав = 15 ноты_равномерные = [] ноты_натуральные = []   // Генерация нот в равномерном соотношении   // Можно заранее высчитать соотношения, ведь они одинаковые полтона_вверх = 1.0594630943592953 полтона_вниз  = 0.9438743126816934  // Основной цикл для "октава" в количестве "колтчество_октав":   ля = база_ля   умножаем ноту ля на два столько раз, какая сейчас октава - 1   // Теперь считаем ноты, одну за другой   ля_диез = ля * полтона_вверх   си = ля_диез * полтона_вверх   соль_диез = ля * полтона_вниз   соль = соль_диез * полтона_вниз   ...   до_диез = ре * полтона_вниз   до = до_диез * полтона_вниз   добавить все ноты в массив друг за другом, от "до" до "си"   // Генерация нот в натуральном соотношении, уже интереснее   для "октава" в количестве "колтчество_октав":   ля = база_ля   умножаем ноту ля на два столько раз, какая сейчас октава - 1   // И начинается самое интересное:   ля_диез = ля * (16/15) иррациональное значение   си = ля_диез * 1.0546875   соль_диез = ля * 0.96   соль = соль_диез * 0.9375   фа_диез = соль * 0.9375   фа = фа_диез * (128/135) иррациональное значение   ми = фа * 0.9375   ре_диез = ми * 0.96   ре = ре_диез * 0.9375   до_диез = ре * (128/135) иррациональное значение   до = до_диез * 0.9375   добавить все ноты в массив друг за другом, от "до" до "си"

Как можно заметить, все данные полностью совпадают с официальными, а даже если и не совпадают — то это потому что наш результат более точен, а в официальных данных приведены сокращённые значения.

Результат работы алгоритма для всех стандартов, записывайте, пригодиться может
Результат работы алгоритма для всех стандартов, записывайте, пригодиться может

Реализацию данного алгоритма я уже написал на языке программирования Python, с ней можно ознакомиться в моём репозитории на Codeberg (да здравствует свободное ПО!).

И рассчитав все ноты, получив их в виде массива, можно генерировать звуки нужных частот. Я даже написал программу всё на том же Python, которую можно найти во всё том же репозитории, и которая позволяет сыграть на MIDI клавиатуре мелодию «в любом строю», меняя его нажатием стрелочек «влево» и «вправо».

С частотой ноты «ля» в 415 герц и в «псевдонатуральном строю» ноты звучат словно на полтона ниже, но это не совсем так (что даже можно заметить), и звучат словно более эмоционально, более выразительно и душевно.

Скриншот из вышеупомянутой программы для игры с разными частотами
Скриншот из вышеупомянутой программы для игры с разными частотами

А для чего это я делал?

Разумеется, я начал этим увлекаться не просто так. У меня есть наполеоновские планы по созданию собственного, полностью свободного и кросс-платформенного аналога FLStudio, с удобным управлением и красивым дизайном, а не как это сделано в LMMS (без обид, но управление в нём очень кривое, и отвлекает от написания музыки). Я уже даже продумал, как будут устроены инструменты (не VST, но возможно даже лучше, и точно безопаснее, ибо я параноик, и хочу защитить пользователей от уязвимостей через инструменты).

И одной из главных особенностей моего аналога будет передача инструментам не только номера нажатой ноты по стандарту MIDI, но ещё и частоты, чтобы инструменты по большей части работали с частотами, и можно было добиваться необычных звучаний прямо во время написания.

Из проблем пока нерешённость, на чём лучше писать (пока что думаю на C++, с использованием мультимедиа библиотеки SFML), и как генерировать сами звуки, ибо у меня получается пока только шум, но по синусу улетающий в бесконечность. Вторая проблема решится подробным изучением принципов наложения разных волн разных частот для создания красивого звука и принципов работы с сэмплами. Будет сложно, особенно учитывая, что я не варился в музыкальной школе десять лет.

А для тех, кто был в музыкальной школе, и не мало — предлагаю писать в комментарии уточнения для данной статьи, а так же делиться своими необычными фактами. Думаю, многим будет интересно почитать.

А если вы шарите за разработку VST плагинов или вообще заинтересованы в написании свободного аналога FLStudio — можете связаться со мной, можно вместе что-нибудь обдумать.

Премного благодарен за выделенное внимание.


ссылка на оригинал статьи https://habr.com/ru/post/701802/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *