Бесконечная алгоритмическая мелодия на основе простых чисел

в 17:05, , рубрики: алгоритм, алгоритмическая композиция, Алгоритмы, бесконечность, математика, музыка, музыкальная пауза, музыкальная теория, музыкальные инструменты, ненормальное программирование, простое число, простые числа, процедурная генерация, узоры, фракталы
image

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

Алгоритм генерации мелодий

Для создания мелодий я сделал простой генератор меандра с затухающим сигналом. При этом можно накладывать несколько генераторов меандра друг на друга. Далее задаем периоды генераторов меандра в соответствии с частотами нот, а амплитуду генераторов задаем в зависимости от наличия «зажатой» клавиши. В качестве сигнала на нажатие клавиши я использовал значение пикселя 2D картинки, взятой из вертикального столбца, который можно перемещать по изображению. Столбец содержит 14 пикселей, что соответствует 7 нотам 2-й и 3-ей октавы. Клавиша имеет только два состояния — нажата или нет.

Генератор меандра и функции для сохранения результата в WAV файл я реализовал как отдельную библиотеку для работы со звуком. Находится она здесь.

Программу для генерации музыки можно просмотреть здесь. Она называется simple_sound. Готовый exe можно найти в архиве. На выходе программа создает WAV файл «example».

Примеры мелодий

Одна из самых интересных мелодий, example_dx1000_dy1000_x2018_y8. В названии мелодии указан размер сдвига по координатам X и Y, а так же начальные координаты. Остальные мелодии:

example_dx_dy_x5678_y7768
example_dx_dy_y776897123
example_y47
example

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

Автор: Ярослав

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js