html текст
All interests
  • All interests
  • Design
  • Food
  • Gadgets
  • Humor
  • News
  • Photo
  • Travel
  • Video
Click to see the next recommended page
Like it
Don't like
Add to Favorites

Генерация музыки в реальном времени




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

Разумеется, чисто математическая музыка редко когда оказывается благозвучной, несмотря на красоту математики как науки. Поэтому люди начали пытаться автоматизировать написание привычной, «классической» музыки. Выявить закономерности в произведениях, разложить музыку на «составляющие» и понять, почему та или иная комбинация нот вызывает у слушателя разные эмоции. Почему простое движение по гамме в разных контекстах воспринимается по-разному? Существует ли идеальное произведение? Твердых ответов на эти вопросы до сих пор нет — есть лишь философские размышления музыковедов да теоретиков. Но музыканты и математики по всему миру не сдаются и продолжают копать этот вопрос.

Будем считать, что со вступлением покончено и перейдем сразу к моей работе. Я начал увлекаться генерацией музыки пару лет назад и выбрал эту тему в качестве своей магистерской работы на мехмате ЮФУ.
Тема моей диссертации звучит страшно: «Инкрементная генерация музыкальных произведений на основе динамических паттернов.» В переводе на русский: генерация музыки в реальном времени с использованием изменяющихся паттернов.

К написанию данного поста меня сподвигла аналогичная работа, опубликованная вчера и личная просьба Vokabre осветить данный вопрос. Я постараюсь по минимуму использовать термины из теории музыки и рассказывать все простым языком, но иногда меня может заносить, так что заранее извиняюсь.

Постановка задачи

Я поставил перед собой задачу написать генератор музыки, который бы мог делать следующее:
  • Генерировать благозвучные мелодии;
  • Гармонизировать мелодию, согласно правилам гармонии;
  • Генерировать аккомпанемент по имеющимся аккордам;
  • Все вышеперечисленное делать в реальном времени (т.е. на лету, такт за тактом);
  • И при этом позволять вмешиваться в процесс генерации (менять инструменты, тональность, высоты нот и тд);
  • Ну и опционально: выводить все это в виде нот, сохранять в midi и mp3.


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

Пример генерируемой музыки


Используемые инструменты

Разрабатывал я все на языке Java, для которого есть замечательная музыкальная библиотека jMusic, уже содержащая музыкальные примитивы, вроде ноты, фразы или партии, а также имеющая инструменты работы с MIDI. Для воспроизведения звука использовался синтезатор Gervill, входящий в состав JDK 1.7 и позволяющий воспроизводить музыку с использованием внешних звуковых банок в формате .sf2. Также была использована библиотечка JAVE (Java Audio Video Encoder) — которая пережимает захваченное wav аудио в компактный mp3.

Структура генератора




Тут все, вроде, очевидно. Модель упрощенная и не претендует на универсальность, но основные структурные единицы музыкального произведения демонстрирует наглядно.




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

Модуль основной мелодии

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




У Баха некоторые из произведений очень легко описываются одинаковыми паттернами, например, вот эта прелюдия в до-миноре имеет один и тот же паттерн (меняется только аккорд, по которому идет движение)




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

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




Построение ведется в три этапа.
  1. Построение каркаса из простейших паттернов.
  2. Замена некоторых из нот паттернами более мелкой длительности (с сохранением движения в сторону следующей ноты)
  3. Внесение финальных коррективов и добавление украшений (форшлагов и трелей)


В итоге мы получаем какую-нибудь мелодию. Она будет нашим мотивом на ближайшие четыре такта. В дальнейшем этот мотив либо повторится, но уже от другой ноты, либо будет слегка изменен, либо вовсе будет заменен на другой мотив — в зависимости от структуры текущего предложения.

Модуль гармонизации

Гармонизация мелодии — это задача достойная отдельного исследования. Ради программы, способной решить задачи по гармонии, студенты муз. колледжа готовы пойти на многое. Для них гармония — это что-то вроде синонима к слову «матан». И не зря — правил гармонии не так уж и много, но вот исключений из них очень много. Поэтому разработка алгоритма, который бы верно гармонизировал один такт с учетом предыдущих тактов, но без информации о последующих тактах может занять очень много времени. По правде говоря, у меня со знакомой-теоретиком музыки была даже дискуссия о существовании такого алгоритма.

