JS Плагины - обсуждение

@PianoIst, file_mem в сериалайз, для области памяти может Вам подойти. Сохранять как обычные пресеты.
Прочитать сторонний файл не проблема, но он должен быть не где попало, а именно либо в директории( или подпапке) с JS, либо в папке -подпапке Data.
Возможно, будут работать жесткие ссылки, я не проверял.
А вот запись в сторонний файл, насколько помню, невозможна(тоже надо уточнить, может изменилось что-то) - только в файл проекта(см. JS SER чанк) или в пресет - что может Вам подойти.
@vitalker,
Если совсем коротко:
PHP:
//Это все, больше никакие секции не нужны.
@block
while (midirecv(offset,msg1,msg2,msg3)) (
   type = msg1&240;
   type == 144 || type == 128 ? midisend(offset,msg1,msg2,msg3);
);
 
  • Like
Реакции: vitalker
@EUGEN27771 мерси, то что нужно!
[DOUBLEPOST=1491049450][/DOUBLEPOST]@Subers класс, даже можно менять. Нашёл, это плагин Александра.
 
Последнее редактирование:
@EUGEN27771, то-есть, file_mem(0,var) & file_var(0,var) записываются в пресеты? Было б генияльно, ящитаю)
Сегодня полдня бился, пытаясь научить JSFX записывать ввод с клавиатуры в переменную) ура.
 

Вложения

@EUGEN27771, ок, проверил с пресетами, все работает! ее!
А как быть со строковыми значениями?
Допустим, я назначил в процессе #str начение "Trombone", оно у меня с пресетом не сохраняется...
P.S. Все равно ничего не выходит. именные переменные не назначаются правильно на обычные (хотя в мануале, вроде, должны).
А сами именные переменные не сохраняются в пресет...
PHP:
options:want_all_kb
import KeyboardInput.jsfx-inc

@init
 
  #input.str="0";
  kb_capture=0;
  kb_firstchar=0;
     
@gfx 100 100
  gfx_r=gfx_g=gfx_b=0.5;
  gfx_rect(0,0,100,100);

  mouse_x<100&&mouse_x>0&&mouse_y<100&&mouse_y>0?(
    gfx_r=gfx_g=gfx_b=0.7;
    gfx_rect(0,0,100,100);
    mouse_cap == 1?(
      kb_capture=1;
      kb_firstchar=1;
    );
  );

  kb_capture==1?(
    input.kb_to_str(10);//clears the #input.str and writes keyboard input into it until user types enter or up to the 6th character.
  );

  gfx_r=gfx_g=gfx_b=0;
  gfx_x=gfx_y=0;
  gfx_drawstr(#input.str);
  input=#input.str;
 
Последнее редактирование:
то-есть, file_mem(0,var) & file_var(0,var) записываются в пресеты?
file_mem(handle,offset, length) - читает/записывает кусок лок. памяти в файл/из файла. В секции сериалайз - в файл проекта, и в файл пресета, при сохранении пресета.
===============
handle = 0 - в ser секции, offset - смещение от нуля, грубо говоря, указатель на обл. памяти, первый элемент Вашего массива. length - длина читаемого - записываемого куска (от точки offset).
я назначил в процессе #str начение "Trombone", оно у меня с пресетом не сохраняется...
@PianoIst, не понятно, зачем Вам вообще здесь нужны изменяемые строки? Есть литералы, допустим str = "Trombone", Вы же не будете потом проводить операции со строкой, а даже если будете, все легко через врем. строки сделать.
===============
Вы лучше опишите четко, что конкретно нужно, в упрощенном виде, и в чем проблема. Потому что гадать сейчас не могу, но попробую помочь хотя бы направление найти.
Ваш код гляну попозже.
 
@EUGEN27771, Спасибо, что помогаете!
до меня просто не доперло, что mem есть массив) Думал, это какой-то абстрактный блок памяти, который торчит байтами в оперативке, и в котором может быть все, что угодно. А к нему-таки можно конкретно обращаться.

Вы лучше опишите четко, что конкретно нужно, в упрощенном виде, и в чем проблема.
Я сейчас пытаюсь осилить миди-процессор по типу LASS ARC. И чтобы пользователю как-то ориентироваться в гипотетических 1000+ артикуляциях с вариантами их переключений, мне надо чтоб он имел возможность сам их обзывать, и желательно, чтоб он мог это сделать один раз, а потом немного варьировать от плагина к плагину (скажем, когда мы делаем струнную секцию).
Вот, допустим, как выглядит окно инструментов:
2017-04-02_06-02-08.png

