Flowstone4

Программирование в SynthMaker: языки DSP, Assembler и Ruby

В SynthMaker/FlowStone есть три встроенных языка, на которых можно писать, используя соответствующие блоки: DSP, Assembler, и Ruby.

DSP

Язык DSP — специализированный язык для обработки сигналов: а этим, собственно, мы и занимаемся. Язык отдаленно напоминает C. Основной инструмент для обработки звуковых потоков.

Assembler

Ассемблер — язык, позволяющий программировать непосредственными командами процессора. Работает очень быстро, возможности его безграничны, и писать на нем очень запарно.

Ruby

Руби — интерпретируемый язык, программировать на нем весьма приятно и легко. Работает гораздо медленнее DSP, поэтому используется для графического интерфейса, программировании контролов, и т.п.

Когда что выбирать?

Все просто — для обработки потоковых сигналов (stream, mono, poly) используйте DSP. Если на входах/выходах блоков есть только одиночные значения или массивы — Ruby. А гики с толстенными диоптриями в очках, и без моей подсказки выберут Assembler.

Примеры

Возьмем самый простой пример — умножение.

DSP

Чтобы умножить поток на число будем использовать DSP:

Буквами для копипасты:

streamin in;
streamin level;
streamout out;
out = in*level;

Задаем два входа — in и level, выход out и последней строчкой их перемножаем.

Ruby

Как я уже говорил, в Руби мы можем передавать числа. Например, значения регуляторов:

Код:

@ins[0]
@ins[1]
output @ins[0]*@ins[1]

Для примеров выше есть уже готовые блоки (steam multiply и multiply), но вот если задача сложнее — зачастую гораздо проще написать программу текстом, чем городить огород из блоков.

Если в DSP названия переменных сами подставляются во входы, то в Ruby сделано наоборот — если входы назвать (тем же способом, что у других блоков), то они привяжутся к переменным. Если входы назвать left и right, то код будет выглядеть вот так:

@left
@right
output @left*@right

Assembler

Ну и чтобы никто не сомневался, что Assembler — это Ад на Земле, пример аналога DSP кода на нем:

Код:

streamin in;
streamin level;
streamout out;

movaps xmm0,in;
mulps xmm0,level;
movaps out,xmm0;

DLL и RubyGems

Тема сторонних библиотек — гемов Руби и DLL тянут каждая на отдельный цикл статей. Так что, пока просто отмечу, что такая возможность есть. При помощи DLL можно подключать библиотеки, написанные на C/C++, а также множестве других языков. При помощи же RubyGems подключаются готовые библиотеки на Ruby, из которых вызываются методы и функции в Ruby-коде.

Итог

Благодаря тому, что SynthMaker сделан из FlowStone, который разработан для робототехники, возможности его гораздо шире, чем других конструкторов «собери свой плагин из блоков» — здесь действительно можно реализовать сложные и интересные вещи. Можно подключать и различное оборудование, вплоть до сложных контроллеров и роботов. Так что, SynthMaker — первый редактор плагинов, который сделает вам еще и омлет.

3
B9b1e34e190b39f13523b932adf3f0fb
JackZero 21 ноября 2014, 20:52 {{comments[350].rating}} дБ

вот подстава. а я думал что на руби можно покодить сами эффекты.

Ответить
7144327ecb02bf36f4ba0ce7f4b66fe0
Urvalla 21 ноября 2014, 21:09 {{comments[351].rating}} дБ

Ruby крут для управления всем хозяйством. DSP же минималистичен, но шустр) В общем, в паре они отлично работают.

Ответить
B9b1e34e190b39f13523b932adf3f0fb
JackZero 22 ноября 2014, 23:35 {{comments[354].rating}} дБ

Так, быть может, все-таки пора осваивать Ассемблер? На сколько он быстрее DSP?

Ответить
7144327ecb02bf36f4ba0ce7f4b66fe0
Urvalla 23 ноября 2014, 18:08 {{comments[355].rating}} дБ

DSP компилируется в простые команды, точно такие же как и Assembler. Ради скорости переходить нет смысла. Вот если зачем-то нужен прямой доступ к памяти, или какие-то еще фишки напрямую не связанные с обработкой сигналов (а посему отсутствующие в DSP), тут он может пригодиться.

Ответить
B9b1e34e190b39f13523b932adf3f0fb
JackZero 26 ноября 2014, 13:43 {{comments[356].rating}} дБ

И все-таки, на Ruby эффекты делать можно? И что будет - задержки большие, загрузка процессора?

Ответить
7144327ecb02bf36f4ba0ce7f4b66fe0
Urvalla 15 декабря 2014, 22:48 {{comments[358].rating}} дБ

Можно. Но да, увеличатся задержки - это зависит от размера буфера. А вот процессора на более-менее серьезную обработку будет сильно не хватать. Если нужен язык посерьезнее DSP, лучше посмотреть в сторону подключения dll с C/C++.

Ответить
People img
Василий 22 ноября 2014, 02:27 {{comments[352].rating}} дБ

VST так сделать можно?

Ответить
7144327ecb02bf36f4ba0ce7f4b66fe0
Urvalla 22 ноября 2014, 16:52 {{comments[353].rating}} дБ

Да, можно. Нужен FlowStone - в нем есть экспорт в VST.

Ответить