Создание процедурной музыки - часть 2: Стоя на плечах гигантов

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

На расстоянии около 10 000 футов это распределенная облачная система, которая в настоящее время размещена в общедоступном облаке.

Постоянное хранилище данных:

Я использую MySQL в качестве дискового хранилища для всех данных, включая аналитику. Большая часть данных нормализована, за некоторыми исключениями, когда я рассматриваю таблицы как No-SQL (ключ к Json). MySQL проста в использовании, бесплатна и проверена в боевых условиях.

Хранилище данных в памяти:

Следующая часть совершенно необходима для системы. Это сетка данных в памяти. Есть несколько вариантов, но я считаю, что Hazelcast (https://hazelcast.com/) очень прост в использовании и хранит объекты Java, поэтому я решил работать с ним. Сетка данных нагревается через регулярные промежутки времени, при этом почти вся база данных является объектами POJO. Надеюсь, вы заметите, что система чрезвычайно тяжело читается. Я никак не мог позволить себе аппаратное обеспечение, необходимое для поддержки такого количества операций чтения из SQL, да и смысла в этом не было.

Ядро приложения:

Далее идет то, что я называю ядром приложения. Это Java-приложение Spring Boot (https://projects.spring.io/spring-boot/), которое в основном отвечает за всю сантехнику, такую ​​как сборка слоев аудио, обработка эффектов, нормализация, генерация и рендеринг миди, передача аудио в сеть доставки контента. Он также используется для извлечения функций и передачи их работникам машинного обучения.

Работники машинного обучения:

Работники машинного обучения — вот где происходит волшебство. Они получают извлеченные функции данных из ядра приложения и решают, будут ли потенциальные варианты звучать хорошо или нет. Когда я начал проект, я начал с изучения языка R и попытался написать воркеров на R. Сначала его было легко использовать, но в итоге он оказался ужасным в качестве параллельного веб-сервиса. После прерывания миссии с R я начал использовать Python, который работал хорошо, а также является стандартом в науке о данных. Однако доступ к данным уже был написан на Java, и я был разочарован количеством времени, которое я тратил впустую на перенос моделей данных и модулей доступа к данным из существующего приложения Spring Java. Это разочарование привело меня к тому, что я начал играть с фреймворком DeepLeaning4J (https://deeplearning4j.org/). После тестирования демо-приложений DL4J и понимания того, что им достаточно легко пользоваться, я решил его использовать. Итак, в настоящее время рабочие ML по сути являются оболочкой веб-API Spring Boot вокруг DL4J. Рабочие процессы машинного обучения спроектированы так, чтобы их можно было масштабировать по горизонтали. Обычно у меня одновременно работает около 4 экземпляров.

Сеть доставки контента:

Я бы предположил, что подойдет любая CDN (сеть доставки контента), но в настоящее время я использую Amazon S3 просто из-за знакомства.

Интерфейс обучения:

Это Spring Boot/Angular GUI для аналитики/обучения модели.

Сайт конечного пользователя:

Общедоступный веб-сайт Nodejs/Angular, используемый для передачи звука из S3 пользователям.

Это список важных библиотек, фреймворков и технологий:

FFMPEG:

https://ffmpeg.org/

Используется для многих вещей: кодирования, нормализации, слияния аудио и некоторых эффектов.

TarsosDSP:

https://github.com/JorenSix/TarsosDSP

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

JFugue:

http://www.jfugue.org/

Эта библиотека сэкономила мне огромное количество работы. Мне, как человеку с формальным музыкальным образованием, лучше всего подходит традиционная западная гармония. JFugue позволяет мне взаимодействовать с миди с помощью западных нот и названий аккордов, таких как «Cmaj7». JFugue используется для создания миди-файлов из шаблонов нот, выбранных работниками машинного обучения.

Миссис Ватсон:

https://github.com/teragonaudio/MrsWatson

Это VST-хост командной строки, который можно использовать для двух целей.

1) преобразовать миди-файлы в аудио с помощью синтезаторов с открытым исходным кодом.

2) добавить эффекты к аудио.

Пожалуйста, прослушайте последние выходные данные моей системы здесь:

http://signalsandsorcery.com/

Спасибо!

Prt3: Порядок действий