Таким образом, необходимо задачу упростить и сделать реализуемой за разумные сроки. Так что введем ряд ограничений: во-первых гармонизировать будем только трезвучиями (никаких септ- и нонаккордов, пока что), во-вторых пренебрежен несколькими правилами касательно уменьшенных аккордов, которые могут затруднять жизнь, и в-третьих — сделаем обязательным движение к доминанте в конце 4 предложения и к тонике в конце 8-го. Чтобы у слушателя возникало ощущение завершенности.




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

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

Модуль генерации второстепенных аккордов




Работа этого модуля довольно проста: он берет аккордовую сетку и, подставляя простейшие паттерны, генерирует простенькие второстепенные голоса. За основу берутся ноты, входящие в состав аккорда, и таким образом гарантируется гармоничность. Аккомпанемент — это то, что обычно играется в левой руке у фортепиано, либо стандартный перебор у гитары. По сути — тоже набор паттернов, только более мелкой длительности.

Воспроизведение

Когда все сгенерировано — полученная партитура поступает в распоряжение всех плееров: один выводит это в виде звука, другой рисует ноты, а третий — пишет в файл. Чтобы гениальное произведение не пропало!

Пользовательский интерфейс




Пользовательский интерфейс позволяет задавать параметры как до, так и во время самой генерации (изменения вступят в силу уже в следующем такте). Можно менять инструменты, их роли (мелодия\втор. голос\аккомпанемент), громкость, октаву и так далее. Также можно регулировать общий темп и громкость произведения, его тональность и частоту появления украшений. Это такой дирижерский пульт для виртуального ансамбля.

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

P.S. Это мой первый пост на хабре, так что если я допустил какие-то ошибки в разметке — дайте знать, пожалуйста!
Читать дальше
Twitter
Одноклассники
Мой Мир

материал с habrahabr.ru

2

      Add

      You can create thematic collections and keep, for instance, all recipes in one place so you will never lose them.

      No images found
      Previous Next 0 / 0
      500
      • Advertisement
      • Animals
      • Architecture
      • Art
      • Auto
      • Aviation
      • Books
      • Cartoons
      • Celebrities
      • Children
      • Culture
      • Design
      • Economics
      • Education
      • Entertainment
      • Fashion
      • Fitness
      • Food
      • Gadgets
      • Games
      • Health
      • History
      • Hobby
      • Humor
      • Interior
      • Moto
      • Movies
      • Music
      • Nature
      • News
      • Photo
      • Pictures
      • Politics
      • Psychology
      • Science
      • Society
      • Sport
      • Technology
      • Travel
      • Video
      • Weapons
      • Web
      • Work
        Submit
        Valid formats are JPG, PNG, GIF.
        Not more than 5 Мb, please.
        30
        surfingbird.ru/site/
        RSS format guidelines
        500
        • Advertisement
        • Animals
        • Architecture
        • Art
        • Auto
        • Aviation
        • Books
        • Cartoons
        • Celebrities
        • Children
        • Culture
        • Design
        • Economics
        • Education
        • Entertainment
        • Fashion
        • Fitness
        • Food
        • Gadgets
        • Games
        • Health
        • History
        • Hobby
        • Humor
        • Interior
        • Moto
        • Movies
        • Music
        • Nature
        • News
        • Photo
        • Pictures
        • Politics
        • Psychology
        • Science
        • Society
        • Sport
        • Technology
        • Travel
        • Video
        • Weapons
        • Web
        • Work

          Submit

          Thank you! Wait for moderation.

          Тебе это не нравится?

          You can block the domain, tag, user or channel, and we'll stop recommend it to you. You can always unblock them in your settings.

          • habrahabr.ru
          • домен habrahabr.ru

          Get a link

          Спасибо, твоя жалоба принята.

          Log on to Surfingbird

          Recover
          Sign up

          or

          Welcome to Surfingbird.com!

          You'll find thousands of interesting pages, photos, and videos inside.
          Join!

          • Personal
            recommendations

          • Stash
            interesting and useful stuff

          • Anywhere,
            anytime

          Do we already know you? Login or restore the password.

          Close

          Add to collection

             

            Facebook

            Ваш профиль на рассмотрении, обновите страницу через несколько секунд

            Facebook

            К сожалению, вы не попадаете под условия акции