Я занимаюсь написанием различных мелодий в разных жанрах довольно давно, но только недавно решил соотнести это занятие с научным подходом.
Что, если существует формула нахождения частоты любой выбранной ноты на любом аккорде? Что ж, углубившись в построение частот нот и настройку музыкальных инструментов, можно выяснить, что, во-первых, лучше использовать алгоритм, а во-вторых — всё будет зависеть от того, какой звукоряд используется:
На сегодняшний день, стандартом звукоряда является «равномерно темперированный строй«. В нём, ноты всех аккордов образуются от ноты «ля», а соотношение между соседними нотами всегда одинаковое: 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/
Добавить комментарий