Правая колонка назначается в ависимости от имени артикуляций во время проигрывания миди. Центральная колонка - просто перевод значения переменнной в формат миди-нот. А вот левая колонка, как и сами названия артикуляций (их, кстати, пользователю, в любом случае придется дублировать для *reabank файла, работающего в свяке с плагином) вводятся самим пользователем. И надо их как-то хранить, персонально для пресета.

А проблема в том, что a) я так и не понял, как кошерно прочитать файл реабенка. Точнее, сейчас потихоньку стал понимать, что мы можем попробовать загрузить его и перевести каждую строку в массив, но еще не пробовал.
б) у меня не получается сохранить string, а без этого, КМК, в таком деле никуда.
в) (из ряда фантастики) хотелось бы попутно иметь возможноть отдавать кой-чего по OSC. Но он, вроде работает по UDP а куфыскшзе умеет общаться только по TCP причем, странно как-то. Да и нормальный сервер поднять это еще надо постараться)

Логику работы самого процессора я уже почти построил на бумаге, там проблем с программингом нет. Но вот интерфейс уже имеет меня третьи сутки... На контакте бы я тот объем работ, который проделан проделал бы раза в 4 быстрее...
P.S. Пытаюсь сейчас осознать работу с Вашей библиотекой захвата мыши, но кой-чего все равно не связывается в голове пока.
 
Давайте проще, чтобы я понял - никогда подобными вещами не пользовался. Что такое артикуляции в этом случае?
Сам принцип работы для незнакомого с этим.
как кошерно прочитать файл реабенка
file_string(handle,str) - 100% проверенный рабочий вариант. Читать строку за строкой, до конца, можно сразу что-то нужное искать и тп.
В EEL, сперва кажется, оч. слабые возможности, по работе со строками по сравнению с Lua, но это не совсем так. Можно сделать аналогичные практически любым строк. функциям из Lua. Правда, все делать придется руками.
б) у меня не получается сохранить string, а без этого, КМК, в таком деле никуда.
Попробую, 99,9% должно работать, обратите внимание, что возможность сохранить хоть что-либо автоматически дает возможность сохранить что угодно.
Но вот интерфейс уже имеет меня третьи сутки...
Если Вы уже точно знаете, как плагин будет выглядеть - все просто. Можно нарисовать все в граф. редакторе, поставить фоном и все, так в принципе и делают почти все. Единственное, что теряется в этом случае - возможность масштабирования без потерь(это если она вообще нужна).
Пытаюсь сейчас осознать работу с Вашей библиотекой захвата мыши, но кой-чего все равно не связывается в голове пока.
Там вроде, все понятно, но если что, напишу более подробные комментарии.
А что это? Я в ступоре..
 
  • Like
Реакции: PianoIst
@EUGEN27771,
>>Что такое артикуляции в этом случае?

Это определённые штрихи инструмента(виртуального), которые у каждого производителя переключаются по-своему. А юзеру бы (мне, допустим) их переключать унифицированно )

>>file_string(handle,str) - 100% проверенный рабочий вариант. Читать строку за строкой, до конца,

Я вот сейчас час возился с этой функцией. Она принимает у меня либо первую, либо последнюю строку... Не могу разобоаться, каким должен быть алгоритм чтения.

>>А что это? Я в ступоре..

Упс, прошу прощения, реаскрипт (который не jsfx)

По поводу сохранения стрингов - я завис на передаче стринга из #переменной в нормальную для сохранения.
Конструкция var="abc"; работает.
А вот
#str ="abc";
var=#str;
Не хотит. Сама #str чего-то тоже через file_var не сохраняется.
Посмотрите, пожалуйста, если получится
[DOUBLEPOST=1491097161][/DOUBLEPOST]PS. По поводу файлстринг. Я так понял, построчно он читает только файлы расширения txt?
Но даже с ними не пойму, как строка выбирается
[DOUBLEPOST=1491097548][/DOUBLEPOST]Механизм работы артикуляций упрощенно: в инпут-плагине выставляем правила для ввода по миди. В идеальном темплейте они будут почти одинаковые для всех. В миди-тейк уже пишутся только банк/программа. И пользователь может легко и наглядно их двигать и добавлять. Для этого используются реабанки.
А аутпут плагин интерпретирует банк/программу уже по своей схеме, и играет тем, чем надо. Ну и ещё пара надстроек
 
