Как создать эвристический алгоритм онлайн-мастеринга и получить предупреждение от RIAA
Добрый день, меня зовут Сергей. В своей статье я бы хотел осветить тему аудио мастеринга, а именно: автоматизированного онлайн-мастеринга музыки.
Я расскажу о своём пути от продюсера психоделического транса до мейнтейнера самой популярной open source библиотеки автоматизированного референсного мастеринга на Python, получившей предупреждение от американской ассоциации звукозаписывающих компаний RIAA (пруф).
Простыми словами, аудио мастеринг — это финальная стадия производства музыкальной композиции. Для электронной танцевальной музыки я выделяю эти основные этапы мастеринга:
Задать определённую окраску звучания (эквализация, сатурация)
Придать глубины и пространства (работа со стереобазой)
Сделать композицию как можно громче, не внося искажения (левелинг, компрессия, лимитинг)
Разработчикам должна быть понятна подобная аналогия: аудио мастеринг — это функция, превращающая один массив байт (WAV файл) в другой. Длительность (длина массива) и общее содержание файла сохраняются, меняются только некоторые нюансы в звучании.
Фото pvproductions
С этой рутиной сталкиваются абсолютно все композиторы и артисты, желающие выпускать свою музыку на цифровых площадках (Spotify, Apple Music) или каких-либо носителях (CD, винил). В большинстве случаев эти задачи решаются с помощью VST плагинов таких известных производителей, как iZotope, Waves Audio, FabFilter и других. Это довольно крупная сфера разработки ПО, работники которой умело наживаются на бедных музыкантах.
В наше время существует множество онлайн-сервисов, пытающихся автоматизировать процесс аудио мастеринга тем или иным способом. Я обязательно приведу их список ниже.
У рядового музыканта теперь нет необходимости покупать и изучать сложные инструменты для ручного рутинного аудио мастеринга: зайди на сайт, загрузи свой микс, подожди пару минут и скачай результат.
Арт хорошего друга
В этой статье пойдёт речь об опыте создания подобного сервиса, а также его переезде в open source в виде Python (PyPI) библиотеки и контейнеризированного веб-приложения для Docker. Устраивайтесь поудобнее, текста будет очень много.
Обо мне
⚠️ Можете смело проматывать до следующего раздела, если вам неинтересна история прокрастинирующего студента, остальные — велком.
Во мне всегда боролись два начала: техническое и творческое. Мама-учитель видела меня будущим успешным физиком или программистом. Папа-актёр считал, что моя судьба — стать великим мировым музыкантом.
Этот внутриличностный конфликт начался еще в школе, в 2004 году, когда один мой знакомый с локального IRC-сервера показал мне свои поделки в Cubase. В то время я был всецело поглощён музыкой таких исполнителей психоделического транса, как Infected Mushroom, Astral Projection, Vibe Tribe. Посетив пару тематических мероприятий, я понял, что хочу так же. Хочу стоять на сцене и играть свою музыку, видеть восторженные глаза слушателей, испытывать это непередаваемое чувство.
Сказочная, непередаваемая атмосфера псайтранс пати
Cubase мне дался не сразу, все-таки в отличие от таких программ, как Photoshop, методом «научного тыка» было довольно сложно добиться чего-то вменяемого. Я начал покорение этой вершины: вместо подготовки к ЕГЭ я читал книги по Cubase, вместо репетиторов по физике и математике, я уделял всё внимание изучению тематических форумов и общению с музыкантами и диджеями в ICQ и MSN Messenger.
Со временем начало получаться: свой собственный full-on psytrance, ура! Подготовив материал на половину альбома и выпустив несколько EP, мне удалось пробиться на сцену — связи в ICQ сделали своё дело. Мое первое настоящее выступление: лес, оупен-эйр, волшебная атмосфера и я, играющий свою музыку, а следом — второе, третье… Конечно же, это совпадало с выпускными экзаменами, что не могло не сказаться на успеваемости.
Фото из клуба Cvet Granata г. Москва (2010)
Олимпиада «Шаг в будущее» — завалена, прошли все мои одноклассники, кроме меня. На поступление в Бауманку не хватило баллов. Результат: Московский институт электроники и математики. В тот момент я начинал понимать, что усидеть на двух стульях вряд ли получится.
Дальше начался первый курс, мои выступления продолжались, количество материала росло. В 2009 году мне удалось договориться с австралийским лейблом Sundance Records о выпуске своего первого альбома. Настоящий альбом на CD тиражом в 1000 копий. Выпуск состоялся в 2010 году, мне даже прислали 50 дисков, это стало моей личной победой.
Explicit — Inspiration Feeling (2010)
Со временем я стал сомневаться в своём занятии:
Субкультура психоделического транса была очень малочисленна, в ней при желании было бы не так сложно добиться «потолка», но это бы не гарантировало стабильный заработок
Я стал ощущать давление от местной атмосферы, восторженные глаза слушателей превратились для меня в глаза торчков под экстази, у меня стало появляться чувство, что я направляю свои ресурсы не в то русло
Психоделический транс в большинстве случаев — это набор случайных звуков под монотонный бас, но моя музыка была не такой. Я старался добавлять запоминающиеся мотивы, мелодии, вокал и оригинальные идеи, и я чувствовал, что это пустая трата времени, потому что рядовому трансеру это было не нужно
По последней причине, кстати, множество моих коллег-музыкантов со временем стали переходить в более перспективные и «благодарные» музыкальные стили, но мне это было не по душе. Во мне жила надежда, что я смогу сделать самый оригинальный и мелодичный психоделический транс на свете. И эта надежда таяла с каждым днём.
После череды различных не совсем верных решений я впал в стагнацию. Выступлений было всё меньше, и мне всё меньше хотелось принимать в них участие. Я придумывал различные отмазки для организаторов. Я знаю, что был не прав по отношению к этим людям, но я ничего не мог с собой поделать. Институт я тоже бросил, потому что я не видел особого смысла в том, как мои однокурсники собирали «пожертвования преподам», чтобы получать зачёты. Я хотел быть честен с собой.
В итоге к 2011 я остался и без учёбы, и практически без музыки. Зато появилась работа. Наверняка, вы видели объявления на подъездах: «Компьютерный мастер на дому»? Я стал им. Эникей по вызову — я считал, что это максимум того, что я достоин, после того, как обманул надежды родителей.
Дёшево и сердито
Проработав несколько лет, мне захотелось большей стабильности, и я ушёл в Московский кредитный банк. Ночной дежурный специалист технической поддержки. Наш отдел занимался поддержкой систем банка в нерабочее время, общаться приходилось только с сотрудниками банка, не с клиентами. Смены, в основном, длились от 16 часов до суток. С коллективом и начальником очень повезло (привет, Сергей Владимирович). В первый год я узнал там довольного много нового, начиная с PL/SQL, продуктов VMware и заканчивая бездной различного банковского ПО.
И, хотя такой формат работы был мне по душе, моё яркое прошлое не давало мне покоя. В сердце теплилась надежда о следующем большом музыкальном проекте. Я не мог смириться с тем, что это всё, на что я способен.
Пристанище бывшего трансового артиста
Да, у меня была возможность отдыха во время отсутствия рабочих задач. Этот грязненький, измазанный в тонере (и не только), матрас стал моим пристанищем на следующие пять лет. Этакий символ того, к чему я пришёл. «Погонишься за двумя зайцами» в действии. Но я благодарен этим бессонным ночам, которые провёл на нём. Они позволили мне переосмыслить свою жизнь.
Цифровая обработка сигналов
В одну из бессонных ночных смен мне стало интересно, как создаются музыкальные программы, а именно VST плагины. Как сделать свой VST эффект, VST инструмент? Моя логика была проста: если бы я смог сделать свой личный уникальный VST плагин, я бы смог воспользоваться им в своей музыке, и она стала бы еще более уникальной и оригинальной. Некий «secret tool», который я бы сделал сам для себя. Я стал верить, что если сделаю что-то подобное, то смогу грандиозно вернуться в музыку и покорить все вершины.
После непродолжительных поисков я нашел мнение одного из специалистов: проектируешь DSP (ЦОС) алгоритмы в MATLAB и далее разрабатываешь чистовой вариант на C++ и VST SDK. И я загорелся. Мне захотелось придумать такой DSP алгоритм, который бы сделал мою музыку самой уникальной. Может, это был бы какой-то неведомый эффект, либо синтезатор с уникальным видом осциллятора, которого еще не существовало. Я пока не знал ответа, но был уверен, что придумаю что-то, если досконально изучу цифровую обработку сигналов.
Арт mikeroyal
Изначально я считал, что ЦОС невозможно изучить самостоятельно. Я даже вёл переписку с Алексеем Лукиным из iZotope в надежде узнать, как постичь данную науку, куда поступить и так далее. На 2015 год картина складывалась примерно следующая:
Почти все российские факультеты или кафедры хоть как-то связанные с ЦОС были «про электронику: ПЛИС и тому подобное», не «про алгоритмы для обработки аудио»
Могло повезти с наставником на кафедре, но маловероятно
Возможно, за рубежом ситуация лучше
Вероятно, продуктивнее всего было бы просто изучать существующие открытые исходники VST плагинов
Так как я хотел фундаментально постичь DSP, я не рассматривал последний вариант на данном этапе. Также я решил не рисковать поступать на факультет электротехники в любой из местных университетов, потому что предполагал, что это не то, что мне нужно. Методом исключения остается…
Да, лёжа на том несчастном, всеми забытом матрасе, я решил попробовать поехать учиться цифровой обработке сигналов в Германии. Я консультировался со специалистами по переезду, искал варианты. Выяснилось, что университетов, обучающих этой специальности, довольно много. И хотя нигде не было указано, что я смогу создавать аудио софт, используя эти знания, у представленных программ обучения была бОльшая связь с Computer Science нежели с электротехникой.
Список рассматриваемых университетов
Universität Stuttgart
TU Ilmenau
TU Darmstadt
Universität Leipzig
Universität Ulm
Friedrich-Alexander-Universität Erlangen-Nürnberg
Universität zu Lübeck
Universität Duisburg Essen
Leibniz Universität Hannover
Ruhr-Universität Bochum
TU Kaiserlautern
TU München
Universität Siegen
Universität Rostock
Otto-von-Guericke-Universität Magdeburg
Universität Kassel
BERGISCHE UNIVERSITÄT WUPPERTAL
RWTH AACHEN UNIVERSITY
TU DRESDEN
Universität Bremen
Kiel University
План был такой: курсы немецкого, сертификат B1, штудиенколлег (студенческий колледж), далее сам университет: 6–7 лет — и я стану спецом по ЦОС к 2022 году! Меня поддержали родители, друзья и коллеги. Но…
Можно искать множество отговорок, но если быть честным, то я побоялся таких кардинальных изменений. У меня не было знакомых, кто провернул бы похожую авантюру, и я спасовал. Как можно было обменять тёплые часы с будущей женой за Dota 2 в Мытищах на учёбу в неизвестной далекой стране, где у тебя никого нет? Я сделал свой выбор.
Но, несмотря на это, идея обучиться ЦОС никуда не пропала, и я нашел другой подход: самообучение. Я стал скупать все доступные книги по цифровой обработке сигналов. Также параллельно с этим я изучал MATLAB. Если нужно было бы сократить всю статью до трёх слов, я бы выбрал:
И хотя содержание прочитанных мною книг значительно отличалось, все они были сосредоточены на этих двух понятиях. Я понимал, что эти знания можно было бы использовать в проектировании фильтров, эквалайзеров, свёрточных ревербераторов. Но как, используя эти знания, можно было бы сделать свой секретный VST плагин, который бы позволил мне создавать свою поистине уникальную музыку? Ответа пока не было (спойлер: его так и нет).
Советую эти книги по DSP
Лучшая — Смит Стивен: Цифровая обработка сигналов. Практическое руководство для инженеров и научных работников
Юкио Сато: Без паники! Цифровая обработка сигналов
Ричард Лайонс: Цифровая обработка сигналов
Оппенгейм, Шафер: Цифровая обработка сигналов
Получив некоторые знания, я решил, что мне нужна практика. Я стал искать возможности проявить себя в сфере ЦОС. Я пытался устроиться в GPU.AUDIO / BRAINGINES на позицию ЦОС алгоритмиста. Но их задачи по распараллеливанию DSP алгоритмов под видеокарты были крайне нетривиальны для меня на тот момент. Хотя я не уверен, что даже сейчас бы справился с чем-то подобным.
В тот период времени я частенько «зависал» с Александром Александровым, основавшим Eternal Engine EMI. Будучи моим коллегой по сцене, он также является истинным электронщиком с образованием в отличие от меня. Обмен идеями и опытом с этим гениальным человеком значительно повлияли на моё будущее развитие. Через несколько лет он успешно запустит в производство свой Apparatus — первый российский дуофонический синтезатор на основе вакуумных и газонаполненных радиоламп.
Также мне удалось поработать тестером плагинов Polyverse Music. Общение с Эрезом Айзеном из Infected Mushroom стало для меня неоценимым опытом. 5 лет назад признание моей работы такими людьми, как он, было бы верхом несбыточных мечтаний. Сидя в хрущёвке в Мытищах, я периодически отправлял команде Эреза видео с различными найденными багами в их разрабатываемой VST-шке, и на основе моих наблюдений эти легендарные люди вносили изменения в свой будущий продукт… Это чувство было сложно описать словами.
Сэм
Июнь 2016 года. Было жаркое лето, все говорили о революционном приложении Prisma. Для тех, кто не в теме: это было одно из первых приложений «нейронного переноса стиля». Как бы выглядела ваша фотография, нарисованная в стиле Ван Гога? Это был хит.
Принцип работы Prisma
В то время я часто переписывался в ВК с Сэмом. Да, это самый настоящий русскоговорящий Сэм. Он был моим коллегой по сцене, и в 2016 году он активно занимался написанием Tech House, Techno и подобной музыки. У Сэма все было на мази, кроме мастеринга.
В то время я частенько подрабатывал мастеринг-инженером «только для друзей», и Сэм иногда пользовался моими услугами. Чтобы понять, как должна звучать отмастеренная версия его трека, я частенько просил его присылать мне «референс», то есть готовый трек какого-нибудь популярного артиста, этакий трек эталонного качества по мнению Сэма. И я старался мастерить треки Сэма так, чтобы они звучали как «референс». И хотя мои действия немного отличались от трека к треку, в них отслеживались повторяемые действия:
Найти самые громкие места в обоих треках
Подровнять трек Сэма по мощности (RMS) к «референсу»
Подогнать АЧХ трека Сэма к «референсу» (мне нравилось пользоваться iZotope Ozone Match EQ для этого)
Поколдовать со стереобазой
Незаметно убрать все «пики» brickwall лимитером (я использовал Voxengo Elephant или FabFilter Pro-L)
Имея небольшой школьный и институтский опыт программирования, я стал задаваться вопросом:, а возможно ли автоматизировать этот процесс? Аналогия с Prisma глубоко засела в моей голове.
Изначально я попытался пойти по простому пути: я искал консольные инструменты для пакетной обработки аудио файлов. Я нашел два любопытных проекта:
Используя данные утилиты, я пробовал написать скрипт, который бы выполнял мастеринговую рутину за меня. Но в итоге у меня не получилось автоматизировать указанную выше последовательность действий, используя эти инструменты. И я не был уверен, что это вообще возможно. Так я пришёл к выводу, что здесь не обойтись только пакетными скриптами.
Я знал MATLAB и цифровую обработку сигналов. Почему было бы не попробовать написать подобную утилиту с нуля? Но перед созданием прототипа, я решил изучить рынок.
Анализ рынка автоматизированного аудио мастеринга на 2016 год оказался следующим: скачиваемые утилиты отсутствовали полностью, но было несколько онлайн-сервисов, предлагающих подобные услуги на платной основе:
И хотя некоторые из них выглядели престижно, все эти сервисы объединяло следующее: они позволяли загружать только свою композицию и самостоятельно решали, как должен звучать финальный результат. Для меня это был полный nonsense, протестировав мастеринг своих композиций на этих сервисах, я получил неудовлетворительные результаты. Я искренне хотел, чтобы мой мастер звучал как Vibe Tribe, а не как решал какой-то там LANDR.
Итог: на тот момент не было ничего, что позволяло бы осуществить подобный автоматизированный референсный мастеринг.
Прототип
Я довольно быстро справился с задачей загрузки аудио файлов в MATLAB. Добавил ресемплинг, проверку длин файлов, количество каналов и так далее.
Первая сложность возникла с выравниванием аудио по мощности:
По своему опыту я знал, что в современной электронной танцевальной музыке изменения чаще всего происходят каждые 8 тактов: вводится новый инструмент или мелодия, меняется гармония, вступает новая перкуссия и так далее. Это также известно как «музыкальная фраза». Был вопрос о продолжительности этих 8 тактов в секундах (напрашивались мысли о BPM анализаторе). Также я знал, что для сравнения громкости часто используют метрику RMS (root mean square). Можно было бы использовать только отрезки с наибольшим RMS. После продолжительных экспериментов я пришел к…