Keywriter. Как это делалось
Я тут подумал, что кому-то может быть интересна информация о том, как сделать VST-плагин, не зная программирования. Поэтому и решил рассказать, как создавался Keywriter. Цели сделать туториал у меня не было, поэтому подробных инструкций не ждите, только основные этапы.
Началось все много лет назад, когда мне в руки попалась славная программа SynthEdit Джефа Макклинтока. Честно говоря, тогда я совершенно не понял всего того потенциала, который в нее заложен, а стандартные примеры, которыми она оснащалась, энтузиазма не вызывали. В результате SynthEdit был благополучно забыт и долго пылился на задворках жесткого диска. А вспомнил я о нем лишь после того, как появился его конкурент — Synthmaker. К этому времени Интернет уже был хорошенько набит синтезаторами и эффектами, созданными в этих модульных станциях.
Скачав демоверсию Synthmaker, я поначалу пребывал в состоянии легкой эйфории. Красивый, современный, интуитивный интерфейс и обилие базовых элементов вызвали ощущение безграничности возможностей программы. Казалось, стоит только слегка разобраться в этом многообразии, и я быстренько заткну за пояс Native Instruments вместе со Steinberg. Я даже начал подумывать о покупке лицензии (это около $200). Однако дни шли, а ничего кроме стандартных осцилляторов, огибающих и эффекта частотной модуляции у меня не получалось. Эйфория сменилась прозрением: оказалось, что мне катастрофически не хватает фундаментальных знаний в области элементарной физики и математики, не хватает понимания тех процессов, которые я хотел эмулировать.
Желание создавать синтезаторы, правда, не пропало. И я углубился в Интернет с целью восполнить пробелы в знаниях. К сожалению, русскоязычный сегмент Интернета практически не содержит полезной информации. Все самое ценное хранится в англоязычных форумах и группах… вроде дело пошло, но этот новомодный Synthmaker стал все больше меня раздражать: DLL синтезатора пустого проекта занимает добрых 4 мегабайта (против 1 у SynthEdit), векторный интерфейс получаемых плагинов красив, но съедает прилично ресурсов (в синтэдите только битмапы, зато с альфа-каналом и с очень быстрой отрисовкой). К тому же лишь у SynthEdit оказался полноценный API, позволяющий писать любые модули, которых изначально нет в программе. Таких модулей в Интернете сейчас лишь немногим меньше готовых плагинов. Все это подтолкнуло меня к возврату к незаслуженно забытому инструменту.
Однако, с преамбулой я что-то затянул.
Итак. Ближе к делу. Для создания VST-версии печатной машинки мне понадобились следующие вещи: собственно идея, печатная машинка, фотоаппарат, микрофон, микрофонная стойка, микшер, Adobe Audition, Photoshop, Awave Studio и Synthedit.
Идея создания виртуальной пишущей машинки у меня родилась еще в самом начале, когда я строил «грандиозные планы» порабощения Мира заработка на собственных синтезаторах. Печатную машинку я на пару вечеров одолжил у знакомой журналистки-пенсионерки, микрофон и стойку — у приятеля-музыканта, остальное у меня было в наличии.
Первым делом я устроил печаталке фотосессию. Фотографий было сделано десятка два.
Фотосессия «Эрики»
Подобрав наиболее удачное изображение, его пришлось еще «пофотошопить»: с помощью инструмента Lens Correction исправить искажения линзы, сделав все линии параллельными, затем подрулить цветность и стереть оригинальные клавиши.
Следующим этапом была звукозапись. Для этих целей я выбрал Adobe Audition 1.5. Очень удобная в своем роде программа. Конечно, можно было воспользоваться и Wavosaur’ом, но в последнем нет модуля шумоподавления и возможности редактирования метаданных для семплера, о которым пойдет речь ниже.
Этап звукозаписи
Каждый звук, издаваемый машинкой, я тоже записал по нескольку раз, чтобы потом выбрать наиболее удачный. Также я записал несколько секунд «тишины» в качестве профиля для «шумодава». И все равно пришлось переписывать все еще раз, повысив чувствительность микрофона, т.к. на тихих звуках слишком сильно было заметно влияние шумодава. Компрессию звука я не применял, только шумоподавление и нормализацию.
Очистка и нарезка записанных звуков
Полученную запись я прослушал еще несколько раз и выбрал самые удачные звуки, которые затем и вырезал.
При всем шумовом многообразии пишущей машинки, уникальных звуков у меня получилась всего дюжина. Это как раз вписывается в одну октаву. Этот факт и определил внешний вид синтезатора (хотя изначально я планировал нарисовать две или три октавы — эдакий печатный аккордеон).
Самое главное готово, осталось собрать это все в VST-плагин. В синтэдите есть замечательная штука SoundFont Oscillator, который позволяет использовать готовые банки звуковых таблиц, нужно только сделать этот банк. Можно воспользоваться стандартной программой Vienna SoundFont Studio, которой оснащаются все звуковые карты от Creative. Но у меня она отказалась запускаться. Снова покопавшись в Интернете, я остановил свой выбор на Awave Studio. В Awave оказалось довольно просто назначить полученные звуки конкретным клавишам и сохранить это все в нужном нам формате EMU SoundFont v.2.0 (SF2). Единственная сложность, возникшая на данном этапе, заключалась в том, что у каждого семпла должна быть заполнена мета-информация о ключевой ноте (root key), а по умолчанию всегда принимается C4, из-за чего звуки ресемплируются. Выставляется этот параметр в Audition в меню View / Wave Properties.
Настройка параметров семплов
Ну, а дальше уже дело техники. Проект в синтэдите прост до безобразия (к слову, проект Organaut’а на порядок сложнее): SoundFont Oscillator, две ADSR-огибающие (для левого и правого каналов), chorus для имитации стереозадежки и дисторшн для усиления сигнала. Пришлось еще, правда, подредактировать визуальную тему, но об этом как-нибудь в другой раз.
Проект в SynthEdit
Собственно все. Выбираем в меню Save As VST. Ставим галки, что нам нужен именно инструмент, а не эффект, и в закладке Embedded Files добавляем наш SF2 банк, чтобы он вкомпилировался в DLL-ку.
Итого: пол года вынашивания идеи и один вечер на реализацию. Сегодня я уже понимаю, что конкурировать с теми же Native Instruments (да и с конторами поменьше масштабом) в одиночку практически невозможно, но сделать что-то свое, оригинальное под силу каждому. Главное — идея!
Напоминаю, что скачать синтезатор можно тут:
- KNOBSTER Keywriter VSTi (1.8 Мб)
Ну и бонусом к этой статье выкладываю тот самый SF2-банк :
- KNOBSTER Keywriter SF2 (0.8 Мб)