Я так понял, построчно он читает только файлы расширения txt?
Все читает, вроде бы. Проверил, что успел, строки читаются и сохраняются только через file_string, и file_string нормально работает в сериалайз.
Напишу позже более подробно, тут, конечно, со строками дела не очень.
 
  • Like
Реакции: PianoIst
@EUGEN27771, я правильно понимаю, что при вызове file-open плагин читает весь файл, по одной строке в цикл? А номер строки равен file-avail?
У меня получилось как-то раз все строки поочередно за секунду вывести на экран. Но вот вывести конкретную строку не получается...
Можно заодно обнаглеть и попросить пример кода чтения?
 
я правильно понимаю, что при вызове file-open
file-open только возвращает handle, грубо говоря, открывает файл. Читает файл file_string. При каждом вызове читается одна строка и позиция смещается на одну строку вниз по файлу. file_rewind возвращает позицию в начало файла, если нужно. Мало в JS возможностей в этом плане, в скриптах иначе сделано.
А номер строки равен file-avail?
Лучше на это не ориентироваться, потому что для txt файлов функция возвращает просто 0 и 1(в мануале сказано, я не проверял).
Вот код - читает весь файл в одну строку #str
PHP:
@init

File = "!!!Test ReadFile"; // Set you file!
//----------------------------
function ReadFile(File)
  local(handle, str)
(
  handle = file_open(File);
  handle >= 0 ? (
    #str = "";
    while( file_string(handle, str) > 0) (
      #str+=str;
    );
    file_close(handle);
  );
  #str;
);

//----------------------------
ReadFile(File);

@serialize

file_string(0, #str);

@gfx 800 550
gfx_set(0.8);
gfx_rect(0,0, gfx_w, gfx_h);
gfx_set(0.1);
gfx_setfont(1,"Arial", 20);
//----------------------------
gfx_x = gfx_y = gfx_texth;
#str ? gfx_drawstr(#str);
========================================
Вот другой код читает каждую строку в спец. слоты для строк.
1234.gif
 

Вложения

По ссылке видео есть, там очень наглядно. Эффект сайдчейна без сайдчейна

Дык был же в теме прекраснейший плагин от Еугена27771, дай Бог ему здоровья! Смотрите выше по этой ветке.
 
  • Like
Реакции: vitalker
@mitinglas, спасибо за здоровье!
Не сплю, на самом деле. По ходу дела, Scope по-немногу допилил совместно с @HD Vulkan, - он подбирал все цвета, расстояния, то есть графика - практически полностью - его заслуга.
Я бы сам на такие вещи внимания не обращал, конечно. По крайней мере, мне нравится, даже потому что очень много исправлено и добавлено технически.
Мы получили в итоге, очень-очень приличный вариант.
Из функционала:
1) Добавлена возможность просмотреть любую волну в любом разрешении в режиме паузы - это очень круто - причем, можно таскать верх-вниз и влево-вправо, как угодно.
2) Сам момент отрисовки очень сильно поправлен - теперь все отображается не просто точно, а просто ох...но точно, математически учтено все, до мелочей, до самых мелочей, в любом виде и такого нет нигде!
3) Добавлена возможность настройки цвета для каждой волны.
5) Все зумы теперь плавны и равномерны, как вода.
6) Прочая херня.
==================
Последняя версия здесь WS Scope
1234.gif


==================
"Mousewheel - Change Time Range(buffer length), aka Horizontal zoom.
Click&Drag(up/down) - Vertical zoom.
Middle Click - Pause/Unpause.
Shift + Click&Drag(left/right) on Pause - Change offset.

Midi Pitch Sync Mode:
The plugin automatically sets the correct buffer-time, depending on the pitch of the input MIDI-note.
This is useful for waveform analysis when using synths.
TimeLoop Sync Mode:
The plugin automatically adapts to the selected range.
Accurate to sample.
Tempo Sync Mode:
The plugin automatically adapts to the Host Tempo.
Free Sync Mode:
Sync disabled.
==================
"+" - Change Colors.
 
Последнее редактирование:
Дык был же в теме прекраснейший плагин от Еугена27771, дай Бог ему здоровья! Смотрите выше по этой ветке.
Большое спасибо! Потестил.
Однако мне не совсем подходит кривая этого плагина: она открывается не на восьмушку, а почти на 3ю шестнадцатую из 4х.
(естественно, в режиме BeatSync - мы ведь говорим об альтернативе Pumper).
Тогда уж легче использовать такое:
Буфер обмена01.gif


P.S. Мне почему-то кажется, что вэйвсы там не огибающую громкости используют, а придавливают компрессором (lfo на трэшолде???).
Но я совсем не уверен.

