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

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


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


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

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

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

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


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

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

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

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

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

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


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

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

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

Комментарии (17)


  1. napa3um
    01.07.2016 10:26
    +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. silvansky
      01.07.2016 12:14
      +1

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



  1. darkAlert
    01.07.2016 11:29
    +7

    Простите, но [искусственная] нейронная сеть это устоявшееся математическое понятие, а именно: это обучаемый параметризированный ациклический граф с послойной структурой. У вас же здесь просто агнетно-ориентированный подход (агенты организованы в граф). Зайдя в статью я ожидал увидеть именно нейронную сеть, которую вы обучили и которая моделирует работу драм-машины. Но я не увидел ни нейронной сети, ни обучения, ни датасетов. И был разочарован, т.к. ожидал другого и потратил свое время. К вам абсолютно не было бы претензий, если бы вы более четко формулировали заголовок.


    1. vladshow
      01.07.2016 14:36

      Я был воодушевлен идеей создать программную модель реальной нейронной сети с различными видами нейронов, в том числе нейроны — водители ритма (пейсмейкеры) и обычные нейроны активации с пороговыми уровнями. Позже добавил нейроны задержки. Поэтому решил закрепить свою идею в названии. Как то так…


      1. darkAlert
        01.07.2016 14:49
        +2

        Можете подробней описать как функционирует каждый тип ваших нейронов:
        1) как информация от других нейронов поступает на вход нейрона. Моделируются ли при этом синапсы, т.е. умножается ли на входе сигнал от другого нейрона на некоторый весовой коэффициент W?
        2) что происходит в теле нейрона с входными сигналами от других нейронов? В классической модели нейрона они суммируются, например.
        3) что за функции активации?
        4) как происходит процесс обучения нейронов?


        1. vladshow
          01.07.2016 15:18
          +2

          1) Веса синапсов (связей) нейронов моделируются единичной величиной.
          2) Текущий сигнал на нейроне равен просто сумме входящих сигналов.
          3) В качестве функции активации используется пороговая функция, величина порога которой устанавливается вручную. Т.е. если текущий сигнал нейрона превосходит пороговый уровень, то нейрон активируется, передавая свой единичный сигнал другому нейрону. В момент активации воспроизводится закрепленный за нейроном сэмпл.
          4) В данном случае используется своего рода программная модель реальной нейронной сети и ручное управление ею. У меня была идея добавить механизм обучения для произвольных сетей такого вида и выделить из всей сети два класса нейронов входящие и выходящие (как в классическом перцептроне) с настраиваемой сложной внутренней конфигурацией. Но мне показалась эта задача довольно сложной. И все таки хотелось получить ручное управление сетью, т.е. использовать ее основную функцию распространения сигнала.


          1. napa3um
            01.07.2016 15:57
            +1

            https://play.google.com/store/apps/details?id=com.AffinityBlue.NodeBeat
            https://play.google.com/store/apps/details?id=cc.openframeworks.SphereTones


            1. vladshow
              01.07.2016 16:25
              -1

              NodeBeat похожа, в то время как SphereTones не очень.
              Идеей написания моей программы послужил VST плагин Audio Damage Axon:

              youtube видео


              1. napa3um
                01.07.2016 16:56
                +1

                Вот, Reactable я как раз и гуглил (название забыл, а по всяким ключевым словам типа «visual music composer» ищутся только «классические» «сеточные» редакторы). А NodeBeat в закладках в плэймаркете оказался.

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

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


                1. vladshow
                  01.07.2016 17:07
                  +2

                  Вначале была классическая модель перцептрона с настройкой только количества слоев и нейронов в слое.
                  Вот как это выглядело:

                  Потом я усовершенствовал редактор сети до настройки произвольной конфигурации. Поэтому наверно потерялось восприятие, что это классическая нейронная сеть.
                  Наверно весь парадокс в том, что нейронная сеть есть частный случай агентно-ориентированного графа.


          1. Shifty_Fox
            10.11.2016 14:43
            +1

            Ок, здесь важно понимать вот что.
            Фотон может быть промаркирован в левой или правой щели. Пусть так, но это никак не отразилось на его интерференции. Грубо говоря, это все еще фотон, который пролетел через обе щели, и 50% его помечено правым, а 50% левым. Далее фотон либо натыкается на стиратель бирки, либо нет. Если нет — он врезается в экран, обладая маркером спина, и волновая функция схлопывается, однозначно выбирая лево или право. Даже будь поверхность под углом — во время первой столкновении волны с поверхностью бросается кубик — здесь\не здесь, и по мере покрытия ее поверхностью, рано или поздно произойдет схлопывание.
            Вторая ситуация, когда мы попадаем на стиратель бирки, и здесь все возвращается на начало — фотон просто интерферирует сам с собой как волна, поскольку волна при столкновении с детектором не промаркирована, ее функция не схлопывается.
            Нет никакой передачи информации в будущем, есть принятие решения о схлопывании волны при ударе этой волны о что-то.

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


            1. vladshow
              01.07.2016 16:30

              Не за что.
              Все остались при своем мнении.


              1. napa3um
                01.07.2016 17:01

                Я назвал бы это в стиле «Визуальный редактор ритма Neuron: агентно-ориентированный подход к музыкальному синтезу и композиции». Т.е., слово «нейрон» в вашей концепции задаёт лишь сеттинг для агентов, но принципиально концепцию не меняет. Можно даже скины придумать, чтобы вместо нейронов были зверушки или шестерёнки.


  1. WinPooh73
    01.07.2016 14:40
    +1

    Наконец-то мне стало понятно, что такое на самом деле нейрофанк!


    1. vladshow
      01.07.2016 16:34
      +2

      До нейрофанка далеко мне конечно. Т.к. требуется еще подключить синтез басов. Хотя если их записать как сэмплы и эмулировать как удары в драм машине может и получится…


  1. mediareaper
    01.07.2016 15:59

    Есть такая стародавняя программа… cema nodal… только у них сайт не открывается. А вдруг проект cema nodal здох и его душа реинкарнировалась в Вашем творческом порыве?


    1. vladshow
      01.07.2016 15:59

      Возможно наверно и такое :)