На сайте регулярно появляются статьи про автогенерацию музыки или об авто-аккомпанименте. Некоторые в качестве результата воспроизводят невнятное бибикание, у некоторых получается писать вполне человеческую музыку.
В данной статье описывается реализация авто-аккомпанимента для аккордовых прогрессий.
Идея
Сделать возможность подобрать и прослушать звучание аккордов в разных стилях. Работать все должно просто, желательно поменьше кнопок и пунктов меню.
Реализация
Как выглядит веб-версия можно посмотреть здесь:
Как видно, кнопок достаточно много, но гораздо меньше чем у подобных программ.
Сделано всё на JavaScript, поэтому хорошо работает как в браузере, так и в Android-приложениее собранном с Cordova.
Автогенерация
Автогенерации музыки несколько сотен лет (см. https://ru.wikipedia.org/wiki/Музыкальная_игра_в_кости ). Обычно используются наборы паттернов (рифов или музыкальных фраз) которые транспонируют под выбранные тональности.
Для воспроизведения используются 4 стандартные в современной музыке линии:
Drums - барабаны, задают ритм
Bass - басовая линия
Lead - мелодия или рифы
Pad - долгие звуки (контрапункт) для окраски аккордов
Подготовка паттернов это достаточно сложная задача. Они должны храниться в виде ступеней лада для удобного транспонирования. Для каждой линии подготовлено по нескольку десятков паттернов с разными инструментами.
Кроме того, есть особые требования к рифам - они должны хорошо играть в разных вариациях. Например нет никаких технических препятствий для добавления гитарных рифов из Metallica, но они слищком специфичный и в большинстве прогрессий будут звучать плохо.
Каждый паттерн должен звучать и не плохо и не хорошо. Так, средне, не туда, ни сюда. Иначе в одних прогрессия он будет звучать хорошо, а к другим не подойдет совсем.
Звук
Сервис для музыки должен хорошо воспроизводить музыку, что естественно.
В программе использовался этот набор сэмплов. Он содержит сотни инструментов, есть 10-ти полосный эквалайзер, ревербератор, динамический компрессор. Всё работает из JavaScript в любом браузере и не требовательно к ресурсам.
При первом старте может играть с лагами т.к. инструментов относительно много и они кешируются несколько почти минуту.
UX/UI
На главном окне всего 4 кнопки по которым можно менять генерируемые паттерны в прогрессии. Тапнуть - выбрать случайный паттерн, повернуть - выбрать какой-то конкретный фрагмент.
Слайдером можно выбрать одну из готовых прогрессий.
По кнопке с шестеренкой можно открыть окно с настройками (громкость, темп, редактирвоание отдельных аккордов и т.п.):
Выглядит всё достаточно лаконично, но не в ущерб функциональности.
Импорт
По кнопке [Аа] можно вставить собственную прогрессию. Например скопировать из учебника или со страницы сайта.
Однозначного стандарта на запись аккордов нет, придется парсить различные варианты. Примеры записи
Am—Bdim—C—Dm—Em—F—G
vi - IV - I - V
Кроме того, в примерах аккордовых прогрессий могут использоваться различный спец.символы.
Экспорт
Как и в большинстве музыкальных программ, поддерживается экспорт в файл MIDI.
В нижней панели есть кнопка для отправки редактируемой прогрессии в Твиттер, ВКонтакте и тп
Для корректного отображения превью поддерживается протоколы Open Graph и Twitter Cards.
Результат
Веб-версию можно запустить здесь
Приложение для Android доступно здесь
P.S.
Если есть какие-то вопросы по генерации или Web Audio API - можно спрашивать в комментариях.
zhzhitel
Я так понимаю, этой музыкой можно сопровождать ролики на ютубе без риска нарваться на санкции за нарушение авторских и смежных прав.
Можно ли скачать получившийся трек в mp3?