P.P.S. заметил, что VST-версии плагинов supermaailma кушают в Рипере меньше, чем JS
 
VST-версии плагинов supermaailma кушают в Рипере меньше
во-первых, по аудио JS либо столько же, либо меньше(нужно и на вход, и на выход смотреть), а во-вторых, в vst ещё графика кушает, Рипер ведь этого не показывает.
[DOUBLEPOST=1491668509][/DOUBLEPOST]@EUGEN27771 эту версию можно считать финальной?)
 
по аудио JS кушает больше чем тот-же плаг в VST
не помню где я это прочитал, видимо в одной из тем тут. Человек утверждал, что vst всегда больше кушает, даже после оптимизации, просто потому что даже малейшая графика сильно грузит проц. Да, вспомнил: при обсуждении плагинов от Anomaly(supermaailma)
 
по аудио JS кушает больше чем тот-же плаг в VST -это уже обсуждали.
Совсем не так это. Показать тесты? Смотреть на диспетчер задач, а не в Рипере. По математике возможно некоторое преимущество(не более 40%) - но по графике - VST, сделанные в Jeez, безнадежно отстают(в десятки раз).
Да и вообще, в графике у JS превосходство абсолютное, даже сравнивать нельзя. Нужны примеры?
[DOUBLEPOST=1491670106][/DOUBLEPOST]
не помню где я это прочитал, видимо в одной из тем тут. Человек утверждал, что vst всегда больше кушает, даже после оптимизации, просто потому что даже малейшая графика сильно грузит проц. Да, вспомнил: при обсуждении плагинов от Anomaly(supermaailma)
Да, ты прав. Графика идет отдельным процессом и потому в Рипере не видно, сколько жрет - там показывает только математику.
 
  • Like
Реакции: mitinglas и vitalker
@EUGEN27771 эту версию можно считать финальной?)
По Scope или по Curve? По скопу - почти да, только маленький хелп хочу добавить, но сам на англ. не переведу - могу только на русском.
И еще пару полезных мелочей, а так, да, я доволен результатом. Это очень красиво, в любом смысле.
По Курвам - все только начинается, там уже много чего можно сделать.
 
  • Like
Реакции: mitinglas и vitalker
Совсем не так это. Показать тесты? Смотреть на диспетчер задач, а не в Рипере. По математике возможно некоторое преимущество(не более 40%) - но по графике - VST, сделанные в Jeez, безнадежно отстают(в десятки раз).
Да и вообще, в графике у JS превосходство абсолютное, даже сравнивать нельзя. Нужны примеры?
[DOUBLEPOST=1491670106][/DOUBLEPOST]
Да, ты прав. Графика идет отдельным процессом и потому в Рипере не видно, сколько жрет - там показывает только математику.
Женя, так почти всегда проблема не с CPU, которое и графику тянет по большей части, а с ASIO.
ASIO первое захлёбывается.
И тут мои тесты говорят не в пользу JS.
 
По Курвам - все только начинается, там уже много чего можно сделать.
:D хаахахахах
маленький хелп
Пишите на русском, я переведу. Ну и буду просить Джона сделать по нему обзор.
[DOUBLEPOST=1491671380][/DOUBLEPOST]
 
@Aleksandr Oleynik, я думаю, что это не так. Но для уверенности - можно сделать тесты.
Си будет считать быстрее - что тоже спорно, я проверял - стандартная библиотека считает медленнее, чем JS!
Но в графике он сразу застрянет, тоже проверял. Возможно, я ошибся. Но про Jeez - проверено, там медленнее - 100%.
Можно накидать вариантов, это же все-таки тема - "обсуждение". Ваши варианты проверки?

Пишите на русском, я переведу. Ну и буду просить Джона сделать по нему обзор.
Спасибо, ибо я в англ. без понятия. Тогда, сделаю два хелпа - англ/рус - англ. будет пустой, нужен будет перевод, рус. напишу.
 
  • Like
Реакции: vitalker
@Aleksandr Oleynik, самый простой тест - нарисовать N случайных линий, например.
Когда N станет несколько тысяч или несколько десятков или сотен тысяч - не думаю, что это понравится любому процессору.
В JS это проходит на ура - где-то я уже писал об этом.
Помните - мы разбирались с пресетами. В конце каждого куска была контр. сумма - если она не совпадала - только тогда кусок переписывался.
Я думаю - здесь то же самое. JS не считают то, что уже было посчитанно - нах.. 100 раз считать одно и то же - отсюда и скорость в графике.
 

Сейчас просматривают