Очень интересная статья, вообще люблю все что связано с синтезом звука.
ПС. Что можете посоветовать почитать по программированию звука, иногда хочется реализовать звук, который крутится в голове, а не получается)
Ну сам я по конструированию звуков ничего не читал. Премудрости субстрактивного синтеза постигал в FL 3xSOC и, конечно, в SynthEdit. В нем же я расковырял и FM-синтез. В общем настоятельно рекомендую эту штуку. Это не только конструктор VST, но и замечательный исследовательский полигон: в нем есть различные средства анализа сигналов.
А для общего развития рекомендую почитать: базу знаний Websound
Надо попробывать, может пойму наконец-то ФМ синтез))) Спсибо
Если будут конкретные вопросы — задавайте, не стесняйтесь!
я давно заметил что синтмэйкеровские плуги тяжёлые, новинки в нём сделанные у меня энтузиазма не вызывают и в моей коллекции их практически нет
прикольно было б если б у пишущей машинки были аудио выходы, это намного упростило бы задачу )))))
a AWave мощнейшая программка, конвертирует и читает чуть ли не всё, к тому же лёгкая, особенно когда портативная
Я как-то не подумал о выходах) Это можно сделать.
Ну и, конечно, они будут тяжелые. Хотя те же классические Superwave Pro и Superwave Performer вполне шустрые. В книге Дэйва Хаупта «Visual VSTi Programming» есть целая глава посвященная оптимизации synthedit’овских плагинов.
Не спорю, хорошо написанный вручную код будет работать на порядок оперативнее, но времени на разработку такого алгоритма (а еще и GUI) уйдет на два-три порядка больше. Тратить столько времени и усилий на игрушки типа моих слишком расточительно. Лучше я на синтэдите посижу
кстати справедливости ради надо сказать что Superwave Pro и Superwave Performer всё-таки продукт СинтЭдита, как в их About окне:
«This product was developed exclusively with the SynthEdit development system and many thanks to Jeff McClintock for his kind assistance»
Я именно это и сказал.
а я вот синтмейкером балуюсь(((
Ну так это дело вкуса
Мне он не подошел по ряду перечисленных причин. Зато синтмейкер может делать standalone-приложения, позволяет писать код прямо в проекте и обещает рекомпиляцию плагинов. Я же не говорю, что это плохой продукт.
а как насчет совместной разработки плагина? есть идея на этот счет, если интересно можем обсудить!!!
Только если это будет бесплатный плагин
Я всегда за сотрудничество. Идей у меня тоже куча — проблемы только со временем. У меня сейчас в разработке сразу 4 оригинальных плагина.
Но если что-то интересное предлагаете, могу что-нибудь подвинуть.
отписал на мыло вчера!!!
на какой ящик? я ничего не получил. лучше сюда –> zipp2000(a)gmail.com
Да, интересно, было почитать. А как насчет реактора? Была идея что-то соорудить на нем?
Стыдно признаться — никогда с ним не работал. Меня немного смущает тот факт, что для запуска сделанных на нем плагинов нужен… реактор
В синтедите-то VST-шка получается. В любой DAW засовывай. К тому же shareware, ограничения минимальные: наличие надписи «synthedit» рядом с названием, максимум 16 пресетов и отсутствие возможности добавлять NAG-screen.
Необычная идея. Поздравляю с успешной реализацией. На таких примерах понимаешь, что порой новое – это хорошо забытое старое.
Спасибо
Если возможно поделитесь проэктом, в образовательных целях будет намного полезней.
Voila: http://uploading.com/files/JXKM98RU/keywriter_src.zip.html
Исходник, скин и банк.
Изучайте на здоровье.
Большое спасибо, надеюсь не только мне будет полезно.
Не нашел Русского хелпа или мануала по синт эдиту, он вообще существует ?
Если нет, возможно найду время для перевода.
Нет, не существует. Я просвещался исключительно по англоязычным материалам. В самом синтэдите есть поддержка русского языка, но это не касается справки.
Я думаю, что в ближайшем будущем напишу пару-тройку статеек по нему.
Появился вопрос, как лучше организовать ручку выходной громкости ?
Если подцепить к VCA volume, то нота играется после того как клавиша отпущена.
Я делаю так:
На самом деле ADSR тут не обязателен: его вполне можно убрать. Но я, обычно, оставляю. Тогда можно, например, Decay регулировать. Ну или полноценно огибающую.
Спасибо, работает !
Всегда пожалуйста.
Еще вопрос, если не затруднит, как можно реализовать воспроизведение не с начала сэмпла, а с позиции заданной ползунком?
Стандартными средствами — никак. Но, если я не ошибаюсь, это позволяет модуль DH_WavePlayer2 (у меня его нет в наличии, нужно погуглить)
Кстати, вот он: http://www.dehaupt.com/SynthEdit/DH_WavePlayer2+.htm
Там же его и скачать можно.
Он играет свой файл, мне нужно ирать аудио которое подается на вход, спасибо за вектор, буду искать.
Эм… не понял, а как ты собираешься разделять вход? Я вижу только один способ — создать фиксированный буфер, заполнять его входящим сигналом, а уж затем резать. Но такой модуль мне не известен. Подсказка: тут можно попробовать поизучать SDK.
Действительно ерунда какая-то, не подумал.
У меня по какой-то причине на выходе моно, хотя скармливаю стерео sf2, я могу тебе выслать проэкт? ты наверно сразу найдешь мою ошибку.
Давай глянем.
Выслал на мыло,
вообще, субъективно, звук «мылится», это особенности синтмейкера или я накосячил ?
Хм. Пока вижу только один момент, но не принципиальный: вполне можно обойтись одним ADSR, и его Signal Out отправлять на оба VCA.
По поводу замыливания ничего сказать не могу, т.к. Вы не приложили SF2-шку
Но попробую предположить, что проблема в настройках синтэдита: скорее всего у вас стоит 22кГц (значение по умолчанию)
Спасибо, с ADSR так и поступил, да про банк, не подумал ),
в настройках поставил 44,1, и выплыл еще один момент прыгает атака при нажатии, это ручка громкости, после уровень приходит в должное состояние, если выкрутить в ноль, то звук проходит(!) с уровнем сэмпла, те overal level на adsr влияет только на атаку!
Хочу поделится своими соображениями по созданию sf2 банка, маппинг удобно делать в полноценном сэмплере, например контакте, наглядно и быстро, а после можно конвертирвать с помошью CdXtract в sf2.
Так-с. Давайте еще раз: высылайте проект и банк — погляжу. Что-то ерунда какая-то творится.
А для создания банков я использую Awave, потому, что «родная» Vienna SoundFont Studio к железу привязывается.
Выслал. С уровнем я вчера, что-то не так включил, сейчас собрал заново уже лучше, но все равно атака прыгает, у сэмплов она не такая и в нулевом положении ручки уровня звук проходит (
Не хочу показаться назойливым,
есть ли какой-то прогресс по файлам, что я выслал ?
Простите, посмотрел и забыл отписаться. Жаль, что на этот раз вы не приложили исходник
ну да ничего, потестил и так.
Значит что я вам скажу, любезный, вы столкнулись с типичной проблемой SF2 — завышением уровня. Встроенный в FL проигрыватель саундфонтов тоже изрядно перегружает. Лечится это уменьшением громкости, только и всего. Для этого в свойствах Slider’а, который регулирует громкость подберите такое значение Max, при котором перегруз не возникает.
Проблему регулирования, на которую вы жаловались, без исходника не знаю как и проверить (и что-то порекомендовать, соответственно).
Простите вместо проэкта dll запихал в архив ( выслал повторно.
Значение Max это Hi Value ?
Да, это оно.
Но я вот еще что заметил: вы на Overall Level у ADSR вешает и регулятор и Velocity. Их значения суммируются, отсюда и перегруз. Вы бы лучше тогда регулятор вторым каскадом делайте через VCA.
Так, еще при соединенном Patch к Soundfont Oscillator соскакивает номер программы (наверное потому, что он в банке под номером 2, а не 1). Связь я разорвал, выбрал вручную — бубнит нормально.
вас не затруднит скриншот на правильный коннект, не понятно:
«регулятор вторым каскадом делайте через VCA»
Я Вам тут ответил: http://knobster.org/forum/topic.php?id=2
Мне кажется, что удобнее будет в форуме общаться. Там же можете и темы с вопросами создавать, если что.
zipp, ты не мог бы объяснить смысл, с одной стороны, двух огибающих громкости и двух усилителей вместо одного, и с другой – наличия модулей огибающих в твоём проекте в принципе?
Все просто: отдельные огибающая и усилитель для левого канала и отдельные для правого. А с помощью огибающих, в данном примере, я регулировал velocity.
а в чём преимущество подключения велосити к усилителю через огибающую? без огибающей она ведь тоже работает
Да, работает. Просто без огибающей зацикленные семплы будут звучать бесконечно (ну, т.е. не совсем бесконечно, а пока есть свободные голоса).
К тому же у меня выработалась привычка всегда ставить огибающую еще потому, что если вместо SoundFont Oscillator (Sample Oscillator) используется обычный осциллятор, то он тоже будет генерировать вечно, что не очень удобно.
Ну и такие плюшки как редактирование атаки, удержания и спада нужны почти всегда, кроме варианта с пишущей машинкой
И последнее. SoundFont Oscillator уже переведен в разряд устаревших модулей. Вместо него теперь рекомендуется использовать Sample Oscillator. Он тоже воспроизводит файлы SF2 и WAV, но теперь правильно трактует громкость семплов и имеет несколько режимов оверсемплинга.
Вообще этот модуль появился еще в версии 1.1, но в 1.183 наконец-то научился играть встроенные в DLL-ку файлы.
ну для регулировки это конечно само собой разумется, cпасибо за разъяснение
а SoundFont Oscillator не умеет проигрывать голые wav файлы, правильно? и если судить по названию
Верно
Но, как я сказал выше, он уже морально устарел.