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

    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

    По идее можно доработать алгоритм и использовать его для примитивных игр, чтобы мелодии в игре никогда не повторялись.
    Поделиться публикацией
    Похожие публикации
    Комментарии 16
      +3

      Не прёт. Практически рандомные ноты, какофония. А вообще тема интересная — как мозг отличает красивые мелодии от некрасивых. Вот где поле для будущих забав с нейросетями.

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

          А где софт? Такой чтоб сам уникальные мелодии сочинял в заданном стиле, и басы и ударники и прочее. Чтоб выгрузить в midi формате, а дальше во FrootyLoops'e подобрать инструменты и эффекты

            0
            Есть такая штука, только онлайн: муберт.ком
          0
          Попробуйте рандом, там будет действительно какафония. Здесь есть мелодии, они конечно встречаются островками, ну и к тому же, это какой-то 8-ми битный звук по звучанию. Но статья изначально не была ориентирована на гурманов музыки, а им, как известно, и человеком созданная электронная музыка не нравится. Сама идея тут главное, можно улучшить звучание, найти хорошие начальные позиции.
            0
            Можно попробовать использовать не две полные октавы, а какие-нибудь гаммы (натуральный минор, натуральный мажор и т.д.), должно получиться мелодично.
            +1
            >> чтобы мелодии в игре никогда не повторялись
            А хорошо ли это, вообще говоря?
            Сама идея занятная, но мелодии-то как раз и нет. Мелодия — это осмысленное высказывание, музыку создает композитор, а не закономерность. Музыка — это слишком человеческое, увы )
              0
              А зачем на фоне игр «осмысленное высказывание композитора»?
              А чем хуже «осмысленное высказывание» программиста?
              +1
              Если у кого не получается скачать из-за хабраэффекта — добавьте файлы к себе в google drive и скачайте zip-архив, тогда гугл не проверит ограничения.
                0

                Да, гуглу не понравился хабраэффект. Перезалейте пожалуйста в более надежное место. :(

                  +2
                  Или мой совет про скачивание всего как .zip из своего drive, либо gist.githubusercontent.com/toriningen/79510e6e5a5b94e4943dabf50c08b1ad/raw/11fd289a89d5e7fcbb6a22ca426ca241fff890b8/files.7z.b64 — не знаю, насколько долго гитхаб продержится.

                  но вообще мне не понравилось. Просто случайный набор звуков, без гармонии, без сюжета, без ничего.
                    0

                    Спасибо! В целом интересно, но до Mubert конечно далеко, очень далеко… Хотя, это скажем так, немного разные вещи...


                    Заголовок спойлера

                    Не нажимайте на ссылку! Там 13 MB 7z архива закодированного в base64! Только curl/wget, только хардкор!

                  0
                  Забавно, даже можно какое-то время слушать.

                  а можешь не отдельные ноты, а кусочки музыки посмешивать?
                    0
                    Чтобы мелодию рандома было интересно слушать, рандом должен оперировать не нотами, аккордами или какими-то еще отдельными структурами, а всем пространством структур музыки, воспринимаемых человеком, и исследовать новые. Т. е. например, есть жанр симфонии или оперы с частично повторяющимися темами, как у Аргонова. Аргонов — не ИИ и музыку преимущественно пишет сам, но стремится к инновациям, таким как пиксельная музыка или модернизация «классического» саунда 80-х или 90-х. Есть проекты намеренно сверхзатяжных произведений, воспринимаемых человеком опосредованно; но тут вся инновация — в масштабе и только. А вот когда рандом сделает рандомный общий паттерн повторяемости/уникальности мелодий (на уровне структуры оперы или чего-то более масштабного, но «не-оперу»), рандомную, но гармоничную (не обязательно для нового слушателя, но обладающую внутренними закономерностями) схему этих мелодий и отличий в их вариациях, тональностях, темпах и т. д., и наконец нафарширует это рандомными базовыми элементами мелодий — вот тогда будет Настоящая Рандомная Музыка:)
                    Иными словами: берем несколько кирпичиков, составляем из них несколько более сложных элементов, из этих элементов — тоже немного вторичных структур, третичных, четвертичных… сколько всего будет уровней организации, хз, можно замутить и процедурно генерируемую «музыкальную Вселенную» типа Space Engine, полное прослушивание которой займет миллиарды лет или вообще потребует нелинейного времени, но для любой заданной локации будет выдаваться детерминированная схема «звезд», т. е. аккордов и прочих структур. И все это потребует не такого уж большого кода.
                      +1
                      Да, имеет место быть. Однако, в эту музыку нужно добавить побольше музыки, чем просто звучание бипера.

                      Посмотрите, а главное — послушайте, как звучит число Пи, или как звучат голы футбольных матчей.
                        0

                        Спасибо за симфонию гола, пропустил как-то этот шедевр… Очень даже интересно!

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое