- PVSM.RU - https://www.pvsm.ru -

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

image

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

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

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

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

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

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

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

example_dx_dy_x5678_y7768 [5]
example_dx_dy_y776897123 [6]
example_y47 [7]
example [8]

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

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

Источник [9]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/muzy-ka/289309

Ссылки в тексте:

[1] «бесконечный узор на основе простых чисел»: https://habr.com/post/417861/

[2] здесь: https://github.com/NewYaroslav/xwave

[3] здесь: https://github.com/NewYaroslav/strange_pattern

[4] example_dx1000_dy1000_x2018_y8: https://soundcloud.com/elektro-yar/example-dx1000-dy1000-x2018-y8?in=elektro-yar/sets/prime-numbers

[5] example_dx_dy_x5678_y7768: https://soundcloud.com/elektro-yar/example-dx-dy-x5678-y7768?in=elektro-yar/sets/prime-numbers

[6] example_dx_dy_y776897123: https://soundcloud.com/elektro-yar/example-dx-dy-y776897123?in=elektro-yar/sets/prime-numbers

[7] example_y47: https://soundcloud.com/elektro-yar/example-y47?in=elektro-yar/sets/prime-numbers

[8] example: https://soundcloud.com/elektro-yar/example?in=elektro-yar/sets/prime-numbers

[9] Источник: https://habr.com/post/420225/?utm_source=habrahabr&utm_medium=rss&utm_campaign=420225