Pull to refresh

Comments 20

Очень годная статья из песочницы, не то что большинство. Спасибо, ждем продолжения!
VST SDK можно скачать с официального сайта.
В дальнейшем мы будем работать с библиотекой VST.NET, которая является оберткой для VST 2.4.
Если я не ошибаюсь, SDK для VST 2.4 на официальном сайте уже давно недоступна.
Все правильно, на официальном сайте сейчас можно скачать SDK версии 3.6.6.

В статье я не рассказываю про программирование на «голом» SDK, а лишь знакомлю читателя c общей идеей работы VST-плагинов (делаю обзор кода, который находится в папке VST3 SDK\pluginterfaces\vst2.x — интерфейсы, структуры и объявления для версии 2.4).

А для работы с VST. NET и вовсе не нужно качать VST SDK.
Поддержка VST 2.4 включена в SDK 3.

да, в версии 3.6.6 есть объявления структур, перечислений из VST 2.x. Но нету примеров, доков, вспомогательных классов для разработки (это все есть для VST 3.x).

спасибо. я не работал в нем, и, видимо, на вики имели ввиду более ранние версии.
поправил статью.
Подозреваю, что вся статья писалась ради посткриптума)

Я даже сходил и послушал и скажу честно, был разочарован. Вы же не думали, что ваше творчество понравится абсолютно всем? Да и у слышал совсем не то, что ожидал — живое исполнение вместо электронной музыки, что было логичным ожидать в теме про синтезаторы. Я не хочу никого обижать, но — хорошая музыка не нуждается в саморекламе. Стив Вай не придёт на хабрахабр с предложением заценить его суперзапил в постскриптуме в статье о неважно о чём.

Проблема с VST сейчас в том, что их — чересчур много. Миллиарды авторских синтезаторов с убогим звучанием и ужасным интерфейсом. Триллиарды эффектов с абсолютно одинаковыми дилэями и компрессорами. А знаете почему? Сейчас расскажу.

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

2. Подобного рода руководства.
Здесь нет обобщения опыта за несколько десятков лет. Вы разобрались с этим пару за дней (как вам показалось) и почувствовали себя достаточно квалифицированным, чтобы учить этому других. И кому-то может показаться, что сложность написания VST — это сложность прикрутить C# к С++, а сложность написания синтезатора — это сложность соединить осциллятор с огибающей и частотной модуляцией. Вам удалось получить отличный от синусоиды звук — и кажется, что вы уже познали дзен. А на самом деле это ещё даже ещё не таблица умножения.

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

Что же делать?

1. Взрослая теория, а не руководства для школьников.
Например, Вадим Завалишин — The Art of VA Filter Design. А после — теорию DSP (ЦОС) как есть, потом — множество научных работ, только из которых можно почерпнуть самое актуальное.

Например, синтезировать элементарные сигналы (помимо синусоиды), как в этом проекте — нельзя. Почему? Потому что эти алгоритмы создают шум. Почему? Сказывается эффект дискретизации. Как правильно? Например — так.

2. Учиться у классиков.
Настоящие музыканты учатся, играя Баха. Ну или признанных современников. Ненастоящие музыканты учатся на гитарных школах, написанных другими ненастоящими музыкантами, и состоящими исключительно из коротких музыкальных фраз. Из которых, как не напрягайся, музыки не получается.

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

3. Использовать подходящие инструменты.
Самый прогрессивный на текущий момент модульный синтезатор — это NI Reaktor, и все инструменты от NI также строятся на его основе. Там есть (почти) всё. Лучше найти самые первые её версии — 2.3 и Generator (предыдущее название). Там и синты с эффектами попроще, и модели реальных (например, Juno) можно найти. Заодно можно будет отследить и развитие тенденций по синтезу (и обработке в том числе) звука.

"Подозреваю, что вся статья писалась ради посткриптума)" — конечно, нет. Тем более, я планирую написать еще 2-3 статьи-продолжения. Прибавим, что сам синтезатор я программировал недели 2-3. Неужели вы все еще думаете, это все, чтобы хабр послушал мои песенки? Слишком высока цена.
Обычно в технических книгах в разделе "об авторе" коротко пишут, чем автор занимается помимо программирования, что у него есть семья, что он играет в теннис и т.д. Мне всегда приятно что я читаю книгу не только как человека-робота, который 24/7 сидит за монитором, и написал толмут, а как живого человека, который имеет привычки, хобби. Да, конечно проблема — я книгу то не писал, видимо, мне так делать не следовало.


