diff --git a/src/app/RackWidget.cpp b/src/app/RackWidget.cpp index 846e9f88..12a38478 100644 --- a/src/app/RackWidget.cpp +++ b/src/app/RackWidget.cpp @@ -16,12 +16,16 @@ extern void vst2_set_shared_plugin_tls_globals(void); #ifdef RACK_HOST -extern void vst2_oversample_realtime_set (float _factor, int _quality); -extern void vst2_oversample_realtime_get (float *_factor, int *_quality); -extern void vst2_oversample_channels_set (int _numIn, int _numOut); -extern void vst2_oversample_channels_get (int *_numIn, int *_numOut); -extern void vst2_idle_detect_mode_set (int _mode); -extern void vst2_idle_detect_mode_get (int *_mode); +extern void vst2_oversample_realtime_set (float _factor, int _quality); +extern void vst2_oversample_realtime_get (float *_factor, int *_quality); +extern void vst2_oversample_channels_set (int _numIn, int _numOut); +extern void vst2_oversample_channels_get (int *_numIn, int *_numOut); +extern void vst2_idle_detect_mode_set (int _mode); +extern void vst2_idle_detect_mode_get (int *_mode); +extern void vst2_idle_grace_sec_set (float _sec); +extern float vst2_idle_grace_sec_get (void); +extern void vst2_idle_output_sec_set (float _sec); +extern float vst2_idle_output_sec_get (void); #endif // RACK_HOST #endif // USE_VST2 @@ -321,6 +325,22 @@ json_t *RackWidget::toJson() { json_t *idleJ = json_real(idleDetect); json_object_set_new(rootJ, "idleDetect", idleJ); } + + // Idle note-on grace period (sec) + { + float sec = vst2_idle_grace_sec_get(); + + json_t *idleJ = json_real(sec); + json_object_set_new(rootJ, "idleGraceSec", idleJ); + } + + // Idle output silence threshold (sec) + { + float sec = vst2_idle_output_sec_get(); + + json_t *idleJ = json_real(sec); + json_object_set_new(rootJ, "idleOutputSec", idleJ); + } #endif // RACK_HOST #endif // USE_VST2 @@ -466,6 +486,28 @@ void RackWidget::fromJson(json_t *rootJ) { if (idleJ) { vst2_idle_detect_mode_set(int(json_number_value(idleJ))); } + } + + // Idle note-on grace period (sec) + { + json_t *idleJ = json_object_get(rootJ, "idleGraceSec"); + if (idleJ) { + vst2_idle_grace_sec_set(float(json_number_value(idleJ))); + } + else { + vst2_idle_grace_sec_set(0.75f); + } + } + + // Idle output silence threshold (sec) + { + json_t *idleJ = json_object_get(rootJ, "idleOutputSec"); + if (idleJ) { + vst2_idle_output_sec_set(float(json_number_value(idleJ))); + } + else { + vst2_idle_output_sec_set(0.2f); + } } #endif // RACK_HOST diff --git a/src/app/Toolbar.cpp b/src/app/Toolbar.cpp index a1591b20..3040b3de 100644 --- a/src/app/Toolbar.cpp +++ b/src/app/Toolbar.cpp @@ -15,6 +15,10 @@ extern void vst2_oversample_channels_set (int _numIn, int _numOut); extern void vst2_oversample_channels_get (int *_numIn, int *_numOut); extern void vst2_idle_detect_mode_set (int _mode); extern void vst2_idle_detect_mode_get (int *_mode); +extern void vst2_idle_grace_sec_set (float _sec); +extern float vst2_idle_grace_sec_get (void); +extern void vst2_idle_output_sec_set (float _sec); +extern float vst2_idle_output_sec_get (void); extern void vst2_refresh_rate_set (float _hz); extern float vst2_refresh_rate_get (void); extern void vst2_window_size_set (int _width, int _height); @@ -214,6 +218,16 @@ struct IdleModeItem : MenuItem { vst2_idle_detect_mode_set(idle_mode); } }; + +struct IdleTimeItem : MenuItem { + float idle_grace_sec; + float idle_output_sec; + + void onAction(EventAction &e) override { + vst2_idle_grace_sec_set(idle_grace_sec); + vst2_idle_output_sec_set(idle_output_sec); + } +}; #endif // RACK_HOST @@ -302,27 +316,57 @@ struct IdleModeButton : TooltipIconButton { menu->addChild(MenuLabel::create("Idle Mode")); - int idleMode; vst2_idle_detect_mode_get(&idleMode); - - IdleModeItem *item; - - item = new IdleModeItem(); - item->text = "Always Active"; - item->rightText = CHECKMARK(0/*IDLE_DETECT_NONE*/ == idleMode); - item->idle_mode = 0; - menu->addChild(item); - - item = new IdleModeItem(); - item->text = "Wake on MIDI Note-On"; - item->rightText = CHECKMARK(1/*IDLE_DETECT_MIDI*/ == idleMode); - item->idle_mode = 1; - menu->addChild(item); + { + int idleMode; vst2_idle_detect_mode_get(&idleMode); + + IdleModeItem *item; + + item = new IdleModeItem(); + item->text = "Always Active"; + item->rightText = CHECKMARK(0/*IDLE_DETECT_NONE*/ == idleMode); + item->idle_mode = 0; + menu->addChild(item); + + item = new IdleModeItem(); + item->text = "Wake on MIDI Note-On"; + item->rightText = CHECKMARK(1/*IDLE_DETECT_MIDI*/ == idleMode); + item->idle_mode = 1; + menu->addChild(item); + + item = new IdleModeItem(); + item->text = "Wake on Audio Input"; + item->rightText = CHECKMARK(2/*IDLE_DETECT_AUDIO*/ == idleMode); + item->idle_mode = 2; + menu->addChild(item); + } - item = new IdleModeItem(); - item->text = "Wake on Audio Input"; - item->rightText = CHECKMARK(2/*IDLE_DETECT_AUDIO*/ == idleMode); - item->idle_mode = 2; - menu->addChild(item); + { + float idleGraceSec = vst2_idle_grace_sec_get(); + float idleOutputSec = vst2_idle_output_sec_get(); + IdleTimeItem *item; + printf("xxx Toolbar: idleGraceSec=%f idleOutputSec=%f\n", idleGraceSec, idleOutputSec); + + item = new IdleTimeItem(); + item->text = "Idle Time: Long (Slow Attacks, 750ms)"; + item->rightText = CHECKMARK(0.75f == idleGraceSec); + item->idle_grace_sec = 0.75f; + item->idle_output_sec = 0.2f; + menu->addChild(item); + + item = new IdleTimeItem(); + item->text = "Idle Time: Default (300 ms)"; + item->rightText = CHECKMARK(0.3f == idleGraceSec); + item->idle_grace_sec = 0.3f; + item->idle_output_sec = 0.2f; + menu->addChild(item); + + item = new IdleTimeItem(); + item->text = "Idle Time: Short (Percussion, 150ms)"; + item->rightText = CHECKMARK(0.15f == idleGraceSec); + item->idle_grace_sec = 0.15f; + item->idle_output_sec = 0.1f; + menu->addChild(item); + } #endif // RACK_HOST } }; diff --git a/src/vst2_main.cpp b/src/vst2_main.cpp index edf8cefe..a8f1f6a7 100644 --- a/src/vst2_main.cpp +++ b/src/vst2_main.cpp @@ -19,6 +19,8 @@ /// changed: 26Jun2018, 27Jun2018, 29Jun2018, 01Jul2018, 02Jul2018, 06Jul2018, 13Jul2018 /// 26Jul2018, 04Aug2018, 05Aug2018, 06Aug2018, 07Aug2018, 09Aug2018, 11Aug2018 /// 18Aug2018, 19Aug2018, 05Sep2018, 06Sep2018, 10Oct2018, 26Oct2018, 10Mar2019 +/// 12Mar2019 +/// /// /// @@ -488,13 +490,16 @@ public: bool b_offline; // true=offline rendering (HQ) bool b_check_offline; // true=ask host if it's in offline rendering mode - sUI idle_detect_mode; - sUI idle_detect_mode_fx; - sUI idle_detect_mode_instr; + sUI idle_detect_mode; + sUI idle_detect_mode_fx; + sUI idle_detect_mode_instr; sF32 idle_input_level_threshold; sF32 idle_output_level_threshold; sF32 idle_output_sec_threshold; - sUI idle_output_framecount; + sUI idle_output_framecount; + sF32 idle_noteon_sec_grace; // grace period after note on + sUI idle_frames_since_noteon; + bool b_idle; sBool b_fix_denorm; // true=fix denormalized floats + clip to -4..4. fixes broken audio in FLStudio and Reason. @@ -1020,6 +1025,7 @@ public: } b_idle = false; idle_output_framecount = 0u; + idle_frames_since_noteon = 0u; } void setIdleDetectModeFx(uint32_t _mode) { @@ -1036,12 +1042,28 @@ public: #endif // VST2_EFFECT } + void setIdleGraceSec(float _sec) { + idle_noteon_sec_grace = _sec; + } + + float getIdleGraceSec(void) const { + return idle_noteon_sec_grace; + } + + void setIdleOutputSec(float _sec) { + idle_output_sec_threshold = _sec; + } + + float getIdleOutputSec(void) const { + return idle_output_sec_threshold; + } + void setEnableFixDenorm(int32_t _bEnable) { b_fix_denorm = (0 != _bEnable); Dprintf("vst2_main:setEnableFixDenorm(%d)\n", b_fix_denorm); } - int32_t getEnableFixDenorm(void) { + int32_t getEnableFixDenorm(void) const { return int32_t(b_fix_denorm); } @@ -1296,8 +1318,6 @@ void VSTPluginProcessReplacingFloat32(VSTPlugin *vstPlugin, case VSTPluginWrapper::IDLE_DETECT_AUDIO: { - wrapper->b_idle = true; - for(chIdx = 0u; chIdx < NUM_INPUTS; chIdx++) { if(chIdx < wrapper->oversample.num_in) @@ -1498,15 +1518,28 @@ void VSTPluginProcessReplacingFloat32(VSTPlugin *vstPlugin, } } + if(VSTPluginWrapper::IDLE_DETECT_MIDI == wrapper->idle_detect_mode) + { + wrapper->idle_frames_since_noteon += sampleFrames; + } + if(bSilence) { wrapper->idle_output_framecount += sampleFrames; + if(VSTPluginWrapper::IDLE_DETECT_MIDI == wrapper->idle_detect_mode) + { + bSilence = (wrapper->idle_frames_since_noteon >= sUI(wrapper->idle_noteon_sec_grace * wrapper->sample_rate)); + } + if(wrapper->idle_output_framecount >= sUI(wrapper->idle_output_sec_threshold * wrapper->sample_rate)) { - // Frame threshold exceeded, become idle - wrapper->b_idle = true; - Dprintf_idle("xxx vstrack_plugin: now idle\n"); + if(bSilence) + { + // Frame threshold exceeded, become idle + wrapper->b_idle = true; + Dprintf_idle("xxx vstrack_plugin: now idle\n"); + } } } else @@ -1871,15 +1904,17 @@ VstIntPtr VSTPluginDispatcher(VSTPlugin *vstPlugin, Dprintf("vstrack_plugin:effProcessEvents: ev[%u].noteOffVelocity = %d\n", evIdx, mev->noteOffVelocity); // 0..127 #endif // DEBUG_PRINT_EVENTS - if((VSTPluginWrapper::IDLE_DETECT_MIDI == wrapper->idle_detect_mode) && wrapper->b_idle) + if(VSTPluginWrapper::IDLE_DETECT_MIDI == wrapper->idle_detect_mode) { if(0x90u == (mev->midiData[0] & 0xF0u)) // Note on ? { wrapper->lockAudio(); + if(wrapper->b_idle) + Dprintf_idle("xxx vstrack_plugin: become active after MIDI note on\n"); wrapper->b_idle = false; wrapper->idle_output_framecount = 0u; + wrapper->idle_frames_since_noteon = 0u; wrapper->unlockAudio(); - Dprintf_idle("xxx vstrack_plugin: become active after MIDI note on\n"); } } @@ -2176,8 +2211,10 @@ VSTPluginWrapper::VSTPluginWrapper(audioMasterCallback vstHostCallback, b_idle = false; idle_input_level_threshold = 0.00018f;//0.00007f; idle_output_level_threshold = 0.00018f;//0.00003f; - idle_output_sec_threshold = 120.0f / 1000.0f; // idle after 120ms of silence + idle_output_sec_threshold = 0.2f; // idle after 200ms of silence idle_output_framecount = 0u; + idle_noteon_sec_grace = 0.3f; // grace period after note on + idle_frames_since_noteon = 0u; b_fix_denorm = false; @@ -2315,6 +2352,31 @@ void vst2_idle_detect_mode_get(int *_mode) { *_mode = int(rack::global->vst2.wrapper->idle_detect_mode); } +void vst2_idle_grace_sec_set(float _sec) { + // Note-ons / MIDI idle detect mode + if(_sec < 0.05f) + _sec = 0.05f; + else if(_sec > 3.0f) + _sec = 3.0f; + rack::global->vst2.wrapper->setIdleGraceSec(_sec); +} + +float vst2_idle_grace_sec_get(void) { + return rack::global->vst2.wrapper->getIdleGraceSec(); +} + +void vst2_idle_output_sec_set(float _sec) { + if(_sec < 0.05f) + _sec = 0.05f; + else if(_sec > 3.0f) + _sec = 3.0f; + rack::global->vst2.wrapper->setIdleOutputSec(_sec); +} + +float vst2_idle_output_sec_get(void) { + return rack::global->vst2.wrapper->getIdleOutputSec(); +} + int vst2_fix_denorm_get(void) { return rack::global->vst2.wrapper->getEnableFixDenorm(); } diff --git a/todo.txt b/todo.txt index 1e2e84d3..ab0d7b37 100644 --- a/todo.txt +++ b/todo.txt @@ -192,3 +192,7 @@ + fix save/save as keyboard shortcuts +------------------------------------------------------------------------ ++ add "idleGraceSec" patch property (MIDI note-on grace period in seconds) ++ add "idleOutputSec" patch property (output silence threshold in seconds) ++ add idle grace/output Toolbar settings (short=150ms, def=300ms, long=700ms) diff --git a/vst2_bin/CHANGELOG_VST.txt b/vst2_bin/CHANGELOG_VST.txt index 77403bac..ceee5c78 100644 --- a/vst2_bin/CHANGELOG_VST.txt +++ b/vst2_bin/CHANGELOG_VST.txt @@ -1,4 +1,10 @@ +** March 15th, 2019 +- fix "MIDI Note On" idle detection mode +- add configurable threshold settings for MIDI idle detection (short, default, long) +- add new demo video: https://youtu.be/XTpLfcz-6Vo + + ** March 10th, 2019 - implement MIDI channel aftertouch - add "fixDenorm" global setting (settings.json) (also editable via Toolbar) diff --git a/vst2_bin/README_vst2.txt b/vst2_bin/README_vst2.txt index 15c868da..486a4e80 100644 --- a/vst2_bin/README_vst2.txt +++ b/vst2_bin/README_vst2.txt @@ -1,4 +1,4 @@ -VeeSeeVST Rack VST 2.4 Plugin -- March 10th, 2019 +VeeSeeVST Rack VST 2.4 Plugin -- March 15th, 2019 ================================================= !!!------------------------------------------------------------------------------ @@ -27,7 +27,9 @@ This is a quick'n'dirty adaption of VCV Rack 0.6.1 for the VST2 format. - wake up on MIDI note on or audio input + comes with 827 prebuilt modules -Here's a demo video of it: https://vimeo.com/277703414 +Here's an old demo video of it: https://vimeo.com/277703414 +And a newer one: https://youtu.be/XTpLfcz-6Vo + Windows version tested in: - Eureka (my own work-in-progress VST host) diff --git a/vst2_bin/log.txt b/vst2_bin/log.txt index 6184fdb1..5a1b7ab0 100644 --- a/vst2_bin/log.txt +++ b/vst2_bin/log.txt @@ -1,127 +1,131 @@ -[0.000 info src/main.cpp:67] VeeSeeVST Rack 0.6.1 -[0.000 info src/main.cpp:70] Global directory: f:\git\VeeSeeVSTRack\vst2_bin\/ -[0.000 info src/main.cpp:71] Local directory: f:\git\VeeSeeVSTRack\vst2_bin\/ -[0.000 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin 21kHz 0.6.1 -[0.000 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin AmalgamatedHarmonics 0.6.5 -[0.000 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Alikins 0.6.6 -[0.000 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin alto777_LFSR 0.6.1 -[0.000 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin arjo_modules 0.6.0 -[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin AS 0.6.13 -[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin AudibleInstruments 0.6.3 -[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Autodafe 0.6.1 -[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin BaconMusic 0.6.1 -[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Bark 0.6.5 -[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Befaco 0.6.1 -[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Bidoo 0.6.27 -[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Bogaudio 0.6.13 -[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin CastleRocktronics 0.6.1 -[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin cf 0.6.8 -[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin com-soundchasing-stochasm 0.6.1 -[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin computerscare 0.6.1 -[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin DHE-Modules 0.6.4 -[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin DrumKit 0.6.1 -[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Edge 0.6.3 -[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin EH_modules 0.6.1 -[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin ErraticInstruments 0.6.1 -[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin ESeries 0.6.1 -[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin FrankBussFormula 0.6.1 -[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin FrozenWasteland 0.6.1 -[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Fundamental 0.6.2 -[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Geodesics 0.6.6 -[0.004 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Gratrix 0.6.1 -[0.004 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin HetrickCV 0.6.1 -[0.004 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin huaba 0.6.1 -[0.004 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin ImpromptuModular 0.6.16 -[0.004 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin JE 0.6.1 -[0.004 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin JW-Modules 0.6.3 -[0.004 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Koralfx-Modules 0.6.1 -[0.004 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin LabSeven 0.6.2 -[0.004 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin LindenbergResearch 0.6.4 -[0.004 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin LOGinstruments 0.6.1 -[0.004 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin mental 0.6.1 -[0.004 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin MicMusic 0.6.3 -[0.005 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin ML_modules 0.6.4 -[0.005 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin moDllz 0.6.6 -[0.005 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin modular80 0.6.4 -[0.005 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin mscHack 0.6.1 -[0.005 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin mtsch-plugins 0.6.1 -[0.005 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin NauModular 0.6.1 -[0.005 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Nohmad 0.6.1 -[0.005 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin noobhour 0.6.2 -[0.005 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Ohmer 0.6.1 -[0.005 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin PG-Instruments 0.6.1 -[0.005 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin PvC 0.6.1 -[0.005 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin QuantalAudio 0.6.4 -[0.006 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Qwelk 0.6.1 -[0.006 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin rcm 0.6.12 -[0.006 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin RJModules 0.6.1 -[0.006 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin SerialRacker 0.6.1 -[0.006 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Skylights 0.6.3 -[0.006 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin SonusModular 0.6.1 -[0.006 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Southpole 0.6.1 -[0.006 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Southpole-parasites 0.6.1 -[0.006 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin squinkylabs-plug1 0.6.14 -[0.007 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin SubmarineFree 0.6.8 -[0.007 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin SynthKit 0.6.1 -[0.007 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Template 0.6.1 -[0.007 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin TheXOR 0.6.1 -[0.007 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin trowaSoft 0.6.1 -[0.007 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin unless_modules 0.6.1 -[0.007 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Valley 0.6.16 -[0.008 info src/plugin.cpp:90] trying to load shared plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/bsp/plugin.dll.instr -[0.009 info src/plugin.cpp:160] Loaded plugin bsp 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/bsp/plugin.dll.instr -[0.009 info src/plugin.cpp:90] trying to load shared plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/dBiz/plugin.dll.instr -[0.009 info src/plugin.cpp:160] Loaded plugin dBiz 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/dBiz/plugin.dll.instr -[0.010 info src/plugin.cpp:90] trying to load shared plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template_shared/plugin.dll.instr -[0.011 info src/plugin.cpp:160] Loaded plugin Template_shared 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template_shared/plugin.dll.instr -[0.011 info src/settings.cpp:475] Loading settings f:\git\VeeSeeVSTRack\vst2_bin\/settings.json -[0.020 info src/window.cpp:725] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/DejaVuSans.ttf -[0.021 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_146097_cc.svg -[0.021 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_31859_cc.svg -[0.021 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343816_cc.svg -[0.021 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343811_cc.svg -[0.021 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1084369_cc.svg -[0.021 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1745061_cc.svg -[0.022 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1240789_cc.svg -[0.022 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_305536_cc.svg -[0.022 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_468341_cc.svg -[0.022 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/idle_mode_icon_cc.svg -[0.022 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/settings_icon_cc.svg -[0.022 info src/settings.cpp:475] Loading settings f:\git\VeeSeeVSTRack\vst2_bin\/settings.json -[0.024 info src/app/RackWidget.cpp:216] Loading patch from string -[0.026 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/AudioInterface.svg -[0.026 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/ScrewSilver.svg -[0.026 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/PJ301M.svg -[0.026 info src/window.cpp:725] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/ShareTechMono-Regular.ttf -[0.027 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/MIDIToCVInterface.svg -[0.029 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/XCO.svg -[0.029 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_68px.svg -[0.030 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_16px.svg -[0.030 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/button_9px_0.svg -[0.030 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/button_9px_1.svg -[0.030 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_38px.svg -[0.030 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_0.svg -[0.030 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_1.svg -[0.030 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/port.svg -[0.031 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCA.svg -[0.031 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/RoundLargeBlackKnob.svg -[0.032 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/ADSR.svg -[0.032 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-hexscrew.svg -[0.032 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePot.svg -[0.032 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePotHandle.svg -[0.033 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-PJ301M.svg -[0.035 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Panels/D_Inf.svg -[0.035 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzScrew.svg -[0.035 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzKnobSmall.svg -[0.036 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzButton_0.svg -[0.036 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzButton_1.svg -[0.036 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzPort.svg -[0.037 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Autodafe/res/Multiple18.svg -[0.037 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/PJ3410.svg -[0.040 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/huaba/res/EQ3.svg -[0.041 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as_LFO.svg -[0.042 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-knobBlack.svg -[0.042 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as_CKSS_0.svg -[0.042 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as_CKSS_1.svg -[313.153 info src/app/RackWidget.cpp:161] Saving patch F:\git\VeeSeeVSTRack\vst2_bin\patches\bsp\BSP pulse lead 2.vcv -[327.408 info src/app/RackWidget.cpp:178] Saving patch to string +[0.000 info src/main.cpp:67] VeeSeeVST Rack 0.6.1 +[0.000 info src/main.cpp:70] Global directory: f:\git\VeeSeeVSTRack\vst2_bin\/ +[0.000 info src/main.cpp:71] Local directory: f:\git\VeeSeeVSTRack\vst2_bin\/ +[0.000 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin 21kHz 0.6.1 +[0.000 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin AmalgamatedHarmonics 0.6.5 +[0.000 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Alikins 0.6.6 +[0.000 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin alto777_LFSR 0.6.1 +[0.000 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin arjo_modules 0.6.0 +[0.000 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin AS 0.6.13 +[0.000 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin AudibleInstruments 0.6.3 +[0.000 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Autodafe 0.6.1 +[0.000 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin BaconMusic 0.6.1 +[0.000 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Bark 0.6.5 +[0.000 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Befaco 0.6.1 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Bidoo 0.6.27 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Bogaudio 0.6.13 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin CastleRocktronics 0.6.1 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin cf 0.6.8 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin com-soundchasing-stochasm 0.6.1 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin computerscare 0.6.1 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin DHE-Modules 0.6.4 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin DrumKit 0.6.1 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Edge 0.6.3 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin EH_modules 0.6.1 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin ErraticInstruments 0.6.1 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin ESeries 0.6.1 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin FrankBussFormula 0.6.1 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin FrozenWasteland 0.6.1 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Fundamental 0.6.2 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Geodesics 0.6.6 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Gratrix 0.6.1 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin HetrickCV 0.6.1 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin huaba 0.6.1 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin ImpromptuModular 0.6.16 +[0.001 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin JE 0.6.1 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin JW-Modules 0.6.3 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Koralfx-Modules 0.6.1 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin LabSeven 0.6.2 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin LindenbergResearch 0.6.4 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin LOGinstruments 0.6.1 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin mental 0.6.1 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin MicMusic 0.6.3 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin ML_modules 0.6.4 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin moDllz 0.6.6 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin modular80 0.6.4 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin mscHack 0.6.1 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin mtsch-plugins 0.6.1 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin NauModular 0.6.1 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Nohmad 0.6.1 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin noobhour 0.6.2 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Ohmer 0.6.1 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin PG-Instruments 0.6.1 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin PvC 0.6.1 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin QuantalAudio 0.6.4 +[0.002 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Qwelk 0.6.1 +[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin rcm 0.6.12 +[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin RJModules 0.6.1 +[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin SerialRacker 0.6.1 +[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Skylights 0.6.3 +[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin SonusModular 0.6.1 +[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Southpole 0.6.1 +[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Southpole-parasites 0.6.1 +[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin squinkylabs-plug1 0.6.14 +[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin SubmarineFree 0.6.8 +[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin SynthKit 0.6.1 +[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Template 0.6.1 +[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin TheXOR 0.6.1 +[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin trowaSoft 0.6.1 +[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin unless_modules 0.6.1 +[0.003 info src/plugin_static.cpp:150] vcvrack: Loaded static plugin Valley 0.6.16 +[0.004 info src/plugin.cpp:90] trying to load shared plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/bsp/plugin.dll.fx +[0.004 info src/plugin.cpp:160] Loaded plugin bsp 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/bsp/plugin.dll.fx +[0.004 info src/plugin.cpp:90] trying to load shared plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/dBiz/plugin.dll.fx +[0.004 info src/plugin.cpp:160] Loaded plugin dBiz 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/dBiz/plugin.dll.fx +[0.005 info src/plugin.cpp:90] trying to load shared plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template_shared/plugin.dll.fx +[0.005 info src/plugin.cpp:160] Loaded plugin Template_shared 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template_shared/plugin.dll.fx +[0.006 info src/settings.cpp:475] Loading settings f:\git\VeeSeeVSTRack\vst2_bin\/settings.json +[0.016 info src/window.cpp:725] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/DejaVuSans.ttf +[0.017 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_146097_cc.svg +[0.017 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_31859_cc.svg +[0.017 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343816_cc.svg +[0.017 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343811_cc.svg +[0.018 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1084369_cc.svg +[0.018 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1745061_cc.svg +[0.018 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1240789_cc.svg +[0.018 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_305536_cc.svg +[0.018 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_468341_cc.svg +[0.018 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/idle_mode_icon_cc.svg +[0.018 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/settings_icon_cc.svg +[0.018 info src/settings.cpp:475] Loading settings f:\git\VeeSeeVSTRack\vst2_bin\/settings.json +[0.021 info src/app/RackWidget.cpp:220] Loading patch from string +[0.023 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/AudioInterface.svg +[0.023 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/ScrewSilver.svg +[0.023 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/PJ301M.svg +[0.023 info src/window.cpp:725] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/ShareTechMono-Regular.ttf +[0.024 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/MIDIToCVInterface.svg +[0.025 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Alikins/res/SpecificValue.svg +[0.025 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/Trimpot.svg +[0.025 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Alikins/res/PurpleTrimpot.svg +[0.025 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/Trimpot.svg +[0.026 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCA-1.svg +[0.027 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/CKSS_0.svg +[0.027 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/CKSS_1.svg +[0.029 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/Pressor.svg +[0.030 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_38px.svg +[0.030 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_26px.svg +[0.030 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_0.svg +[0.030 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_1.svg +[0.030 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/port.svg +[0.032 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Southpole/res/Abr.svg +[0.032 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Southpole/res/sp-Port20.svg +[0.032 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Southpole/res/sp-switchv_0.svg +[0.032 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Southpole/res/sp-switchv_1.svg +[0.033 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Southpole/res/DeuxEtageres.svg +[0.034 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Southpole/res/sp-knobBlack.svg +[0.034 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Southpole/res/sp-trimpotBlack.svg +[4.239 info src/app/RackWidget.cpp:182] Saving patch to string +[4.291 info src/app/RackWidget.cpp:182] Saving patch to string +[6.984 info src/app/RackWidget.cpp:182] Saving patch to string +[7.317 info src/app/RackWidget.cpp:182] Saving patch to string +[4.342 info src/app/RackWidget.cpp:182] Saving patch to string +[4.566 info src/app/RackWidget.cpp:182] Saving patch to string +fo src/app/RackWidget.cpp:182] Saving patch to string +[5.861 info src/app/RackWidget.cpp:182] Saving patch to string +[7.526 info src/app/RackWidget.cpp:182] Saving patch to string +[5.746 info src/app/RackWidget.cpp:182] Saving patch to string +[6.323 info src/app/RackWidget.cpp:182] Saving patch to string +[6.560 info src/app/RackWidget.cpp:182] Saving patch to string +[5.192 info src/app/RackWidget.cpp:182] Saving patch to string +[6.918 inf[5.516 info src/app/RackWidget.cpp:182] Saving patch to string +[6.092 info src/app/RackWidget.cpp:182] Saving patch to string