Драм-машина на нейронной сети

    В данной статье мне хочется рассказать о своем алгоритме драм-машины на базе нейронной сети.
    Драм-машина предназначена для создания и редактирования повторяющихся музыкальных ударных фрагментов.
    Классическим примером драм машины является драм-машины от кампании Roland (TR-808 и TR-909).

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


    Алгоритм работы нейронной драм-машины


    Ритмические партии ударов получаются после настройки нейронной сети:
    определения классов нейронов и расположении их в сети с принципом влияния.
    Так предлагается использовать нейроны задержки и обычные нейроны.
    Обычные нейроны имеют пороговые уровни. Так если пороговый уровень имеет значение 3, то после 3-х входных сигналов данный нейрон сработает и передаст сигнал далее по сети в соответствии с принципом активности.
    Данный принцип определяет, что нейроны могут иметь две роли — быть как активными (влияющими — передавать сигнал), так и пассивными (принимающие сигнал).
    Нейроны задержки также имеют пороговый уровень, который является интервалом времени по истечению которого после поступления входного сигнала срабатывает нейрон задержки. Интервал времени в данном случае измеряется в тактах работы нейронной драм машины.
    Также вводится третий вид нейронов — нейроны пейсмейкеры. Они также имеют пороговый уровень, который измеряется в тактах работы драм-машины и определяет период их срабатывания.

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

    Выходные сигналы всех нейронов имеют единичную величину. При распространении сигналов от пейсмейкеров до конечных нейронов в моменты активации нейронов воспроизводится соответствующие нейронам сэмплы.

    Программная реализация


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

    Также настраиваются приоритеты звучания нейронов. Это необходимо, чтобы исключить наложение сэмплов друг на друга. Также воспроизведение сэмпла нейрона можно отключать или изменить его громкость. Это актуально в том случае, если требуется создать часть управляющей нейронной сети, в то время как конечные пассивные нейроны будут воспроизводить звук.

    После настройки сети определяется величина единицы времени или скорость тактов драм машины.

    Программу под Windows можно скачать по адресу: тут.

    В программе чтобы установить или убрать связь нужно выбрать активный узел, кликнув по нему,
    и зажав клавиши Ctrl+Z кликнуть на пассивный узел.

    Примеры работы


    Нейросетевой принцип программирования последовательности ударов позволяет получать порою интересные паттерны.

    Примеры использования таких паттернов после небольшой обработки можно послушать в следующих треках:
    тут и тут.

    Пример работы драм-машины можно понаблюдать на следующем видео:
    Поделиться публикацией
    Комментарии 17
      +2
      http://i.kinja-img.com/gawker-media/image/upload/s--OgH68FsC--/c_fit,f_auto,fl_progressive,q_80,w_636/mi4ozyfa6nhvrdj1ackk.gif (неплохо с нейросетевой драм-машиной смотрится).
        +1

        Да это же Нейронный Шаман!


        +7
        Простите, но [искусственная] нейронная сеть это устоявшееся математическое понятие, а именно: это обучаемый параметризированный ациклический граф с послойной структурой. У вас же здесь просто агнетно-ориентированный подход (агенты организованы в граф). Зайдя в статью я ожидал увидеть именно нейронную сеть, которую вы обучили и которая моделирует работу драм-машины. Но я не увидел ни нейронной сети, ни обучения, ни датасетов. И был разочарован, т.к. ожидал другого и потратил свое время. К вам абсолютно не было бы претензий, если бы вы более четко формулировали заголовок.
          0
          Я был воодушевлен идеей создать программную модель реальной нейронной сети с различными видами нейронов, в том числе нейроны — водители ритма (пейсмейкеры) и обычные нейроны активации с пороговыми уровнями. Позже добавил нейроны задержки. Поэтому решил закрепить свою идею в названии. Как то так…
            +2
            Можете подробней описать как функционирует каждый тип ваших нейронов:
            1) как информация от других нейронов поступает на вход нейрона. Моделируются ли при этом синапсы, т.е. умножается ли на входе сигнал от другого нейрона на некоторый весовой коэффициент W?
            2) что происходит в теле нейрона с входными сигналами от других нейронов? В классической модели нейрона они суммируются, например.
            3) что за функции активации?
            4) как происходит процесс обучения нейронов?
              +2
              1) Веса синапсов (связей) нейронов моделируются единичной величиной.
              2) Текущий сигнал на нейроне равен просто сумме входящих сигналов.
              3) В качестве функции активации используется пороговая функция, величина порога которой устанавливается вручную. Т.е. если текущий сигнал нейрона превосходит пороговый уровень, то нейрон активируется, передавая свой единичный сигнал другому нейрону. В момент активации воспроизводится закрепленный за нейроном сэмпл.
              4) В данном случае используется своего рода программная модель реальной нейронной сети и ручное управление ею. У меня была идея добавить механизм обучения для произвольных сетей такого вида и выделить из всей сети два класса нейронов входящие и выходящие (как в классическом перцептроне) с настраиваемой сложной внутренней конфигурацией. Но мне показалась эта задача довольно сложной. И все таки хотелось получить ручное управление сетью, т.е. использовать ее основную функцию распространения сигнала.
                +1
                https://play.google.com/store/apps/details?id=com.AffinityBlue.NodeBeat
                https://play.google.com/store/apps/details?id=cc.openframeworks.SphereTones
                  –1
                  NodeBeat похожа, в то время как SphereTones не очень.
                  Идеей написания моей программы послужил VST плагин Audio Damage Axon:
                  youtube видео


                  Могу привести инструмент, которым я также воодушевлялся — это Reactable.
                  youtube видео

                  Одноименное приложение под андройд:
                  https://play.google.com/store/apps/details?id=com.reactable

                  Мое приложение было написано в студенческие годы в далеком 2011.
                  Вот мое первое упоминание о приложении:
                  http://sv-beat.livejournal.com/1018.html
                  Далее я усовершенствовал программу от простого перцептрона до произвольной конфигурации нейронной сети.
                    +1
                    Вот, Reactable я как раз и гуглил (название забыл, а по всяким ключевым словам типа «visual music composer» ищутся только «классические» «сеточные» редакторы). А NodeBeat в закладках в плэймаркете оказался.

                    В общем, это не нейроны, это «музыкальные агенты», соединяемые потоками событий (как уже отметили выше). Если уж вам хотелось обозвать это всё каким-нибудь околоматематическим термином.

                    Но если всё это воспринимать не как искусственную нейросеть (которая уже застолбила за собой название), а именно как исследовательскую модель воспроизведения ритма мозгом (т.е., поиском специализаций нейронов, достаточных для воспроизведения «музыкальных феноменов»), то, наверное, и «простительно» использование слова «нейросеть». Нужно было только в заголовке и в повествовании отметить данный факт как-то, чтобы энтузиасты машинного обучения не разочаровывались.
                      +2
                      Вначале была классическая модель перцептрона с настройкой только количества слоев и нейронов в слое.
                      Вот как это выглядело:

                      Потом я усовершенствовал редактор сети до настройки произвольной конфигурации. Поэтому наверно потерялось восприятие, что это классическая нейронная сеть.
                      Наверно весь парадокс в том, что нейронная сеть есть частный случай агентно-ориентированного графа.
                  0
                  Спасибо за подробный ответ.
                  Все таки я считаю, что это именно агентно-ориентированная модель, а не модель нейронной сети.
                    0
                    Не за что.
                    Все остались при своем мнении.
                      0
                      Я назвал бы это в стиле «Визуальный редактор ритма Neuron: агентно-ориентированный подход к музыкальному синтезу и композиции». Т.е., слово «нейрон» в вашей концепции задаёт лишь сеттинг для агентов, но принципиально концепцию не меняет. Можно даже скины придумать, чтобы вместо нейронов были зверушки или шестерёнки.
            +1
            Наконец-то мне стало понятно, что такое на самом деле нейрофанк!
              +2
              До нейрофанка далеко мне конечно. Т.к. требуется еще подключить синтез басов. Хотя если их записать как сэмплы и эмулировать как удары в драм машине может и получится…
              0
              Есть такая стародавняя программа… cema nodal… только у них сайт не открывается. А вдруг проект cema nodal здох и его душа реинкарнировалась в Вашем творческом порыве?
                0
                Возможно наверно и такое :)

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

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