"Проблема с VST сейчас в том, что их — чересчур много." — я не пытаюсь заставить читателя сразу писать свой плагин и выкладывать его куда ни попадя. Идея — рассказать про программирование основ синтеза музыки. Но, по моему, логично не писать синтезатор просто на каком-либо ЯП делая еще больше велосипедов, а сделать так, чтобы он был плагином, чтобы его можно было заюзать в программе для обработке звука, немножко познакомиться с этой технологией.


"Подобного рода руководства...." — конечно, в этой статье не написано, как закодить Serum. Допустим, что это Hello World в мире синтеза звука. Руководство для школьников. Без них тоже не обходятся в нашем мире. Вас устроит? Москва то тоже не сразу строилась. Мне кажется, совсем хардкорным статьям на хабре не место. Это уже там книгу надо писать, но, как вы уже сказали, нужен 10-летний опыт для такого. Кстати спасибо, я укажу линк на статью в списке литературы.


"Синтезатор — это модульное устройство..." я сделал обзор классов-компонентов и схему нарисовал как этими компонетами синтезируется звук. Чем не модули-то?


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


По советам "что делать" — спасибо, здесь я со всем согласен.

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

Нет, цикл статей изначально планировался с "тройной связкой": либа VST. NET, C# и возможность прикрутить UI на WPF — такой выбор объяснён в статье.


Я стараюсь описать алгоритмы максимально понятно, чтобы, если найдется желающай, он смог сам закодить их на удобном ему ЯП. Предложенный код легко перенести на C++ (конечно, если немного знать шарп).
Но я бы сам уже, честно, поленился. Так что могу советовать вам просто читать логику алгоритмов)


Можете глянуть сюда:
Martin Finke's Blog "Music & Programming" цикл статей по созданию синта от и до на C++ (чувак кодит и на маке, и на винде), используя библиотеку WDL-OL.
Хабр-переводы Martin Finke's Blog

У одного меня сложилось ощущение, что все эти алгоритмы синтеза звуков — чистый матлабовский симулинк?
Склонировать/скачать репозиторий.
В папку «Libs/» скачать и скопировать следующие библиотеки:
1.1 Jacobi.Vst.Core.dll, Jacobi.Vst.Framework.dll, Jacobi.Vst.Interop из папки «CLR4\x86\Release» линк
1.2 CannedBytes.Midi.Message.dll из папки "_Packages\Code\Release" линк
1.3 NAudio.dll линк
Собрать солюшн в Visual Studio в Debug.
Чтобы запустить синт из студии, нужно использовать проект SimplyHost.
Файлы плагина и зависимые библиотеки будут в папке «out\vst\»:

Какая-то странная у вас система сборки. Точнее она вообще отсутствует. Почему бы не подключить библиотеки из NuGet: VST.NET, NAudio или хотя бы просто не положить dll упомянутых либ в нужную папку в репозитории?

Обновил проекты, спасибо.


Если искать через "Manage NuGet Packeges..." то ни NAudio, ни VST .NET студия не находит, приходится действительно искать через nuget.org и устанавливать через Package Manager Console.


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

Все отлично находится. Вы точно все правильно делаете, у вас настроен NuGet?


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

Погуглил, после удаления %AppData%/Nuget/Nuget.config и рестарта студии стало все находиться.


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

Я правильно понял, что этот синтезатор — монофонический?

Да, когда начал программировать несколько голосов понял что лучше не усложнять.

Вы бы ещё на Delphi предложили написать VSTi )

C# не предназначен для плагинстроения. Все более менее успешные плагины написаны на C++. Не нужно изобретать велосипед - есть уйма замечательных фреймворков, вроде Juce, IPlug2 и других, в составе которых имеются готовые примеры, да и на гитхаб полно проектов.

Sign up to leave a comment.

Articles