diff --git a/README.md b/README.md index 367581ab..d8ee6cb9 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Tested in # Downloads The current release can be found in the [vst2_bin/](vst2_bin/) folder. -Here's a snapshot of it: [veeseevstrack_0_6_1_win64_bin-08Jul2018.7z](dist/veeseevstrack_0_6_1_win64_bin-08Jul2018.7z) (64bit) +Here's a snapshot of it: [veeseevstrack_0_6_1_win64_bin-08Jul2018b.7z](dist/veeseevstrack_0_6_1_win64_bin-08Jul2018b.7z) (64bit) # Demo Video diff --git a/include/app.hpp b/include/app.hpp index c90d544e..ac472fc2 100644 --- a/include/app.hpp +++ b/include/app.hpp @@ -93,6 +93,8 @@ struct ModuleWidget : OpaqueWidget { */ virtual void appendContextMenu(Menu *menu) {} + ParamWidget *findParamWidgetByParamId(int _paramId); + void draw(NVGcontext *vg) override; void drawShadow(NVGcontext *vg); @@ -174,6 +176,7 @@ struct RackWidget : OpaqueWidget { void addModule(ModuleWidget *m); /** Removes the module and transfers ownership to the caller */ void deleteModule(ModuleWidget *m); + ModuleWidget *findModuleWidgetByModule(Module *_module); void cloneModule(ModuleWidget *m); /** Sets a module's box if non-colliding. Returns true if set */ bool requestModuleBox(ModuleWidget *m, Rect box); diff --git a/include/global_ui.hpp b/include/global_ui.hpp index 8d624349..1d165f06 100644 --- a/include/global_ui.hpp +++ b/include/global_ui.hpp @@ -81,6 +81,8 @@ struct GlobalUI { RackWidget *gRackWidget; Toolbar *gToolbar; RackScene *gRackScene; + + std::mutex mtx_param; } app; #ifdef USE_VST2 diff --git a/plugins/community/repos/Fundamental/src/VCA.cpp b/plugins/community/repos/Fundamental/src/VCA.cpp index 2c47d26a..a545c620 100644 --- a/plugins/community/repos/Fundamental/src/VCA.cpp +++ b/plugins/community/repos/Fundamental/src/VCA.cpp @@ -34,8 +34,6 @@ static void stepChannel(Input &in, Param &level, Input &lin, Input &exp, Output const float expBase = 50.0f; if (exp.active) v *= rescale(powf(expBase, clamp(exp.value / 10.0f, 0.0f, 1.0f)), 1.0f, expBase, 0.0f, 1.0f); - v += 100.0f; - v -= 100.0f; out.value = v; } diff --git a/src/app/ModuleWidget.cpp b/src/app/ModuleWidget.cpp index 8131bde0..57d1a9bb 100644 --- a/src/app/ModuleWidget.cpp +++ b/src/app/ModuleWidget.cpp @@ -207,6 +207,14 @@ void ModuleWidget::randomize() { } } +ParamWidget *ModuleWidget::findParamWidgetByParamId(int _paramId) { + for (ParamWidget *param : params) { + if(param->paramId == _paramId) + return param; + } + return NULL; +} + void ModuleWidget::draw(NVGcontext *vg) { nvgScissor(vg, 0, 0, box.size.x, box.size.y); Widget::draw(vg); diff --git a/src/app/RackWidget.cpp b/src/app/RackWidget.cpp index 45a78e6d..75db7a68 100644 --- a/src/app/RackWidget.cpp +++ b/src/app/RackWidget.cpp @@ -410,13 +410,26 @@ void RackWidget::fromJson(json_t *rootJ) { } void RackWidget::addModule(ModuleWidget *m) { + rack::global_ui->app.mtx_param.lock(); moduleContainer->addChild(m); m->create(); + rack::global_ui->app.mtx_param.unlock(); } void RackWidget::deleteModule(ModuleWidget *m) { + rack::global_ui->app.mtx_param.lock(); m->_delete(); moduleContainer->removeChild(m); + rack::global_ui->app.mtx_param.unlock(); +} + +ModuleWidget *RackWidget::findModuleWidgetByModule(Module *_module) { + for (Widget *w : moduleContainer->children) { + ModuleWidget *moduleWidget = dynamic_cast(w); + if(moduleWidget->module == _module) + return moduleWidget; + } + return NULL; } void RackWidget::cloneModule(ModuleWidget *m) { diff --git a/src/engine.cpp b/src/engine.cpp index 96007ebe..fa5e2dbe 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -10,8 +10,12 @@ #include #include "global_pre.hpp" +#include "app.hpp" #include "engine.hpp" +#include "plugin.hpp" +#include "window.hpp" #include "global.hpp" +#include "global_ui.hpp" #ifdef USE_VST2 @@ -286,18 +290,40 @@ void engineSetParam(Module *module, int paramId, float value) { // (note) [bsp] this is usually called from the UI thread (see ParamWidget.cpp) // (note) [bsp] VST requires all parameters to be in the normalized 0..1 range // (note) [bsp] VCV Rack parameters however are arbitrary floats - // (note) [bsp] this scale+bias hack should work for most parameters, though - // (note) [bsp] => automation curves will look a bit strange, though - // (note) [bsp] => this may potentially crash modules which cannot deal with params outside the expected range - // (todo) add min/max query methods to each module - float normValue = value / 2.0f; - normValue += 0.5f; // printf("xxx vcvrack: paramId=%d value=%f (=> %f)\n", paramId, value, normValue); int uniqueParamId = loc_vst2_find_unique_param_by_module_and_paramid(module, paramId); if(-1 != uniqueParamId) { - // Call host audioMasterAutomate - vst2_handle_ui_param(uniqueParamId, normValue); + ModuleWidget *moduleWidget = global_ui->app.gRackWidget->findModuleWidgetByModule(module); + if(NULL != moduleWidget) + { + // Find + ParamWidget *paramWidget = moduleWidget->findParamWidgetByParamId(paramId); + if(NULL != paramWidget) + { + // Normalize parameter + float paramRange = (paramWidget->maxValue - paramWidget->minValue); + if(paramRange > 0.0f) + { + float normValue = (value - paramWidget->minValue) / paramRange; + // printf("xxx paramId=%d normValue=%f\n", paramId, normValue); + + // Call host audioMasterAutomate + vst2_handle_ui_param(uniqueParamId, normValue); + } + } + } + // else + // { + // // Should not be reachable + // // (note) [bsp] this scale+bias hack should work for most parameters, though + // // (note) [bsp] => automation curves will look a bit strange, though + // // (note) [bsp] => this may potentially crash modules which cannot deal with params outside the expected range + // float normValue = value / 2.0f; + // normValue += 0.5f; + // // Call host audioMasterAutomate + // vst2_handle_ui_param(uniqueParamId, normValue); + // } } } #endif // USE_VST2 @@ -318,19 +344,37 @@ void vst2_queue_param(int uniqueParamId, float normValue) { void vst2_handle_queued_params(void) { // Called in processReplacing() // (note) protected by caller mutex - // vector::iterator it; - // for(it = global->vst2.queued_params.begin(); it != global->vst2.queued_params.end(); it++) + global_ui->app.mtx_param.lock(); for(VST2QueuedParam qp : global->vst2.queued_params) { Module *module; int paramId; if(loc_vst2_find_module_and_paramid_by_unique_paramid(qp.unique_id, &module, ¶mId)) { - float value = qp.norm_value - 0.5f; - value *= 2.0f; - engineSetParam(module, paramId, value, false/*bVSTAutomate*/); + ModuleWidget *moduleWidget = global_ui->app.gRackWidget->findModuleWidgetByModule(module); + if(NULL != moduleWidget) + { + // Find + ParamWidget *paramWidget = moduleWidget->findParamWidgetByParamId(paramId); + if(NULL != paramWidget) + { + // Normalize parameter + float paramRange = (paramWidget->maxValue - paramWidget->minValue); + if(paramRange > 0.0f) + { + // float value = qp.norm_value - 0.5f; + // value *= 2.0f; + float value = (qp.norm_value * paramRange) + paramWidget->minValue; + engineSetParam(module, paramId, value, false/*bVSTAutomate*/); + + // Update UI widget + paramWidget->setValue(value); + } + } + } } } + global_ui->app.mtx_param.unlock(); global->vst2.queued_params.clear(); } diff --git a/vst2_bin/CHANGELOG_VST.txt b/vst2_bin/CHANGELOG_VST.txt index dbfcbf9a..4d5d40db 100644 --- a/vst2_bin/CHANGELOG_VST.txt +++ b/vst2_bin/CHANGELOG_VST.txt @@ -26,6 +26,7 @@ - fix: load "settings.json" when plugin is initialized (note: the windowSize/windowPos and sampleRate are ignored) - change: "allowCursorLock" is now enabled by default +- update VST parameter handling (now uses UI widget min/max info for VST parameter range translation) ** July 7th, 2018 diff --git a/vst2_bin/log.txt b/vst2_bin/log.txt index 26b0a9fd..aaabc9c6 100644 --- a/vst2_bin/log.txt +++ b/vst2_bin/log.txt @@ -3,17 +3,17 @@ [0.000 info src/main.cpp:67] Local directory: f:\git\VeeSeeVSTRack\vst2_bin\/ [0.000 info src/plugin.cpp:627] vcvrack: Loaded static plugin AS 0.6.1 [0.000 info src/plugin.cpp:627] vcvrack: Loaded static plugin AudibleInstruments 0.6.1 -[0.002 info src/plugin.cpp:627] vcvrack: Loaded static plugin Befaco 0.6.1 +[0.001 info src/plugin.cpp:627] vcvrack: Loaded static plugin Befaco 0.6.1 [0.002 info src/plugin.cpp:627] vcvrack: Loaded static plugin Bidoo 0.6.1 -[0.003 info src/plugin.cpp:627] vcvrack: Loaded static plugin Bogaudio 0.6.1 -[0.003 info src/plugin.cpp:627] vcvrack: Loaded static plugin cf 0.6.1 -[0.003 info src/plugin.cpp:627] vcvrack: Loaded static plugin DHE-Modules 0.6.1 +[0.002 info src/plugin.cpp:627] vcvrack: Loaded static plugin Bogaudio 0.6.1 +[0.002 info src/plugin.cpp:627] vcvrack: Loaded static plugin cf 0.6.1 +[0.002 info src/plugin.cpp:627] vcvrack: Loaded static plugin DHE-Modules 0.6.1 [0.003 info src/plugin.cpp:627] vcvrack: Loaded static plugin ErraticInstruments 0.6.1 [0.003 info src/plugin.cpp:627] vcvrack: Loaded static plugin ESeries 0.6.1 -[0.004 info src/plugin.cpp:627] vcvrack: Loaded static plugin FrozenWasteland 0.6.1 -[0.004 info src/plugin.cpp:627] vcvrack: Loaded static plugin Fundamental 0.6.1 -[0.004 info src/plugin.cpp:627] vcvrack: Loaded static plugin HetrickCV 0.6.1 -[0.004 info src/plugin.cpp:627] vcvrack: Loaded static plugin huaba 0.6.1 +[0.003 info src/plugin.cpp:627] vcvrack: Loaded static plugin FrozenWasteland 0.6.1 +[0.003 info src/plugin.cpp:627] vcvrack: Loaded static plugin Fundamental 0.6.1 +[0.003 info src/plugin.cpp:627] vcvrack: Loaded static plugin HetrickCV 0.6.1 +[0.003 info src/plugin.cpp:627] vcvrack: Loaded static plugin huaba 0.6.1 [0.004 info src/plugin.cpp:627] vcvrack: Loaded static plugin Koralfx-Modules 0.6.1 [0.004 info src/plugin.cpp:627] vcvrack: Loaded static plugin LindenbergResearch 0.6.1 [0.005 info src/plugin.cpp:627] vcvrack: Loaded static plugin LOGinstruments 0.6.1 @@ -23,50 +23,47 @@ [0.005 info src/plugin.cpp:627] vcvrack: Loaded static plugin mtsch-plugins 0.6.1 [0.005 info src/plugin.cpp:627] vcvrack: Loaded static plugin NauModular 0.6.1 [0.006 info src/plugin.cpp:627] vcvrack: Loaded static plugin Qwelk 0.6.1 -[0.007 info src/plugin.cpp:627] vcvrack: Loaded static plugin SonusModular 0.6.1 -[0.007 info src/plugin.cpp:627] vcvrack: Loaded static plugin Southpole-parasites 0.6.1 -[0.007 info src/plugin.cpp:627] vcvrack: Loaded static plugin squinkylabs-plug1 0.6.1 -[0.007 info src/plugin.cpp:627] vcvrack: Loaded static plugin SubmarineFree 0.6.1 -[0.007 info src/plugin.cpp:627] vcvrack: Loaded static plugin Template 0.6.1 +[0.006 info src/plugin.cpp:627] vcvrack: Loaded static plugin SonusModular 0.6.1 +[0.006 info src/plugin.cpp:627] vcvrack: Loaded static plugin Southpole-parasites 0.6.1 +[0.006 info src/plugin.cpp:627] vcvrack: Loaded static plugin squinkylabs-plug1 0.6.1 +[0.006 info src/plugin.cpp:627] vcvrack: Loaded static plugin SubmarineFree 0.6.1 +[0.006 info src/plugin.cpp:627] vcvrack: Loaded static plugin Template 0.6.1 [0.007 info src/plugin.cpp:627] vcvrack: Loaded static plugin trowaSoft 0.6.1 -[0.008 info src/plugin.cpp:627] vcvrack: Loaded static plugin Valley 0.6.1 -[0.008 info src/plugin.cpp:627] vcvrack: Loaded static plugin VultModules 0.6.1 -[0.008 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_146097_cc.svg +[0.007 info src/plugin.cpp:627] vcvrack: Loaded static plugin Valley 0.6.1 +[0.007 info src/plugin.cpp:627] vcvrack: Loaded static plugin VultModules 0.6.1 +[0.007 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_146097_cc.svg [0.008 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_31859_cc.svg [0.008 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343816_cc.svg -[0.009 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343811_cc.svg -[0.010 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1084369_cc.svg -[0.010 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1745061_cc.svg -[0.010 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1240789_cc.svg -[0.010 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_305536_cc.svg +[0.008 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343811_cc.svg +[0.008 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1084369_cc.svg +[0.008 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1745061_cc.svg +[0.009 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1240789_cc.svg +[0.009 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_305536_cc.svg [0.010 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_468341_cc.svg -[0.196 info src/window.cpp:703] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/DejaVuSans.ttf -[0.198 info src/settings.cpp:185] Loading settings f:\git\VeeSeeVSTRack\vst2_bin\/settings.json -[0.299 info src/app/RackWidget.cpp:192] Loading patch from string -[0.300 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/AudioInterface.svg -[0.301 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/ScrewSilver.svg -[0.301 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/PJ301M.svg -[0.301 info src/window.cpp:703] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/ShareTechMono-Regular.ttf -[0.302 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/MIDIToCVInterface.svg -[0.305 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/XCO.svg -[0.305 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_68px.svg -[0.305 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_16px.svg -[0.306 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/button_9px_0.svg -[0.306 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/button_9px_1.svg -[0.306 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_38px.svg -[0.306 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_0.svg -[0.306 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_1.svg -[0.307 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/port.svg -[0.307 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCA.svg -[0.308 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/RoundLargeBlackKnob.svg -[0.308 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCF.svg -[0.309 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/RoundHugeBlackKnob.svg -[0.310 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/ADSR.svg -[0.310 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-hexscrew.svg -[0.310 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePot.svg -[0.311 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePotHandle.svg -[0.311 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-PJ301M.svg -[0.312 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCMixer.svg -[0.313 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/LEDSlider.svg -[0.313 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/LEDSliderGreenHandle.svg -[16.370 info src/app/RackWidget.cpp:154] Saving patch to string +[0.200 info src/window.cpp:703] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/DejaVuSans.ttf +[0.202 info src/settings.cpp:185] Loading settings f:\git\VeeSeeVSTRack\vst2_bin\/settings.json +[0.303 info src/app/RackWidget.cpp:192] Loading patch from string +[0.304 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/AudioInterface.svg +[0.305 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/ScrewSilver.svg +[0.305 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/PJ301M.svg +[0.305 info src/window.cpp:703] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/ShareTechMono-Regular.ttf +[0.306 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/MIDIToCVInterface.svg +[0.309 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/XCO.svg +[0.309 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_68px.svg +[0.309 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_16px.svg +[0.309 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/button_9px_0.svg +[0.310 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/button_9px_1.svg +[0.310 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_38px.svg +[0.310 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_0.svg +[0.310 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_1.svg +[0.310 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/port.svg +[0.311 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCA.svg +[0.311 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/RoundLargeBlackKnob.svg +[0.312 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCF.svg +[0.312 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/RoundHugeBlackKnob.svg +[0.313 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/ADSR.svg +[0.314 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-hexscrew.svg +[0.314 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePot.svg +[0.314 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePotHandle.svg +[0.315 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-PJ301M.svg +[10.130 info src/app/RackWidget.cpp:154] Saving patch to string diff --git a/vst2_bin/veeseevstrack_effect.dll__X86_LEGACY b/vst2_bin/veeseevstrack_effect.dll__X86_LEGACY index 74b382d0..9bdf25f2 100644 Binary files a/vst2_bin/veeseevstrack_effect.dll__X86_LEGACY and b/vst2_bin/veeseevstrack_effect.dll__X86_LEGACY differ diff --git a/vst2_bin/veeseevstrack_instr.dll__ b/vst2_bin/veeseevstrack_instr.dll__ index 25e830af..9fb9bef2 100644 Binary files a/vst2_bin/veeseevstrack_instr.dll__ and b/vst2_bin/veeseevstrack_instr.dll__ differ diff --git a/vst2_bin/veeseevstrack_instr.dll__X86_LEGACY__ b/vst2_bin/veeseevstrack_instr.dll__X86_LEGACY__ index 7cd62293..3c6c00a0 100644 Binary files a/vst2_bin/veeseevstrack_instr.dll__X86_LEGACY__ and b/vst2_bin/veeseevstrack_instr.dll__X86_LEGACY__ differ