Browse Source

add DLL plugin support; add Template_shared example plugin; move dBiz.* modules to plugin.dll

pull/1639/head
bsp2 6 years ago
parent
commit
7e79bd3eda
62 changed files with 2250 additions and 231 deletions
  1. +24
    -20
      README.md
  2. BIN
      dep/dep.7z
  3. +2
    -2
      include/app.hpp
  4. +20
    -20
      include/componentlibrary.hpp
  5. +8
    -0
      include/global_ui.hpp
  6. +133
    -37
      include/plugin.hpp
  7. +0
    -8
      include/ui.hpp
  8. +1
    -1
      include/util/math.hpp
  9. +21
    -9
      make.objects
  10. +5
    -0
      makefile.msvc
  11. +1
    -1
      makefile_lib.msvc
  12. +28
    -0
      makefile_shared_lib.msvc
  13. +4
    -0
      plugins/build_shared_plugin_post.mk
  14. +19
    -0
      plugins/build_shared_plugin_pre.mk
  15. +121
    -0
      plugins/community/repos/Template_shared/LICENSE.txt
  16. +13
    -0
      plugins/community/repos/Template_shared/README.md
  17. +3
    -0
      plugins/community/repos/Template_shared/make.objects
  18. +7
    -0
      plugins/community/repos/Template_shared/makefile.msvc
  19. +243
    -0
      plugins/community/repos/Template_shared/res/MyModule.svg
  20. +105
    -0
      plugins/community/repos/Template_shared/src/MyModule.cpp
  21. +22
    -0
      plugins/community/repos/Template_shared/src/Template.cpp
  22. +5
    -0
      plugins/community/repos/Template_shared/src/Template.hpp
  23. +2
    -2
      plugins/community/repos/dBiz/makefile.msvc
  24. +3
    -3
      plugins/community/repos/dBiz/src/dBiz.hpp
  25. +4
    -0
      src/Core/Core.cpp
  26. +2
    -1
      src/Core/Core.hpp
  27. +10
    -0
      src/app/ModuleBrowser.cpp
  28. +38
    -0
      src/app/ModuleWidget.cpp
  29. +3
    -0
      src/app/Panel.cpp
  30. +11
    -0
      src/app/RackWidget.cpp
  31. +2
    -0
      src/asset.cpp
  32. +0
    -4
      src/engine.cpp
  33. +65
    -9
      src/plugin.cpp
  34. +1
    -0
      src/ui/Menu.cpp
  35. +4
    -1
      src/ui/MenuLabel.cpp
  36. +1
    -0
      src/ui/Scene.cpp
  37. +143
    -0
      src/util/dirent_win32/POSIX Directory Browsing API for Win32.html
  38. +148
    -0
      src/util/dirent_win32/dirent.c
  39. +50
    -0
      src/util/dirent_win32/dirent.h
  40. +8
    -0
      src/util/logger.cpp
  41. +16
    -10
      src/util/system.cpp
  42. +14
    -21
      src/vst2_main.cpp
  43. +44
    -3
      src/widgets/FramebufferWidget.cpp
  44. +2
    -0
      src/widgets/SVGWidget.cpp
  45. +6
    -0
      src/widgets/Widget.cpp
  46. +14
    -0
      src/window.cpp
  47. +6
    -0
      vst2_bin/CHANGELOG_VST.txt
  48. +108
    -77
      vst2_bin/log.txt
  49. +121
    -0
      vst2_bin/plugins/Template/LICENSE.txt
  50. +13
    -0
      vst2_bin/plugins/Template/README.md
  51. +243
    -0
      vst2_bin/plugins/Template/res/MyModule.svg
  52. +121
    -0
      vst2_bin/plugins/Template_shared/LICENSE.txt
  53. +13
    -0
      vst2_bin/plugins/Template_shared/README.md
  54. BIN
      vst2_bin/plugins/Template_shared/plugin.dll
  55. +243
    -0
      vst2_bin/plugins/Template_shared/res/MyModule.svg
  56. BIN
      vst2_bin/plugins/dBiz/plugin.dll
  57. +4
    -0
      vst2_bin/settings.json
  58. BIN
      vst2_bin/veeseevstrack_effect.dll__X86_LEGACY
  59. BIN
      vst2_bin/veeseevstrack_instr.dll__
  60. BIN
      vst2_bin/veeseevstrack_instr.dll__X86_LEGACY__
  61. +1
    -1
      vst2_common.mk
  62. +1
    -1
      vst2_common_staticlibs.mk

+ 24
- 20
README.md View File

@@ -9,8 +9,8 @@
+ supports VST program chunks (=> patches are saved with the DAW's project file or as .fxp files)
+ supports VST host timing (audioMasterGetTime / kVstTempoValid / kVstTransportPlaying, see Core.MIDI-1 module)
+ supports VST parameters (send / recv)
- does not support plugin DLLs due to VCV Rack's architecture which prevents this when it is run as a plugin itself
- future releases may contain additional (open source) add-ons modules
+ supports dynamically loaded plugin DLLs
- the plugin.dll files are _not_ binary compatible with the VCV Rack plugins !

Tested in
- Eureka (my own work-in-progress VST host)
@@ -23,7 +23,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-12Jul2018.7z](dist/veeseevstrack_0_6_1_win64_bin-12Jul2018.7z) (64bit)
Here's a snapshot of it: [veeseevstrack_0_6_1_win64_bin-13Jul2018.7z](dist/veeseevstrack_0_6_1_win64_bin-13Jul2018.7z) (64bit)

**WARNING: DON'T TRY TO USE THE INSTRUMENT AND EFFECT PLUGINS IN THE SAME PROJECT OR YOUR DAW WILL CRASH.**

@@ -41,7 +41,27 @@ Here's a demo video of it: https://vimeo.com/277703414

# Add-on modules

The following (478) add-on modules are statically linked with the VST plugin:
The binary distribution contains the following dynamically loaded add-on modules:
- dBiz.dBizBlank
- dBiz.Multiple
- dBiz.Contorno
- dBiz.Chord
- dBiz.Utility
- dBiz.Transpose
- dBiz.Bene
- dBiz.Bene2
- dBiz.BenePads
- dBiz.SubMix
- dBiz.Remix
- dBiz.PerfMixer
- dBiz.VCA530
- dBiz.Verbo
- dBiz.DVCO
- dBiz.DAOSC
- Template_shared.MyModule


The following (462) add-on modules are statically linked with the VST plugin:
- Alikins.IdleSwitch
- Alikins.MomentaryOnButtons
- Alikins.BigMuteButton
@@ -204,22 +224,6 @@ The following (478) add-on modules are statically linked with the VST plugin:
- cf.PATCH
- cf.LEDS
- cf.DAVE
- dBiz.dBizBlank
- dBiz.Multiple
- dBiz.Contorno
- dBiz.Chord
- dBiz.Utility
- dBiz.Transpose
- dBiz.Bene
- dBiz.Bene2
- dBiz.BenePads
- dBiz.SubMix
- dBiz.Remix
- dBiz.PerfMixer
- dBiz.VCA530
- dBiz.Verbo
- dBiz.DVCO
- dBiz.DAOSC
- DHE-Modules.BoosterStage
- DHE-Modules.Cubic
- DHE-Modules.Hostage


BIN
dep/dep.7z View File


+ 2
- 2
include/app.hpp View File

@@ -5,8 +5,8 @@
#include "ui.hpp"


static const float SVG_DPI = 75.0;
static const float MM_PER_IN = 25.4;
static const float SVG_DPI = 75.0f;
static const float MM_PER_IN = 25.4f;


namespace rack {


+ 20
- 20
include/componentlibrary.hpp View File

@@ -29,8 +29,8 @@ static const NVGcolor COLOR_DARK_PANEL = nvgRGB(0x17, 0x17, 0x17);

struct RoundKnob : SVGKnob {
RoundKnob() {
minAngle = -0.83*M_PI;
maxAngle = 0.83*M_PI;
minAngle = float(-0.83*M_PI);
maxAngle = float(0.83*M_PI);
}
};

@@ -68,8 +68,8 @@ struct RoundBlackSnapKnob : RoundBlackKnob {

struct Davies1900hKnob : SVGKnob {
Davies1900hKnob() {
minAngle = -0.83*M_PI;
maxAngle = 0.83*M_PI;
minAngle = float(-0.83*M_PI);
maxAngle = float(0.83*M_PI);
}
};

@@ -112,8 +112,8 @@ struct Davies1900hLargeRedKnob : Davies1900hKnob {

struct Rogan : SVGKnob {
Rogan() {
minAngle = -0.83*M_PI;
maxAngle = 0.83*M_PI;
minAngle = float(-0.83*M_PI);
maxAngle = float(0.83*M_PI);
}
};

@@ -282,8 +282,8 @@ struct Rogan1PWhite : Rogan {

struct SynthTechAlco : SVGKnob {
SynthTechAlco() {
minAngle = -0.82*M_PI;
maxAngle = 0.82*M_PI;
minAngle = float(-0.82*M_PI);
maxAngle = float(0.82*M_PI);
setSVG(SVG::load(assetGlobal("res/ComponentLibrary/SynthTechAlco.svg")));
SVGWidget *cap = new SVGWidget();
cap->setSVG(SVG::load(assetGlobal("res/ComponentLibrary/SynthTechAlco_cap.svg")));
@@ -293,16 +293,16 @@ struct SynthTechAlco : SVGKnob {

struct Trimpot : SVGKnob {
Trimpot() {
minAngle = -0.75*M_PI;
maxAngle = 0.75*M_PI;
minAngle = float(-0.75*M_PI);
maxAngle = float(0.75*M_PI);
setSVG(SVG::load(assetGlobal("res/ComponentLibrary/Trimpot.svg")));
}
};

struct BefacoBigKnob : SVGKnob {
BefacoBigKnob() {
minAngle = -0.75*M_PI;
maxAngle = 0.75*M_PI;
minAngle = float(-0.75*M_PI);
maxAngle = float(0.75*M_PI);
setSVG(SVG::load(assetGlobal("res/ComponentLibrary/BefacoBigKnob.svg")));
}
};
@@ -316,8 +316,8 @@ struct BefacoBigSnapKnob : BefacoBigKnob {

struct BefacoTinyKnob : SVGKnob {
BefacoTinyKnob() {
minAngle = -0.75*M_PI;
maxAngle = 0.75*M_PI;
minAngle = float(-0.75*M_PI);
maxAngle = float(0.75*M_PI);
setSVG(SVG::load(assetGlobal("res/ComponentLibrary/BefacoTinyKnob.svg")));
}
};
@@ -335,8 +335,8 @@ struct BefacoSlidePot : SVGSlider {

struct LEDSlider : SVGSlider {
LEDSlider() {
maxHandlePos = mm2px(Vec(0.738, 0.738).plus(Vec(2, 0)));
minHandlePos = mm2px(Vec(0.738, 22.078).plus(Vec(2, 0)));
maxHandlePos = mm2px(Vec(0.738f, 0.738f).plus(Vec(2, 0)));
minHandlePos = mm2px(Vec(0.738f, 22.078f).plus(Vec(2, 0)));
setSVGs(SVG::load(assetGlobal("res/ComponentLibrary/LEDSlider.svg")), NULL);
}
};
@@ -458,7 +458,7 @@ struct RGBLight : ModuleLightWidget {
template <typename BASE>
struct LargeLight : BASE {
LargeLight() {
this->box.size = mm2px(Vec(5.179, 5.179));
this->box.size = mm2px(Vec(5.179f, 5.179f));
}
};

@@ -466,7 +466,7 @@ struct LargeLight : BASE {
template <typename BASE>
struct MediumLight : BASE {
MediumLight() {
this->box.size = mm2px(Vec(3.176, 3.176));
this->box.size = mm2px(Vec(3.176f, 3.176f));
}
};

@@ -474,7 +474,7 @@ struct MediumLight : BASE {
template <typename BASE>
struct SmallLight : BASE {
SmallLight() {
this->box.size = mm2px(Vec(2.176, 2.176));
this->box.size = mm2px(Vec(2.176f, 2.176f));
}
};

@@ -491,7 +491,7 @@ template <typename BASE>
struct LEDBezelLight : BASE {
LEDBezelLight() {
this->bgColor = COLOR_BLACK_TRANSPARENT;
this->box.size = mm2px(Vec(6.0, 6.0));
this->box.size = mm2px(Vec(6.0f, 6.0f));
}
};



+ 8
- 0
include/global_ui.hpp View File

@@ -87,6 +87,11 @@ struct GlobalUI {
bool bLoadVSTUniqueParamBaseId; // temp. false while cloning ModuleWidget
} app;

struct {
int bnd_icon_image;
int bnd_font;
} blendish;

#ifdef USE_VST2
struct {
volatile int b_close_window;
@@ -136,6 +141,9 @@ struct GlobalUI {
app.bLoadVSTUniqueParamBaseId = true;

blendish.bnd_icon_image = -1;
blendish.bnd_font = -1;

#ifdef USE_VST2
vst2.b_close_window = 0;
vst2.b_hide_window = 0;


+ 133
- 37
include/plugin.hpp View File

@@ -1,9 +1,110 @@
#pragma once
#include "global_pre.hpp"
#include <string>
#include <stdio.h> // debug
#include <list>
#include "tags.hpp"


#define RACK_PLUGIN_INIT_ID_INTERNAL p->slug = TOSTRING(SLUG); p->version = TOSTRING(VERSION)

#ifdef USE_VST2

namespace rack {
struct Plugin;
}

typedef void (*vst2_handle_ui_param_fxn_t) (int uniqueParamId, float normValue);
typedef void (*rack_set_tls_globals_fxn_t) (rack::Plugin *p);

#ifdef RACK_HOST

// Rack host build:

extern void vst2_handle_ui_param (int uniqueParamId, float normValue);

#define RACK_PLUGIN_DECLARE(pluginname)
#define RACK_PLUGIN_INIT(pluginname) extern "C" void init_plugin_##pluginname##(rack::Plugin *p)
#define RACK_PLUGIN_INIT_ID() RACK_PLUGIN_INIT_ID_INTERNAL

#else

// Plugin build:

#ifdef _MSC_VER
#ifdef RACK_PLUGIN_SHARED
#define RACK_PLUGIN_EXPORT extern "C" __declspec(dllexport)
#else
#define RACK_PLUGIN_EXPORT extern "C"
#endif // RACK_PLUGIN_SHARED
#define RACK_TLS __declspec(thread)
#else
#define RACK_PLUGIN_EXPORT extern "C"
#define RACK_TLS __thread
#endif // _MSC_VER

extern vst2_handle_ui_param_fxn_t vst2_handle_ui_param;

#ifndef RACK_PLUGIN_SHARED_LIB_BUILD
#ifdef RACK_PLUGIN_SHARED
// Dynamically loaded plugin build
#define RACK_PLUGIN_DECLARE(pluginname) namespace rack { extern RACK_TLS Plugin *plugin; } extern void __rack_unused_symbol(void)
#ifdef ARCH_WIN
#define JSON_SEED_INIT_EXTERNAL extern "C" extern long seed_initialized;
#else
#define JSON_SEED_INIT_EXTERNAL extern "C" extern volatile char seed_initialized;
#endif
#define RACK_PLUGIN_INIT(pluginname) \
vst2_handle_ui_param_fxn_t vst2_handle_ui_param; \
JSON_SEED_INIT_EXTERNAL \
extern "C" extern volatile uint32_t hashtable_seed; \
namespace rack { \
RACK_TLS Plugin *plugin; \
RACK_TLS Global *global; \
RACK_TLS GlobalUI *global_ui; \
static void loc_set_tls_globals(rack::Plugin *p) { \
plugin = p; \
global = plugin->global; \
global_ui = plugin->global_ui; \
hashtable_seed = p->json.hashtable_seed; \
seed_initialized = p->json.seed_initialized; \
} \
} \
RACK_PLUGIN_EXPORT void init_plugin(rack::Plugin *p)
#define RACK_PLUGIN_INIT_ID() \
rack::plugin = p; \
rack::plugin->set_tls_globals_fxn = &rack::loc_set_tls_globals; \
vst2_handle_ui_param = p->vst2_handle_ui_param_fxn; \
rack::global = p->global; \
rack::global_ui = p->global_ui; \
RACK_PLUGIN_INIT_ID_INTERNAL
#else
// Statically linked plugin build
#define RACK_PLUGIN_DECLARE(pluginname)
#define RACK_PLUGIN_INIT(pluginname) extern "C" void init_plugin_##pluginname##(rack::Plugin *p)
#define RACK_PLUGIN_INIT_ID() RACK_PLUGIN_INIT_ID_INTERNAL
#endif // RACK_PLUGIN_SHARED
#endif // RACK_PLUGIN_SHARED_LIB_BUILD

#endif // RACK_HOST


#else

#define RACK_PLUGIN_DECLARE(pluginname) extern Plugin *plugin
#define RACK_PLUGIN_INIT(pluginname) extern "C" RACK_PLUGIN_EXPORT void init(rack::Plugin *p)
#define RACK_PLUGIN_INIT_ID() plugin = p; RACK_PLUGIN_INIT_ID_INTERNAL

#endif // USE_VST2

#define RACK_PLUGIN_INIT_WEBSITE(url) p->website = url
#define RACK_PLUGIN_INIT_MANUAL(url) p->manual = url

#define RACK_PLUGIN_MODEL_DECLARE(pluginname, modelname) extern Model *create_model_##pluginname##_##modelname##(void)
#define RACK_PLUGIN_MODEL_INIT(pluginname, modelname) Model *create_model_##pluginname##_##modelname##(void)
#define RACK_PLUGIN_MODEL_ADD(pluginname, modelname) p->addModel(create_model_##pluginname##_##modelname##())


namespace rack {


@@ -36,6 +137,34 @@ struct Plugin {
std::string website;
std::string manual;

#ifdef USE_VST2
//
// Set by Rack host (before init_plugin()):
//
vst2_handle_ui_param_fxn_t vst2_handle_ui_param_fxn = NULL;
Global *global = NULL;
GlobalUI *global_ui = NULL;

// Set by Rack host immediately before set_tls_globals_fxn is called:
// (note) must be copied by the plugin or json import won't function properly
struct {
uint32_t hashtable_seed;
#ifdef ARCH_WIN
long seed_initialized;
#else
char seed_initialized;
#endif
} json;

//
// Set by plugin:
// - in init_plugin()
// - called by Rack host in audio thread
// - NULL if this is a statically linked add-on
//
rack_set_tls_globals_fxn_t set_tls_globals_fxn = NULL;
#endif // USE_VST2

virtual ~Plugin();
void addModel(Model *model);
};
@@ -74,9 +203,13 @@ struct Model {
return module;
}
ModuleWidget *createModuleWidget() override {
printf("xxx createModuleWidget: ENTER\n");
TModule *module = new TModule();
printf("xxx createModuleWidget: module=%p\n", module);
TModuleWidget *moduleWidget = new TModuleWidget(module);
printf("xxx createModuleWidget: moduleWidget=%p\n", moduleWidget);
moduleWidget->model = this;
printf("xxx createModuleWidget: LEAVE\n");
return moduleWidget;
}
ModuleWidget *createModuleWidgetNull() override {
@@ -118,43 +251,6 @@ extern std::string gToken;
} // namespace rack


////////////////////
// Implemented by plugin
////////////////////

/** Called once to initialize and return the Plugin instance.
You must implement this in your plugin
*/
#ifdef _MSC_VER
// (note) turns out that VCV plugins don't work when the VCV engine itself is a DLL
// #define RACK_PLUGIN_EXPORT __declspec(dllexport)
#define RACK_PLUGIN_EXPORT
#else
#define RACK_PLUGIN_EXPORT
#endif

#define RACK_PLUGIN_INIT_ID_INTERNAL p->slug = TOSTRING(SLUG); p->version = TOSTRING(VERSION)

#ifdef USE_VST2

#define RACK_PLUGIN_DECLARE(pluginname)
#define RACK_PLUGIN_INIT(pluginname) extern "C" void init_plugin_##pluginname##(rack::Plugin *p)
#define RACK_PLUGIN_INIT_ID() RACK_PLUGIN_INIT_ID_INTERNAL

#else

#define RACK_PLUGIN_DECLARE(pluginname) extern Plugin *plugin
#define RACK_PLUGIN_INIT(pluginname) extern "C" RACK_PLUGIN_EXPORT void init(rack::Plugin *p)
#define RACK_PLUGIN_INIT_ID() plugin = p; RACK_PLUGIN_INIT_ID_INTERNAL

#endif // USE_VST2

#define RACK_PLUGIN_INIT_WEBSITE(url) p->website = url
#define RACK_PLUGIN_INIT_MANUAL(url) p->manual = url

#define RACK_PLUGIN_MODEL_DECLARE(pluginname, modelname) extern Model *create_model_##pluginname##_##modelname##(void)
#define RACK_PLUGIN_MODEL_INIT(pluginname, modelname) Model *create_model_##pluginname##_##modelname##(void)
#define RACK_PLUGIN_MODEL_ADD(pluginname, modelname) p->addModel(create_model_##pluginname##_##modelname##())

// Access helpers for global UI vars
//


+ 0
- 8
include/ui.hpp View File

@@ -263,12 +263,4 @@ struct Scene : OpaqueWidget {
void step() override;
};


////////////////////
// globals
////////////////////

extern Scene *gScene;


} // namespace rack

+ 1
- 1
include/util/math.hpp View File

@@ -132,7 +132,7 @@ inline float crossfade(float a, float b, float frac) {
Assumes that the array at `p` is of length at least floor(x)+1.
*/
inline float interpolateLinear(const float *p, float x) {
int xi = x;
int xi = int(x);
float xf = x - xi;
return crossfade(p[xi], p[xi+1], xf);
}


+ 21
- 9
make.objects View File

@@ -1,4 +1,4 @@
LIB_OBJ= \
COMMON_OBJ= \
dep/jpommier-pffft-29e4f76ac53b/fftpack.o \
dep/jpommier-pffft-29e4f76ac53b/pffft.o \
dep/nanovg/src/nanovg.o \
@@ -38,14 +38,6 @@ LIB_OBJ= \
src/app/WireWidget.o \
src/asset.o \
src/audio.o \
src/Core/AudioInterface.o \
src/Core/Blank.o \
src/Core/Core.o \
src/Core/MIDICCToCVInterface.o \
src/Core/MIDIToCVInterface.o \
src/Core/MIDITriggerToCVInterface.o \
src/Core/Notes.o \
src/Core/QuadMIDIToCVInterface.o \
src/dsp/minblep.o \
src/engine.o \
src/keyboard.o \
@@ -91,6 +83,26 @@ LIB_OBJ= \
src/window.o \
src/vstmidi.o

HOST_OBJ= \
src/Core/AudioInterface.o \
src/Core/Blank.o \
src/Core/Core.o \
src/Core/MIDICCToCVInterface.o \
src/Core/MIDIToCVInterface.o \
src/Core/MIDITriggerToCVInterface.o \
src/Core/Notes.o \
src/Core/QuadMIDIToCVInterface.o

LIB_OBJ= \
$(COMMON_OBJ) \
$(HOST_OBJ)

LIB_OBJ_WIN= \
src/util/dirent_win32/dirent.o

SHARED_LIB_OBJ= \
$(COMMON_OBJ)

MAIN_OBJ= \
src/vst2_main.o \
src/main.o


+ 5
- 0
makefile.msvc View File

@@ -12,6 +12,10 @@ bin: vst
lib:
make -f makefile_lib.msvc bin -j $(NUM_JOBS)

.PHONY:
shared_lib:
make -f makefile_shared_lib.msvc bin -j $(NUM_JOBS) && mv Rack_shared.lib plugins/

.PHONY:
vst: lib
rm -f src/vst2_main.o
@@ -26,6 +30,7 @@ vst: lib

clean:
make -f makefile_lib.msvc clean
make -f makefile_shared_lib.msvc clean
make -f makefile_vst_instr.msvc clean
make -f makefile_vst_effect.msvc clean


+ 1
- 1
makefile_lib.msvc View File

@@ -22,6 +22,6 @@ PLAF_OBJ=

include make.objects

ALL_OBJ=$(LIB_OBJ)
ALL_OBJ=$(LIB_OBJ) $(LIB_OBJ_WIN)

include dep/yac/staticlib_msvc.mk

+ 28
- 0
makefile_shared_lib.msvc View File

@@ -0,0 +1,28 @@
#
# Makefile for VCV rack lib + Microsoft Visual C++ 2003 / 2005 / 2008 / 2017 ToolKit
# (for linking with dynamically loaded plugins)
#
#

include dep/yac/install_msvc.mk

TARGET_BASENAME=Rack_shared

EXTRAFLAGS= -DVERSION=0.6.1 -DARCH_WIN -D_USE_MATH_DEFINES -DRACK_PLUGIN -DRACK_PLUGIN_SHARED -DUSE_VST2 -DVST2_REPARENT_WINDOW_HACK -Iinclude/ -Idep/include
EXTRAFLAGS+= -DRACK_PLUGIN_SHARED_LIB_BUILD

ifeq ($(BUILD_64),y)
EXTRALIBS= -LIBPATH:dep/lib/msvc/x64
else
EXTRALIBS= -LIBPATH:dep/lib/msvc/x86
endif

EXTRALIBS+= jansson.lib glew.lib glfw.lib gdi32.lib opengl32.lib gdi32.lib user32.lib kernel32.lib Comdlg32.lib Shell32.lib ws2_32.lib winmm.lib

PLAF_OBJ=

include make.objects

ALL_OBJ=$(SHARED_LIB_OBJ) $(LIB_OBJ_WIN)

include dep/yac/staticlib_msvc.mk

+ 4
- 0
plugins/build_shared_plugin_post.mk View File

@@ -0,0 +1,4 @@

#ifdef ARCH_WIN
include ../../../../dep/yac/sharedlib_msvc.mk
#endif

+ 19
- 0
plugins/build_shared_plugin_pre.mk View File

@@ -0,0 +1,19 @@
# called from plugin directory (plugins/community/repos/<pluginname>/)
#
#include ../../../../arch.mk
#ifdef ARCH_WIN
include ../../../../dep/yac/install_msvc.mk
#endif

TARGET_BASENAME=$(SLUG)

EXTRAFLAGS+= -DVERSION=0.6.1 -D_USE_MATH_DEFINES -DUSE_VST2 -DRACK_PLUGIN -DRACK_PLUGIN_SHARED -DSLUG=$(SLUG) -I../../../../include/ -I../../../../dep/include -Idep/include
EXTRAFLAGS+=

EXTRALIBS+= ../../../Rack_shared.lib

PLAF_OBJ+=

#ifdef ARCH_WIN
include ../../../build_plugin_msvc_pre.mk
#endif

+ 121
- 0
plugins/community/repos/Template_shared/LICENSE.txt View File

@@ -0,0 +1,121 @@
Creative Commons Legal Code

CC0 1.0 Universal

CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
HEREUNDER.

Statement of Purpose

The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator
and subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").

Certain owners wish to permanently relinquish those rights to a Work for
the purpose of contributing to a commons of creative, cultural and
scientific works ("Commons") that the public can reliably and without fear
of later claims of infringement build upon, modify, incorporate in other
works, reuse and redistribute as freely as possible in any form whatsoever
and for any purposes, including without limitation commercial purposes.
These owners may contribute to the Commons to promote the ideal of a free
culture and the further production of creative, cultural and scientific
works, or to gain reputation or greater distribution for their Work in
part through the use and efforts of others.

For these and/or other purposes and motivations, and without any
expectation of additional consideration or compensation, the person
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
is an owner of Copyright and Related Rights in the Work, voluntarily
elects to apply CC0 to the Work and publicly distribute the Work under its
terms, with knowledge of his or her Copyright and Related Rights in the
Work and the meaning and intended legal effect of CC0 on those rights.

1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not
limited to, the following:

i. the right to reproduce, adapt, distribute, perform, display,
communicate, and translate a Work;
ii. moral rights retained by the original author(s) and/or performer(s);
iii. publicity and privacy rights pertaining to a person's image or
likeness depicted in a Work;
iv. rights protecting against unfair competition in regards to a Work,
subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data
in a Work;
vi. database rights (such as those arising under Directive 96/9/EC of the
European Parliament and of the Council of 11 March 1996 on the legal
protection of databases, and under any national implementation
thereof, including any amended or successor version of such
directive); and
vii. other similar, equivalent or corresponding rights throughout the
world based on applicable law or treaty, and any national
implementations thereof.

2. Waiver. To the greatest extent permitted by, but not in contravention
of, applicable law, Affirmer hereby overtly, fully, permanently,
irrevocably and unconditionally waives, abandons, and surrenders all of
Affirmer's Copyright and Related Rights and associated claims and causes
of action, whether now known or unknown (including existing as well as
future claims and causes of action), in the Work (i) in all territories
worldwide, (ii) for the maximum duration provided by applicable law or
treaty (including future time extensions), (iii) in any current or future
medium and for any number of copies, and (iv) for any purpose whatsoever,
including without limitation commercial, advertising or promotional
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
member of the public at large and to the detriment of Affirmer's heirs and
successors, fully intending that such Waiver shall not be subject to
revocation, rescission, cancellation, termination, or any other legal or
equitable action to disrupt the quiet enjoyment of the Work by the public
as contemplated by Affirmer's express Statement of Purpose.

3. Public License Fallback. Should any part of the Waiver for any reason
be judged legally invalid or ineffective under applicable law, then the
Waiver shall be preserved to the maximum extent permitted taking into
account Affirmer's express Statement of Purpose. In addition, to the
extent the Waiver is so judged Affirmer hereby grants to each affected
person a royalty-free, non transferable, non sublicensable, non exclusive,
irrevocable and unconditional license to exercise Affirmer's Copyright and
Related Rights in the Work (i) in all territories worldwide, (ii) for the
maximum duration provided by applicable law or treaty (including future
time extensions), (iii) in any current or future medium and for any number
of copies, and (iv) for any purpose whatsoever, including without
limitation commercial, advertising or promotional purposes (the
"License"). The License shall be deemed effective as of the date CC0 was
applied by Affirmer to the Work. Should any part of the License for any
reason be judged legally invalid or ineffective under applicable law, such
partial invalidity or ineffectiveness shall not invalidate the remainder
of the License, and in such case Affirmer hereby affirms that he or she
will not (i) exercise any of his or her remaining Copyright and Related
Rights in the Work or (ii) assert any associated claims and causes of
action with respect to the Work, in either case contrary to Affirmer's
express Statement of Purpose.

4. Limitations and Disclaimers.

a. No trademark or patent rights held by Affirmer are waived, abandoned,
surrendered, licensed or otherwise affected by this document.
b. Affirmer offers the Work as-is and makes no representations or
warranties of any kind concerning the Work, express, implied,
statutory or otherwise, including without limitation warranties of
title, merchantability, fitness for a particular purpose, non
infringement, or the absence of latent or other defects, accuracy, or
the present or absence of errors, whether or not discoverable, all to
the greatest extent permissible under applicable law.
c. Affirmer disclaims responsibility for clearing rights of other persons
that may apply to the Work or any use thereof, including without
limitation any person's Copyright and Related Rights in the Work.
Further, Affirmer disclaims responsibility for obtaining any necessary
consents, permissions or other rights required for any use of the
Work.
d. Affirmer understands and acknowledges that Creative Commons is not a
party to this document and has no duty or obligation with respect to
this CC0 or use of the Work.

+ 13
- 0
plugins/community/repos/Template_shared/README.md View File

@@ -0,0 +1,13 @@

# VCV Template plugin

The VCV Template plugin is a starting point for developing your own plugins for VCV Rack.
It implements a simple sine VCO, demonstrating inputs, outputs, parameters, and other concepts.

See https://vcvrack.com/manual/PluginDevelopmentTutorial.html for a development tutorial.

## Contributing

I welcome Issues and Pull Requests to this repository if you have suggestions for improvement.

This template is released into the public domain ([CC0](https://creativecommons.org/publicdomain/zero/1.0/)).

+ 3
- 0
plugins/community/repos/Template_shared/make.objects View File

@@ -0,0 +1,3 @@
ALL_OBJ= \
src/MyModule.o \
src/Template.o

+ 7
- 0
plugins/community/repos/Template_shared/makefile.msvc View File

@@ -0,0 +1,7 @@
SLUG=Template_shared

include ../../../build_shared_plugin_pre.mk

include make.objects

include ../../../build_shared_plugin_post.mk

+ 243
- 0
plugins/community/repos/Template_shared/res/MyModule.svg View File

@@ -0,0 +1,243 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="90"
height="380"
viewBox="0 0 23.812501 100.54167"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="MyModule.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="188.48062"
inkscape:cy="170.63765"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:snap-bbox="true"
inkscape:snap-page="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:window-width="1600"
inkscape:window-height="900"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-196.45832)">
<path
style="opacity:1;vector-effect:none;fill:#f0f0f0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.48607069;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
d="M 0,196.45831 H 23.8125 V 296.99999 H 0 Z"
id="rect817"
inkscape:connector-curvature="0" />
<g
aria-label="My Module"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055563px;line-height:6.61458302px;font-family:DINPro;-inkscape-font-specification:DINPro;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text925"
transform="translate(0,-1.0583333)">
<path
d="m 5.3546533,207.98659 v -2.76296 H 5.0597311 l -0.8770056,1.95968 -0.9002889,-1.95968 H 2.9875144 v 2.76296 h 0.2949222 v -2.09938 l 0.76835,1.66476 h 0.2522361 l 0.7567084,-1.66476 v 2.09938 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path956"
inkscape:connector-curvature="0" />
<path
d="M 7.4478493,206.07735 H 7.1451659 l -0.5199944,1.53282 -0.523875,-1.53282 H 5.7986131 l 0.6868584,1.87043 -0.1358195,0.37254 c -0.062089,0.17462 -0.1202972,0.23671 -0.314325,0.23671 H 5.949955 v 0.24835 h 0.120297 c 0.1358195,0 0.2716389,-0.0349 0.3725334,-0.13193 0.054328,-0.0505 0.097014,-0.1203 0.1358194,-0.22508 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path958"
inkscape:connector-curvature="0" />
<path
d="m 11.220962,207.98659 v -2.76296 H 10.92604 l -0.877006,1.95968 -0.9002887,-1.95968 H 8.853823 v 2.76296 h 0.2949223 v -2.09938 l 0.76835,1.66476 h 0.2522357 l 0.756709,-1.66476 v 2.09938 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path960"
inkscape:connector-curvature="0" />
<path
d="m 13.430574,207.03197 c 0,-0.29492 -0.0388,-0.56268 -0.232833,-0.76059 -0.131939,-0.13194 -0.314325,-0.21731 -0.547159,-0.21731 -0.232833,0 -0.415219,0.0854 -0.547158,0.21731 -0.194028,0.19791 -0.232833,0.46567 -0.232833,0.76059 0,0.29492 0.0388,0.56268 0.232833,0.76059 0.131939,0.13194 0.314325,0.21731 0.547158,0.21731 0.232834,0 0.41522,-0.0854 0.547159,-0.21731 0.194028,-0.19791 0.232833,-0.46567 0.232833,-0.76059 z m -0.2794,0 c 0,0.21343 -0.01164,0.45015 -0.151342,0.58985 -0.08925,0.0892 -0.21343,0.1397 -0.34925,0.1397 -0.135819,0 -0.256116,-0.0504 -0.345369,-0.1397 -0.1397,-0.1397 -0.155222,-0.37642 -0.155222,-0.58985 0,-0.21343 0.01552,-0.45014 0.155222,-0.58984 0.08925,-0.0893 0.20955,-0.1397 0.345369,-0.1397 0.13582,0 0.259998,0.0504 0.34925,0.1397 0.1397,0.1397 0.151342,0.37641 0.151342,0.58984 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path962"
inkscape:connector-curvature="0" />
<path
d="m 15.441855,207.98659 v -2.76296 h -0.2794 v 1.07492 c -0.155223,-0.19791 -0.329848,-0.24448 -0.539398,-0.24448 -0.194027,0 -0.364772,0.066 -0.465666,0.16686 -0.194028,0.19403 -0.232834,0.51224 -0.232834,0.81104 0,0.2988 0.03881,0.61701 0.232834,0.81104 0.100894,0.10089 0.271639,0.16686 0.465666,0.16686 0.20955,0 0.388056,-0.0505 0.543278,-0.25224 v 0.22896 z m -0.2794,-0.95462 c 0,0.37253 -0.06209,0.72955 -0.477309,0.72955 -0.415219,0 -0.481189,-0.35702 -0.481189,-0.72955 0,-0.37253 0.06597,-0.72954 0.481189,-0.72954 0.41522,0 0.477309,0.35701 0.477309,0.72954 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path964"
inkscape:connector-curvature="0" />
<path
d="m 17.622423,207.98659 v -1.90924 h -0.2794 v 1.17581 c 0,0.33373 -0.190147,0.50836 -0.477308,0.50836 -0.287161,0 -0.465667,-0.17075 -0.465667,-0.50836 v -1.17581 h -0.2794 v 1.2185 c 0,0.22119 0.05821,0.40358 0.194028,0.53552 0.116417,0.11641 0.287161,0.1785 0.492831,0.1785 0.21343,0 0.403577,-0.0815 0.539397,-0.23671 v 0.21343 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path966"
inkscape:connector-curvature="0" />
<path
d="m 19.001961,207.98659 v -0.2406 h -0.151342 c -0.194028,0 -0.256116,-0.0931 -0.256116,-0.2794 v -2.24296 h -0.2794 v 2.2546 c 0,0.29105 0.151341,0.50836 0.485069,0.50836 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path968"
inkscape:connector-curvature="0" />
<path
d="m 20.839343,207.1057 v -0.12806 c 0,-0.56656 -0.291042,-0.92357 -0.783872,-0.92357 -0.48507,0 -0.783873,0.36089 -0.783873,0.9779 0,0.67522 0.329848,0.9779 0.83432,0.9779 0.325967,0 0.504472,-0.10089 0.6985,-0.29492 l -0.190147,-0.16687 c -0.151342,0.15135 -0.2794,0.21732 -0.500592,0.21732 -0.364772,0 -0.562681,-0.2406 -0.562681,-0.6597 z m -0.2794,-0.20955 h -1.008945 c 0.0078,-0.15522 0.01552,-0.21343 0.05821,-0.3182 0.07373,-0.17463 0.244475,-0.28717 0.446264,-0.28717 0.201789,0 0.372533,0.11254 0.446264,0.28717 0.04269,0.10477 0.05045,0.16298 0.05821,0.3182 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path970"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Pitch"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:6.61458302px;font-family:DINPro;-inkscape-font-specification:DINPro;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text946"
transform="translate(0,-2.1166665)">
<path
d="m 10.343313,234.08358 c 0,-0.36124 -0.254,-0.58984 -0.6208893,-0.58984 H 8.9745348 v 2.00942 h 0.2144889 v -0.82691 h 0.5334 c 0.3668893,0 0.6208893,-0.23142 0.6208893,-0.59267 z m -0.214489,0 c 0,0.26529 -0.174978,0.40076 -0.4261558,0.40076 H 9.1890237 v -0.79869 h 0.5136445 c 0.2511778,0 0.4261558,0.13264 0.4261558,0.39793 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path973"
inkscape:connector-curvature="0" />
<path
d="m 10.921471,235.50316 v -1.38853 h -0.2032 v 1.38853 z m 0.01411,-1.78365 v -0.2286 h -0.2286 v 0.2286 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path975"
inkscape:connector-curvature="0" />
<path
d="m 11.968251,235.50316 v -0.17498 h -0.107244 c -0.129822,0 -0.189089,-0.0762 -0.189089,-0.2032 v -0.84667 h 0.296333 v -0.15522 h -0.296333 v -0.43462 h -0.2032 v 0.43462 H 11.29374 v 0.15522 h 0.174978 v 0.85232 c 0,0.20602 0.118533,0.37253 0.3556,0.37253 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path977"
inkscape:connector-curvature="0" />
<path
d="m 13.346113,235.31407 -0.138289,-0.13264 c -0.104422,0.11571 -0.186267,0.15804 -0.318911,0.15804 -0.135467,0 -0.248356,-0.0536 -0.321733,-0.15804 -0.06491,-0.0903 -0.09031,-0.19756 -0.09031,-0.37254 0,-0.17498 0.0254,-0.28222 0.09031,-0.37253 0.07338,-0.10442 0.186266,-0.15805 0.321733,-0.15805 0.132644,0 0.214489,0.0395 0.318911,0.15523 l 0.138289,-0.12983 c -0.143933,-0.15522 -0.265289,-0.20602 -0.4572,-0.20602 -0.349956,0 -0.615244,0.23707 -0.615244,0.7112 0,0.47414 0.265288,0.7112 0.615244,0.7112 0.191911,0 0.313267,-0.0508 0.4572,-0.20602 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path979"
inkscape:connector-curvature="0" />
<path
d="m 14.825619,235.50316 v -0.89182 c 0,-0.31327 -0.186267,-0.51365 -0.499534,-0.51365 -0.155222,0 -0.287866,0.0536 -0.389466,0.16934 v -0.77329 h -0.2032 v 2.00942 h 0.2032 v -0.85796 c 0,-0.23989 0.138289,-0.36689 0.347133,-0.36689 0.208844,0 0.338667,0.12418 0.338667,0.36689 v 0.85796 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path981"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="1V/oct"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:6.61458302px;font-family:DINPro;-inkscape-font-specification:DINPro;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text950"
transform="translate(0,-6.0862931)">
<path
d="m 8.7942542,262.66519 v -2.00942 h -0.2032 l -0.3753555,0.32455 v 0.23143 l 0.3753555,-0.3302 v 1.78364 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path984"
inkscape:connector-curvature="0" />
<path
d="m 10.853021,260.65577 h -0.225778 l -0.522111,1.6256 -0.5221108,-1.6256 H 9.3572434 l 0.6603996,2.00942 h 0.174978 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path986"
inkscape:connector-curvature="0" />
<path
d="m 11.88278,260.44692 h -0.200378 l -0.804333,2.42712 h 0.200377 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path988"
inkscape:connector-curvature="0" />
<path
d="m 13.196436,261.97092 c 0,-0.21448 -0.02822,-0.40922 -0.169334,-0.55315 -0.09596,-0.096 -0.2286,-0.15805 -0.397933,-0.15805 -0.169333,0 -0.301978,0.0621 -0.397933,0.15805 -0.141111,0.14393 -0.169334,0.33867 -0.169334,0.55315 0,0.21449 0.02822,0.40923 0.169334,0.55316 0.09595,0.096 0.2286,0.15804 0.397933,0.15804 0.169333,0 0.301978,-0.0621 0.397933,-0.15804 0.141111,-0.14393 0.169334,-0.33867 0.169334,-0.55316 z m -0.2032,0 c 0,0.15523 -0.0085,0.32738 -0.110067,0.42898 -0.06491,0.0649 -0.155222,0.1016 -0.254,0.1016 -0.09878,0 -0.186267,-0.0367 -0.251178,-0.1016 -0.1016,-0.1016 -0.112889,-0.27375 -0.112889,-0.42898 0,-0.15522 0.01129,-0.32737 0.112889,-0.42897 0.06491,-0.0649 0.1524,-0.1016 0.251178,-0.1016 0.09878,0 0.189089,0.0367 0.254,0.1016 0.1016,0.1016 0.110067,0.27375 0.110067,0.42897 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path990"
inkscape:connector-curvature="0" />
<path
d="m 14.625318,262.4761 -0.138289,-0.13264 c -0.104422,0.11571 -0.186267,0.15804 -0.318911,0.15804 -0.135467,0 -0.248356,-0.0536 -0.321733,-0.15804 -0.06491,-0.0903 -0.09031,-0.19756 -0.09031,-0.37254 0,-0.17497 0.0254,-0.28222 0.09031,-0.37253 0.07338,-0.10442 0.186266,-0.15804 0.321733,-0.15804 0.132644,0 0.214489,0.0395 0.318911,0.15522 l 0.138289,-0.12982 c -0.143933,-0.15523 -0.265289,-0.20603 -0.4572,-0.20603 -0.349956,0 -0.615244,0.23707 -0.615244,0.7112 0,0.47414 0.265288,0.7112 0.615244,0.7112 0.191911,0 0.313267,-0.0508 0.4572,-0.20602 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path992"
inkscape:connector-curvature="0" />
<path
d="m 15.546024,262.66519 v -0.17498 H 15.43878 c -0.129822,0 -0.189089,-0.0762 -0.189089,-0.2032 v -0.84666 h 0.296333 v -0.15523 h -0.296333 v -0.43462 h -0.2032 v 0.43462 h -0.174978 v 0.15523 h 0.174978 v 0.85231 c 0,0.20602 0.118533,0.37253 0.3556,0.37253 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path994"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Sine"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:6.61458302px;font-family:DINPro;-inkscape-font-specification:DINPro;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text954"
transform="translate(0,-10.054167)">
<path
d="m 10.714958,289.26526 c 0,-0.16651 -0.05927,-0.3048 -0.169334,-0.39793 -0.08467,-0.0734 -0.1778,-0.11289 -0.366889,-0.14111 l -0.220133,-0.0339 c -0.1044223,-0.0169 -0.2088445,-0.0564 -0.2709334,-0.11006 -0.062089,-0.0536 -0.090311,-0.13265 -0.090311,-0.23143 0,-0.22295 0.1552222,-0.37253 0.4233334,-0.37253 0.211667,0 0.344311,0.0593 0.468489,0.17216 l 0.138289,-0.13829 c -0.172156,-0.15522 -0.341489,-0.22014 -0.598311,-0.22014 -0.3979337,0 -0.643467,0.22578 -0.643467,0.56727 0,0.16087 0.0508,0.28505 0.1524,0.37536 0.087489,0.0762 0.2116666,0.127 0.3697111,0.1524 l 0.2342439,0.0367 c 0.146756,0.0226 0.197556,0.0395 0.262467,0.0959 0.06491,0.0565 0.09596,0.14676 0.09596,0.25118 0,0.23424 -0.180623,0.37253 -0.474134,0.37253 -0.2257774,0 -0.3809996,-0.0536 -0.5475107,-0.22013 l -0.1467556,0.14675 c 0.1890889,0.18909 0.3866445,0.26529 0.6886223,0.26529 0.417689,0 0.694267,-0.21731 0.694267,-0.57009 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path997"
inkscape:connector-curvature="0" />
<path
d="m 11.329893,289.81842 v -1.38853 h -0.2032 v 1.38853 z m 0.01411,-1.78364 v -0.2286 h -0.2286 v 0.2286 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path999"
inkscape:connector-curvature="0" />
<path
d="m 12.935473,289.81842 v -0.889 c 0,-0.16087 -0.04515,-0.29069 -0.143933,-0.38664 -0.08467,-0.0847 -0.206022,-0.12983 -0.3556,-0.12983 -0.155222,0 -0.290689,0.0564 -0.389467,0.16934 v -0.1524 h -0.2032 v 1.38853 h 0.2032 v -0.85513 c 0,-0.24271 0.135467,-0.36971 0.344311,-0.36971 0.208845,0 0.341489,0.12417 0.341489,0.36971 v 0.85513 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path1001"
inkscape:connector-curvature="0" />
<path
d="m 14.494751,289.17778 v -0.0931 c 0,-0.41204 -0.211667,-0.67169 -0.570089,-0.67169 -0.352778,0 -0.570089,0.26247 -0.570089,0.7112 0,0.49107 0.239889,0.7112 0.606778,0.7112 0.237067,0 0.366889,-0.0734 0.508,-0.21449 l -0.138289,-0.12135 c -0.110067,0.11007 -0.2032,0.15804 -0.364067,0.15804 -0.265289,0 -0.409222,-0.17497 -0.409222,-0.47977 z m -0.2032,-0.1524 h -0.733778 c 0.0056,-0.11289 0.01129,-0.15523 0.04233,-0.23143 0.05362,-0.127 0.1778,-0.20884 0.324556,-0.20884 0.146756,0 0.270933,0.0818 0.324556,0.20884 0.03104,0.0762 0.03669,0.11854 0.04233,0.23143 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path1003"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Tutorial"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:6.61458302px;font-family:DINPro;-inkscape-font-specification:DINPro;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text1008">
<path
d="M 8.5614537,289.39941 V 289.2075 H 7.1842093 v 0.19191 h 0.5813778 v 1.81751 H 7.980076 v -1.81751 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1010" />
<path
d="m 9.8262062,291.21692 v -1.38853 h -0.2032 v 0.85513 c 0,0.24271 -0.1382889,0.36971 -0.3471334,0.36971 -0.2088444,0 -0.3386666,-0.12418 -0.3386666,-0.36971 v -0.85513 H 8.7340061 v 0.88617 c 0,0.16087 0.042333,0.29351 0.1411112,0.38947 0.084667,0.0847 0.2088444,0.12982 0.3584222,0.12982 0.1552222,0 0.2935111,-0.0593 0.3922889,-0.17215 v 0.15522 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1012" />
<path
d="m 10.869017,291.21692 v -0.17498 h -0.107244 c -0.129822,0 -0.189089,-0.0762 -0.189089,-0.2032 v -0.84667 h 0.296333 v -0.15522 h -0.296333 v -0.43462 h -0.2032 v 0.43462 h -0.174978 v 0.15522 h 0.174978 v 0.85232 c 0,0.20602 0.118533,0.37253 0.3556,0.37253 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1014" />
<path
d="m 12.31179,290.52265 c 0,-0.21449 -0.02822,-0.40922 -0.169333,-0.55315 -0.09596,-0.096 -0.2286,-0.15805 -0.397934,-0.15805 -0.169333,0 -0.301977,0.0621 -0.397933,0.15805 -0.141111,0.14393 -0.169333,0.33866 -0.169333,0.55315 0,0.21449 0.02822,0.40922 0.169333,0.55316 0.09596,0.096 0.2286,0.15804 0.397933,0.15804 0.169334,0 0.301978,-0.0621 0.397934,-0.15804 0.141111,-0.14394 0.169333,-0.33867 0.169333,-0.55316 z m -0.2032,0 c 0,0.15522 -0.0085,0.32738 -0.110067,0.42898 -0.06491,0.0649 -0.155222,0.1016 -0.254,0.1016 -0.09878,0 -0.186266,-0.0367 -0.251177,-0.1016 -0.1016,-0.1016 -0.112889,-0.27376 -0.112889,-0.42898 0,-0.15522 0.01129,-0.32738 0.112889,-0.42898 0.06491,-0.0649 0.1524,-0.1016 0.251177,-0.1016 0.09878,0 0.189089,0.0367 0.254,0.1016 0.1016,0.1016 0.110067,0.27376 0.110067,0.42898 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1016" />
<path
d="m 13.670117,289.94127 c -0.09878,-0.0988 -0.200378,-0.12982 -0.333022,-0.12982 -0.160867,0 -0.313267,0.0706 -0.389467,0.18627 v -0.16933 h -0.2032 v 1.38853 h 0.2032 v -0.85231 c 0,-0.21167 0.129822,-0.37254 0.333022,-0.37254 0.107245,0 0.163689,0.0254 0.239889,0.1016 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1018" />
<path
d="m 14.138253,291.21692 v -1.38853 h -0.2032 v 1.38853 z m 0.01411,-1.78365 v -0.2286 h -0.2286 v 0.2286 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1020" />
<path
d="m 15.642233,291.21692 v -0.94262 c 0,-0.30198 -0.183445,-0.46285 -0.555978,-0.46285 -0.225778,0 -0.366889,0.0452 -0.491067,0.20602 l 0.138289,0.127 c 0.08184,-0.11571 0.172156,-0.15804 0.349956,-0.15804 0.254,0 0.3556,0.1016 0.3556,0.3048 v 0.13264 h -0.417689 c -0.310445,0 -0.479778,0.15805 -0.479778,0.40076 0,0.11007 0.03669,0.21449 0.104422,0.28222 0.08749,0.0903 0.200378,0.127 0.392289,0.127 0.186267,0 0.287867,-0.0367 0.400756,-0.14958 v 0.13265 z m -0.2032,-0.49107 c 0,0.11571 -0.02258,0.19474 -0.07056,0.23989 -0.08749,0.0847 -0.191911,0.0931 -0.310444,0.0931 -0.220134,0 -0.318912,-0.0762 -0.318912,-0.23706 0,-0.16087 0.1016,-0.24554 0.310445,-0.24554 h 0.389467 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1022" />
<path
d="m 16.628291,291.21692 v -0.17498 h -0.110067 c -0.141111,0 -0.186267,-0.0677 -0.186267,-0.2032 v -1.63124 h -0.2032 v 1.63971 c 0,0.21166 0.110067,0.36971 0.352778,0.36971 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1024" />
</g>
</g>
</svg>

+ 105
- 0
plugins/community/repos/Template_shared/src/MyModule.cpp View File

@@ -0,0 +1,105 @@
#include "Template.hpp"

struct MyModule : Module {
enum ParamIds {
PITCH_PARAM,
NUM_PARAMS
};
enum InputIds {
PITCH_INPUT,
NUM_INPUTS
};
enum OutputIds {
SINE_OUTPUT,
NUM_OUTPUTS
};
enum LightIds {
BLINK_LIGHT,
NUM_LIGHTS
};

float phase = 0.0f;
float blinkPhase = 0.0f;

MyModule() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {}
void step() override;

// For more advanced Module features, read Rack's engine.hpp header file
// - toJson, fromJson: serialization of internal data
// - onSampleRateChange: event triggered by a change of sample rate
// - onReset, onRandomize, onCreate, onDelete: implements special behavior when user clicks these from the context menu
};


void MyModule::step() {
// Implement a simple sine oscillator
float deltaTime = engineGetSampleTime();

// Compute the frequency from the pitch parameter and input
float pitch = params[PITCH_PARAM].value;
pitch += inputs[PITCH_INPUT].value;
pitch = clamp(pitch, -4.0f, 4.0f);
// The default pitch is C4
float freq = 261.626f * powf(2.0f, pitch);

// Accumulate the phase
phase += freq * deltaTime;
if (phase >= 1.0f)
phase -= 1.0f;

// Compute the sine output
float sine = sinf(float(2.0f * M_PI) * phase);
outputs[SINE_OUTPUT].value = 5.0f * sine;

// Blink light at 1Hz
blinkPhase += deltaTime;
if (blinkPhase >= 1.0f)
blinkPhase -= 1.0f;
lights[BLINK_LIGHT].value = (blinkPhase < 0.5f) ? 1.0f : 0.0f;
}


struct MyModuleWidget : ModuleWidget {
MyModuleWidget(MyModule *module) : ModuleWidget(module) {
printf("xxx template_shared: global=%p\n", rack::global);
printf("xxx template_shared: global_ui=%p x\n", rack::global_ui);
printf("xxx template_shared: plugin=%p\n", plugin);

std::shared_ptr<SVG> svg = SVG::load(assetPlugin(plugin, "res/MyModule.svg"));
printf("xxx template_shared: SVG::load() OK\n");

setPanel(svg);

printf("xxx template_shared: setPanel() OK\n");

addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0)));
printf("xxx template_shared: 1 addChild() OK\n");
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0)));
printf("xxx template_shared: 2 addChild() OK\n");
addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
printf("xxx template_shared: 3 addChild() OK\n");
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
printf("xxx template_shared: 4 addChild() OK\n");

addParam(ParamWidget::create<Davies1900hBlackKnob>(Vec(28, 87), module, MyModule::PITCH_PARAM, -3.0, 3.0, 0.0));
printf("xxx template_shared: addParam() OK\n");

addInput(Port::create<PJ301MPort>(Vec(33, 186), Port::INPUT, module, MyModule::PITCH_INPUT));
printf("xxx template_shared: addInput() OK\n");

addOutput(Port::create<PJ301MPort>(Vec(33, 275), Port::OUTPUT, module, MyModule::SINE_OUTPUT));
printf("xxx template_shared: addOutput() OK\n");

addChild(ModuleLightWidget::create<MediumLight<RedLight>>(Vec(41, 59), module, MyModule::BLINK_LIGHT));
printf("xxx template_shared: addChild() OK\n");
}
};

// Specify the Module and ModuleWidget subclass, human-readable
// author name for categorization per plugin, module slug (should never
// change), human-readable module name, and any number of tags
// (found in `include/tags.hpp`) separated by commas.
RACK_PLUGIN_MODEL_INIT(Template_shared, MyModule) {
Model *modelMyModule = Model::create<MyModule, MyModuleWidget>("Template_shared", "MyModule", "My Module", OSCILLATOR_TAG);
return modelMyModule;
}

+ 22
- 0
plugins/community/repos/Template_shared/src/Template.cpp View File

@@ -0,0 +1,22 @@
#include <stdio.h>
#include "Template.hpp"
// extern "C" extern int glfwInit(void);

RACK_PLUGIN_MODEL_DECLARE(Template_shared, MyModule);

RACK_PLUGIN_INIT(Template_shared) {
RACK_PLUGIN_INIT_ID();

RACK_PLUGIN_INIT_WEBSITE("https://<your_website>");
RACK_PLUGIN_INIT_MANUAL("https://<link_to_the_manual>");

// Add all Models defined throughout the plugin
RACK_PLUGIN_MODEL_ADD(Template_shared, MyModule);

// Any other plugin initialization may go here.
// As an alternative, consider lazy-loading assets and lookup tables when your module is created to reduce startup times of Rack.
printf("hello from Template_shared plugin!\n");

// glfwInit();

}

+ 5
- 0
plugins/community/repos/Template_shared/src/Template.hpp View File

@@ -0,0 +1,5 @@
#include "rack.hpp"

using namespace rack;

RACK_PLUGIN_DECLARE(Template_shared);

+ 2
- 2
plugins/community/repos/dBiz/makefile.msvc View File

@@ -1,7 +1,7 @@
SLUG=dBiz

include ../../../build_plugin_pre.mk
include ../../../build_shared_plugin_pre.mk

include make.objects

include ../../../build_plugin_post.mk
include ../../../build_shared_plugin_post.mk

+ 3
- 3
plugins/community/repos/dBiz/src/dBiz.hpp View File

@@ -4,9 +4,9 @@ using namespace rack;

RACK_PLUGIN_DECLARE(dBiz);

#ifdef USE_VST2
#define plugin "dBiz"
#endif // USE_VST2
// // #ifdef USE_VST2
// // #define plugin "dBiz"
// // #endif // USE_VST2

namespace rack_plugin_dBiz {



+ 4
- 0
src/Core/Core.cpp View File

@@ -2,6 +2,8 @@
#include "Core.hpp"
#include "global.hpp"

#ifdef RACK_HOST

RACK_PLUGIN_MODEL_DECLARE(Core, AudioInterface);
RACK_PLUGIN_MODEL_DECLARE(Core, MIDIToCVInterface);
RACK_PLUGIN_MODEL_DECLARE(Core, QuadMIDIToCVInterface);
@@ -23,3 +25,5 @@ RACK_PLUGIN_INIT(Core) {
RACK_PLUGIN_MODEL_ADD(Core, Blank);
RACK_PLUGIN_MODEL_ADD(Core, Notes);
}

#endif // RACK_HOST

+ 2
- 1
src/Core/Core.hpp View File

@@ -1,6 +1,6 @@
#include "rack.hpp"

#ifndef RACK_PLUGIN_SHARED
using namespace rack;

RACK_PLUGIN_INIT(Core);
@@ -53,3 +53,4 @@ struct Grid16MidiWidget : MidiWidget {
}
virtual GridChoice *createGridChoice() {return NULL;}
};
#endif // RACK_PLUGIN_SHARED

+ 10
- 0
src/app/ModuleBrowser.cpp View File

@@ -133,13 +133,23 @@ struct ModelItem : BrowserListItem {
}

void onAction(EventAction &e) override {
printf("xxx vcvrack::ModuleBrowser: model=%p, calling createModuleWidget()\n", model);
#ifdef USE_VST2
if(NULL != model->plugin->set_tls_globals_fxn) {
model->plugin->set_tls_globals_fxn(model->plugin);
}
#endif // USE_VST2
ModuleWidget *moduleWidget = model->createModuleWidget();
printf("xxx vcvrack::ModuleBrowser: moduleWidget=%p\n", moduleWidget);
if (!moduleWidget)
return;
global_ui->app.gRackWidget->addModule(moduleWidget);
printf("xxx vcvrack::ModuleBrowser: addModule() OK\n");
// Move module nearest to the mouse position
moduleWidget->box.pos = global_ui->app.gRackWidget->lastMousePos.minus(moduleWidget->box.size.div(2));
printf("xxx vcvrack::ModuleBrowser: box.pos OK\n");
global_ui->app.gRackWidget->requestModuleBoxNearest(moduleWidget, moduleWidget->box);
printf("xxx vcvrack::ModuleBrowser: requestModuleBoxNearest() OK\n");
}
};



+ 38
- 0
src/app/ModuleWidget.cpp View File

@@ -7,14 +7,27 @@
#include "global_ui.hpp"


#ifdef USE_VST2
extern "C" void glfw_hack_makeContextCurrent(GLFWwindow *handle);
// #include <windows.h>
#endif // USE_VST2


namespace rack {


ModuleWidget::ModuleWidget(Module *module) {
printf("xxx ModuleWidget::ModuleWidget(module=%p) global=%p\n", module, global);
// printf("xxx ModuleWidget::ModuleWidget: GetCurrentThreadId=%d\n", GetCurrentThreadId());
if (module) {
engineAddModule(module);
printf("xxx ModuleWidget::ModuleWidget: engineAddModule OK\n");
}
this->module = module;
// printf("xxx ModuleWidget::ModuleWidget(): bind GL context global_ui->window.gWindow=%p\n", global_ui->window.gWindow);
// glfwMakeContextCurrent(global_ui->window.gWindow);
// // glfw_hack_makeContextCurrent(global_ui->window.gWindow);
printf("xxx ModuleWidget::ModuleWidget(): RETURN\n");
}

ModuleWidget::~ModuleWidget() {
@@ -54,17 +67,27 @@ void ModuleWidget::addParam(ParamWidget *param) {

void ModuleWidget::setPanel(std::shared_ptr<SVG> svg) {
// Remove old panel
#ifdef RACK_PLUGIN_SHARED
printf("xxx ModuleWidget::setPanel<shared>: 1\n");
#else
printf("xxx ModuleWidget::setPanel<host>: 1\n");
#endif
if (panel) {
removeChild(panel);
delete panel;
panel = NULL;
}
// printf("xxx ModuleWidget::setPanel: 2\n");

panel = new SVGPanel();
// printf("xxx ModuleWidget::setPanel: 3\n");
panel->setBackground(svg);
// printf("xxx ModuleWidget::setPanel: 4\n");
addChild(panel);
// printf("xxx ModuleWidget::setPanel: 5\n");

box.size = panel->box.size;
// printf("xxx ModuleWidget::setPanel: 6\n");
}


@@ -132,6 +155,7 @@ void ModuleWidget::fromJson(json_t *rootJ) {
double x, y;
json_unpack(posJ, "[F, F]", &x, &y);
Vec pos = Vec(x, y);
printf("xxx ModuleWidget::fromJson: pos=(%f, %f) posJ=%p rootJ=%p\n", x, y, posJ, rootJ);
if (legacy && legacy <= 1) {
box.pos = pos;
}
@@ -218,23 +242,31 @@ ParamWidget *ModuleWidget::findParamWidgetByParamId(int _paramId) {
}

void ModuleWidget::draw(NVGcontext *vg) {
// printf("xxx ModuleWidget::draw: ENTER this=%p global=%p global_ui=%p\n", this, global, global_ui);
nvgScissor(vg, 0, 0, box.size.x, box.size.y);
// printf("xxx ModuleWidget::draw: 2\n");
Widget::draw(vg);
// printf("xxx ModuleWidget::draw: 3\n");

// CPU meter
if (module && global->gPowerMeter) {
// printf("xxx ModuleWidget::draw: 4b\n");
nvgBeginPath(vg);
// printf("xxx ModuleWidget::draw: 5b\n");
nvgRect(vg,
0, box.size.y - 20,
55, 20);
nvgFillColor(vg, nvgRGBAf(0, 0, 0, 0.5));
nvgFill(vg);

// printf("xxx ModuleWidget::draw: 6b module=%p\n", module);
std::string cpuText = stringf("%.0f mS", module->cpuTime * 1000.f);
// printf("xxx ModuleWidget::draw: 7b\n");
nvgFontFaceId(vg, global_ui->window.gGuiFont->handle);
nvgFontSize(vg, 12);
nvgFillColor(vg, nvgRGBf(1, 1, 1));
nvgText(vg, 10.0, box.size.y - 6.0, cpuText.c_str(), NULL);
// printf("xxx ModuleWidget::draw: 8b\n");

float p = clamp(module->cpuTime, 0.f, 1.f);
nvgBeginPath(vg);
@@ -245,7 +277,10 @@ void ModuleWidget::draw(NVGcontext *vg) {
nvgFill(vg);
}

// printf("xxx ModuleWidget::draw: 4\n");

nvgResetScissor(vg);
// printf("xxx ModuleWidget::draw: LEAVE\n");
}

void ModuleWidget::drawShadow(NVGcontext *vg) {
@@ -379,9 +414,12 @@ struct DeleteMenuItem : MenuItem {
};

Menu *ModuleWidget::createContextMenu() {
printf("xxx ModuleWidget::createContextMenu: ENTER\n");
Menu *menu = global_ui->ui.gScene->createMenu();

MenuLabel *menuLabel = new MenuLabel();
printf("xxx ModuleWidget::createContextMenu: model->author=\"%s\"\n", model->author.c_str());
printf("xxx ModuleWidget::createContextMenu: model->name=\"%s\"\n", model->name.c_str());
menuLabel->text = model->author + " " + model->name + " " + model->plugin->version;
menu->addChild(menuLabel);



+ 3
- 0
src/app/Panel.cpp View File

@@ -5,6 +5,7 @@ namespace rack {


void Panel::draw(NVGcontext *vg) {
// printf("xxx Panel::draw: ENTER\n");
nvgBeginPath(vg);
nvgRect(vg, 0.0, 0.0, box.size.x, box.size.y);

@@ -31,7 +32,9 @@ void Panel::draw(NVGcontext *vg) {
nvgStrokeWidth(vg, 1.0);
nvgStroke(vg);

// printf("xxx Panel::draw: call Widget::draw\n");
Widget::draw(vg);
// printf("xxx Panel::draw: LEAVE\n");
}

} // namespace rack

+ 11
- 0
src/app/RackWidget.cpp View File

@@ -12,6 +12,10 @@
#include "global_ui.hpp"


#ifdef USE_VST2
extern void vst2_set_shared_plugin_tls_globals(void);
#endif // USE_VST2

namespace rack {


@@ -300,6 +304,8 @@ json_t *RackWidget::toJson() {
void RackWidget::fromJson(json_t *rootJ) {
std::string message;

vst2_set_shared_plugin_tls_globals(); // update JSON hashtable seed

// version
std::string version;
json_t *versionJ = json_object_get(rootJ, "version");
@@ -343,6 +349,11 @@ void RackWidget::fromJson(json_t *rootJ) {
}

// Create ModuleWidget
// // #ifdef USE_VST2
// // if(NULL != model->plugin->set_tls_globals_fxn) {
// // model->plugin->set_tls_globals_fxn(model->plugin);
// // }
// // #endif // USE_VST2
ModuleWidget *moduleWidget = model->createModuleWidget();
assert(moduleWidget);
moduleWidget->fromJson(moduleJ);


+ 2
- 0
src/asset.cpp View File

@@ -97,6 +97,8 @@ std::string assetLocal(std::string filename) {


std::string assetPlugin(Plugin *plugin, std::string filename) {
printf("xxx assetPlugin(plugin=%p)\n");
printf("xxx assetPlugin: filename=\"%s\"\n", filename.c_str());
assert(plugin);
return plugin->path + "/" + filename;
}


+ 0
- 4
src/engine.cpp View File

@@ -18,10 +18,6 @@
#include "global_ui.hpp"


#ifdef USE_VST2
extern void vst2_handle_ui_param (int uniqueParamId, float normValue);
#endif // USE_VST2

namespace rack {




+ 65
- 9
src/plugin.cpp View File

@@ -17,7 +17,9 @@
#include <sys/param.h> // for MAXPATHLEN
#include <fcntl.h>
#include <dirent.h>
#endif
#else
#include "util/dirent_win32/dirent.h"
#endif // YAC_POSIX

#include <thread>
#include <stdexcept>
@@ -46,7 +48,9 @@ namespace rack {
typedef void (*InitCallback)(Plugin *);

#ifdef USE_VST2
#ifndef RACK_PLUGIN
static void vst2_load_static_rack_plugins(void);
#endif // RACK_PLUGIN
#endif // USE_VST2


@@ -67,6 +71,7 @@ void Plugin::addModel(Model *model) {
////////////////////

static bool loadPlugin(std::string path) {
#ifdef RACK_HOST
std::string libraryFilename;
#if ARCH_LIN
libraryFilename = path + "/" + "plugin.so";
@@ -108,10 +113,15 @@ static bool loadPlugin(std::string path) {

// Call plugin's init() function
InitCallback initCallback;
#ifdef USE_VST2
#define init_symbol_name "init_plugin"
#else
#define init_symbol_name "init"
#endif // USE_VST2
#if ARCH_WIN
initCallback = (InitCallback) GetProcAddress(handle, "init");
initCallback = (InitCallback) GetProcAddress(handle, init_symbol_name);
#else
initCallback = (InitCallback) dlsym(handle, "init");
initCallback = (InitCallback) dlsym(handle, init_symbol_name);
#endif
if (!initCallback) {
warn("Failed to read init() symbol in %s", libraryFilename.c_str());
@@ -122,6 +132,13 @@ static bool loadPlugin(std::string path) {
Plugin *plugin = new Plugin();
plugin->path = path;
plugin->handle = handle;
#ifdef USE_VST2
#ifdef RACK_HOST
plugin->vst2_handle_ui_param_fxn = &vst2_handle_ui_param;
plugin->global = global;
plugin->global_ui = global_ui;
#endif // RACK_HOST
#endif // USE_VST2
initCallback(plugin);

// Reject plugin if slug already exists
@@ -137,6 +154,10 @@ static bool loadPlugin(std::string path) {
global->plugin.gPlugins.push_back(plugin);
info("Loaded plugin %s %s from %s", plugin->slug.c_str(), plugin->version.c_str(), libraryFilename.c_str());

#else
(void)path;
#endif // RACK_HOST

return true;
}

@@ -231,18 +252,25 @@ static bool syncPlugin(std::string slug, json_t *manifestJ, bool dryRun) {
}

static void loadPlugins(std::string path) {
#ifdef RACK_HOST
std::string message;
for (std::string pluginPath : systemListEntries(path)) {
if (!systemIsDirectory(pluginPath))
continue;
if (!loadPlugin(pluginPath)) {
#ifndef USE_VST2
// (note) skip message (some plugins are linked statically in VST2 build)
message += stringf("Could not load plugin %s\n", pluginPath.c_str());
#endif // USE_VST2
}
}
if (!message.empty()) {
message += "See log for details.";
osdialog_message(OSDIALOG_WARNING, OSDIALOG_OK, message.c_str());
}
#else
(void)path;
#endif // RACK_HOST
}

#ifndef USE_VST2
@@ -349,6 +377,7 @@ static void extractPackages(std::string path) {

void pluginInit(bool devMode) {
tagsInit();
#ifdef RACK_HOST

// Load core
// This function is defined in core.cpp
@@ -356,11 +385,14 @@ void pluginInit(bool devMode) {
init_plugin_Core(corePlugin);
global->plugin.gPlugins.push_back(corePlugin);

#ifndef USE_VST2
// Init statically linked plugins
vst2_load_static_rack_plugins();

// Get local plugins directory
std::string localPlugins = assetLocal("plugins");
mkdir(localPlugins.c_str(), 0755);

#ifndef USE_VST2
if (!devMode) {
// Copy Fundamental package to plugins directory if folder does not exist
std::string fundamentalSrc = assetGlobal("Fundamental.zip");
@@ -370,16 +402,17 @@ void pluginInit(bool devMode) {
systemCopy(fundamentalSrc, fundamentalDest);
}
}
#endif // USE_VST2

// Extract packages and load plugins
#ifndef USE_VST2
extractPackages(localPlugins);
#endif // USE_VST2

// Load/init dynamically loaded plugins
loadPlugins(localPlugins);

#else
vst2_load_static_rack_plugins();
#endif // USE_VST2
#endif // RACK_HOST
}

void pluginDestroy() {
@@ -567,6 +600,7 @@ Model *pluginGetModel(std::string pluginSlug, std::string modelSlug) {


#ifdef USE_VST2
#ifndef RACK_PLUGIN
extern "C" {
extern void init_plugin_Alikins (rack::Plugin *p);
extern void init_plugin_AS (rack::Plugin *p);
@@ -577,7 +611,7 @@ extern void init_plugin_Bidoo (rack::Plugin *p);
extern void init_plugin_Bogaudio (rack::Plugin *p);
// extern void init_plugin_BOKONTEPByteBeatMachine (rack::Plugin *p); // unstable
extern void init_plugin_cf (rack::Plugin *p);
extern void init_plugin_dBiz (rack::Plugin *p);
//extern void init_plugin_dBiz (rack::Plugin *p); // now a DLL (13Jul2018)
extern void init_plugin_DHE_Modules (rack::Plugin *p);
extern void init_plugin_DrumKit (rack::Plugin *p);
extern void init_plugin_ErraticInstruments (rack::Plugin *p);
@@ -649,7 +683,7 @@ void vst2_load_static_rack_plugins(void) {
vst2_load_static_rack_plugin("Bogaudio", &init_plugin_Bogaudio);
// vst2_load_static_rack_plugin("BOKONTEPByteBeatMachine", &init_plugin_BOKONTEPByteBeatMachine);
vst2_load_static_rack_plugin("cf", &init_plugin_cf);
vst2_load_static_rack_plugin("dBiz", &init_plugin_dBiz);
// vst2_load_static_rack_plugin("dBiz", &init_plugin_dBiz); // now a DLL (13Jul2018)
vst2_load_static_rack_plugin("DHE-Modules", &init_plugin_DHE_Modules);
vst2_load_static_rack_plugin("DrumKit", &init_plugin_DrumKit);
vst2_load_static_rack_plugin("ErraticInstruments", &init_plugin_ErraticInstruments);
@@ -684,12 +718,34 @@ void vst2_load_static_rack_plugins(void) {
vst2_load_static_rack_plugin("Valley", &init_plugin_Valley);
// vst2_load_static_rack_plugin("VultModules", &init_plugin_VultModules);
}
#endif // RACK_PLUGIN
#endif // USE_VST2

} // namespace rack

using namespace rack;

#ifdef USE_VST2
#ifdef ARCH_WIN
extern "C" extern long seed_initialized;
#else
extern "C" extern volatile char seed_initialized;
#endif // ARCH_WIN
extern "C" extern volatile uint32_t hashtable_seed;
void vst2_set_shared_plugin_tls_globals(void) {
// Called in audio thread (see vst2_main.cpp:VSTPluginProcessReplacingFloat32())
for(Plugin *p : global->plugin.gPlugins) {
if(NULL != p->set_tls_globals_fxn) {
// printf("xxx vcvrack: calling p->set_tls_globals_fxn() global=%p\n", p->global);
p->json.hashtable_seed = hashtable_seed;
p->json.seed_initialized = seed_initialized;
p->set_tls_globals_fxn(p);
// printf("xxx vcvrack: calling p->set_tls_globals_fxn() OK\n");
}
}
}
#endif // USE_VST2

RackScene *rack_plugin_ui_get_rackscene(void) {
#ifdef USE_VST2
return rack::global_ui->app.gRackScene;


+ 1
- 0
src/ui/Menu.cpp View File

@@ -45,6 +45,7 @@ void Menu::step() {
}

void Menu::draw(NVGcontext *vg) {
// printf("xxx Menu::draw: box.size=(%f; %f)\n", box.size.x, box.size.y);
bndMenuBackground(vg, 0.0, 0.0, box.size.x, box.size.y, BND_CORNER_NONE);
Widget::draw(vg);
}


+ 4
- 1
src/ui/MenuLabel.cpp View File

@@ -8,14 +8,17 @@ namespace rack {


void MenuLabel::draw(NVGcontext *vg) {
bndMenuLabel(vg, 0.0, 0.0, box.size.x, box.size.y, -1, text.c_str());
// printf("xxx drawMenuLabel: text=\"%s\" box.size=(%f; %f)\n", text.c_str(), box.size.x, box.size.y);
bndMenuLabel(vg, 0.0, 0.0, box.size.x, box.size.y, -1, text.c_str());
}

void MenuLabel::step() {
// Add 10 more pixels because Retina measurements are sometimes too small
const float rightPadding = 10.0;
// HACK use gVg from the window.
// printf("xxx MenuLabel::step: x bndLabelWidth text=\"%s\"\n", text.c_str());
box.size.x = bndLabelWidth(global_ui->window.gVg, -1, text.c_str()) + rightPadding;
// printf("xxx MenuLabel::step: => bndLabelWidth = %f\n", box.size.x);
Widget::step();
}



+ 1
- 0
src/ui/Scene.cpp View File

@@ -24,6 +24,7 @@ Menu *Scene::createMenu() {
MenuOverlay *overlay = new MenuOverlay();
Menu *menu = new Menu();
menu->box.pos = global_ui->window.gMousePos;
printf("xxx Scene::createMenu: box.size=(%f; %f)\n", box.size.x, box.size.y);

overlay->addChild(menu);
global_ui->ui.gScene->setOverlay(overlay);


+ 143
- 0
src/util/dirent_win32/POSIX Directory Browsing API for Win32.html View File

@@ -0,0 +1,143 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>POSIX Directory Browsing API for Win32</title>
<meta name="Author" content="Kevlin Henney">
<meta name="Generator" content="Kevlin Henney"><!-- ;-) -->
<meta name="Classification" content="Documentation">
</head>

<body>
<h1>POSIX Directory Browsing API for Windows</h1>
The functions and types specified in POSIX for iterating over directory
entries have been defined here as wrappers for porting to and common use on
Windows platforms. The values of <tt>errno</tt> set in the event of errors
are the most significant difference between the POSIX definition and the
wrapper API.
<p>
In addition to this documentation file, the software is provided in the
<a href="http://www.two-sdg.demon.co.uk/curbralan/code/dirent/dirent.h"><tt>dirent.h</tt></a> header file and the
<a href="http://www.two-sdg.demon.co.uk/curbralan/code/dirent/dirent.c"><tt>dirent.c</tt></a> C source file. To use the API
ensure that the path to the <tt>dirent.h</tt> header is either somewhere
standard or is provided to the compiler as an additional option. Ensure also
that the <tt>dirent.c</tt> file is compiled and the object file is either
referenced explicitly in the link or included in a referenced library. The
source code also compiles cleanly as C++, but it retains C linkage.
</p><p>

</p><hr>
<h2><tt>&lt;dirent.h&gt;</tt></h2>
<font size="+1">
<ul>
<pre>typedef ... DIR;

struct dirent
{
char *d_name;
};

DIR *<a href="#opendir">opendir</a>(const char *name);
int <a href="#closedir">closedir</a>(DIR *dir);
struct dirent *<a href="#readdir">readdir</a>(DIR *dir);
void <a href="#rewinddir">rewinddir</a>(DIR *dir);
</pre>
</ul>
</font>

<hr>
<a name="opendir"><h2><tt>DIR *opendir(const char *name);</tt></h2></a>
<h4>Description</h4>
<ul>
The <tt>opendir</tt> function opens the directory specified by
<tt>name</tt>, which may use either <tt>/</tt> or <tt>\</tt> as a
directory separator but should not contain any wildcards. On success
it associates a <tt>DIR</tt> stream with the open directory. A non-null
<tt>DIR</tt> stream may be used in subsequent calls to
<a href="#readdir">readdir</a>, <a href="#rewinddir">rewinddir</a> and
<a href="#closedir">closedir</a>.
<p>
A successful result will position the <tt>DIR</tt> stream at the first
directory entry, ready for reading. Note that a truly empty directory
(one without even <tt>.</tt> or <tt>..</tt> entries) will not open
successfully.
</p></ul>
<h4>Returns</h4>
<ul>
A pointer to the <tt>DIR</tt> structure for the opened directory on
success, otherwise null on failure.
</ul>
<h4>Errors</h4>
<ul>
<tt>ENOENT&nbsp;&nbsp;&nbsp;</tt>No such directory.<br>
<tt>EINVAL&nbsp;&nbsp;&nbsp;</tt>Invalid argument or directory name.<br>
<tt>ENOMEM&nbsp;&nbsp;&nbsp;</tt>Not enough memory to perform the operation.
</ul>

<hr>
<a name="closedir"><h2><tt>int closedir(DIR *dir);</tt></h2></a>
<h4>Description</h4>
<ul>
The <tt>closedir</tt> function closes the directory stream associated with
<tt>dir</tt>, freeing resources as necessary and invalidating the
<tt>dir</tt> pointer.
</ul>
<h4>Returns</h4>
<ul>
Returns <tt>0</tt> on successful completion, otherwise <tt>-1</tt>.
</ul>
<h4>Errors</h4>
<ul>
<tt>EBADF&nbsp;&nbsp;&nbsp;&nbsp;</tt>Invalid directory stream.
</ul>

<hr>
<a name="readdir"><h2><tt>struct dirent *readdir(DIR *dir);</tt></h2></a>
<h4>Description</h4>
<ul>
The <tt>readdir</tt> function is used to iterate through the directory
stream <tt>dir</tt>. It advances it one entry at a time, details of which
it returns as its result.
<p>
On NTFS and FAT file systems, except for drive root directories, the caller
is guaranteed that the <tt>.</tt> and <tt>..</tt> entries will be included
in the directory stream. On FATX file systems the <tt>.</tt> and
<tt>..</tt> entries are not included.
</p></ul>
<h4>Returns</h4>
<ul>
Returns a pointer to the directory details on success, in which
<tt>d_name</tt> is the file name of the current entry, otherwise null
on error or end of stream.
</ul>
<h4>Errors</h4>
<ul>
<tt>ENOENT&nbsp;&nbsp;&nbsp;</tt>No more entries.<br>
<tt>EBADF&nbsp;&nbsp;&nbsp;&nbsp;</tt>Invalid directory stream.
</ul>

<hr>
<a name="rewinddir"><h2><tt>void rewinddir(DIR *dir);</tt></h2></a>
<h4>Description</h4>
<ul>
The <tt>rewindir</tt> function can be used to reset the directory stream
<tt>dir</tt> to the start. Sensible results cannot be guaranteed if the
directory name used in the initial call to <tt>opendir</tt> was a
relative path name and the program has since changed its current working
directory.
</ul>
<h4>Returns</h4>
<ul>
No error status is returned.
</ul>
<h4>Errors</h4>
<ul>
<tt>EBADF&nbsp;&nbsp;&nbsp;&nbsp;</tt>Invalid directory stream.
</ul>

<hr><p>
</p><div align="right"><i><font size="-1">
© Copyright <a href="mailto:kevlin@acm.org">Kevlin Henney</a>
</font></i></div>


</body></html>

+ 148
- 0
src/util/dirent_win32/dirent.c View File

@@ -0,0 +1,148 @@
/*

Implementation of POSIX directory browsing functions and types for Win32.

Author: Kevlin Henney (kevlin@acm.org, kevlin@curbralan.com)
History: Created March 1997. Updated June 2003 and July 2012.
Rights: See end of file.

*/

#include "dirent.h"
#include <errno.h>
#include <io.h> /* _findfirst and _findnext set errno iff they return -1 */
#include <stdlib.h>
#include <string.h>

#ifdef __cplusplus
extern "C"
{
#endif

typedef ptrdiff_t handle_type; /* C99's intptr_t not sufficiently portable */

struct DIR
{
handle_type handle; /* -1 for failed rewind */
struct _finddata_t info;
struct dirent result; /* d_name null iff first time */
char *name; /* null-terminated char string */
};

DIR *opendir(const char *name)
{
DIR *dir = 0;

if(name && name[0])
{
size_t base_length = strlen(name);
const char *all = /* search pattern must end with suitable wildcard */
strchr("/\\", name[base_length - 1]) ? "*" : "/*";

if((dir = (DIR *) malloc(sizeof *dir)) != 0 &&
(dir->name = (char *) malloc(base_length + strlen(all) + 1)) != 0)
{
strcat(strcpy(dir->name, name), all);

if((dir->handle =
(handle_type) _findfirst(dir->name, &dir->info)) != -1)
{
dir->result.d_name = 0;
}
else /* rollback */
{
free(dir->name);
free(dir);
dir = 0;
}
}
else /* rollback */
{
free(dir);
dir = 0;
errno = ENOMEM;
}
}
else
{
errno = EINVAL;
}

return dir;
}

int closedir(DIR *dir)
{
int result = -1;

if(dir)
{
if(dir->handle != -1)
{
result = _findclose(dir->handle);
}

free(dir->name);
free(dir);
}

if(result == -1) /* map all errors to EBADF */
{
errno = EBADF;
}

return result;
}

struct dirent *readdir(DIR *dir)
{
struct dirent *result = 0;

if(dir && dir->handle != -1)
{
if(!dir->result.d_name || _findnext(dir->handle, &dir->info) != -1)
{
result = &dir->result;
result->d_name = dir->info.name;
}
}
else
{
errno = EBADF;
}

return result;
}

void rewinddir(DIR *dir)
{
if(dir && dir->handle != -1)
{
_findclose(dir->handle);
dir->handle = (handle_type) _findfirst(dir->name, &dir->info);
dir->result.d_name = 0;
}
else
{
errno = EBADF;
}
}

#ifdef __cplusplus
}
#endif

/*

Copyright Kevlin Henney, 1997, 2003, 2012. All rights reserved.

Permission to use, copy, modify, and distribute this software and its
documentation for any purpose is hereby granted without fee, provided
that this copyright and permissions notice appear in all copies and
derivatives.
This software is supplied "as is" without express or implied warranty.

But that said, if there are any problems please get in touch.

*/

+ 50
- 0
src/util/dirent_win32/dirent.h View File

@@ -0,0 +1,50 @@
#ifndef DIRENT_INCLUDED
#define DIRENT_INCLUDED

/*

Declaration of POSIX directory browsing functions and types for Win32.

Author: Kevlin Henney (kevlin@acm.org, kevlin@curbralan.com)
History: Created March 1997. Updated June 2003.
Rights: See end of file.
*/

#ifdef __cplusplus
extern "C"
{
#endif

typedef struct DIR DIR;

struct dirent
{
char *d_name;
};

DIR *opendir(const char *);
int closedir(DIR *);
struct dirent *readdir(DIR *);
void rewinddir(DIR *);

/*

Copyright Kevlin Henney, 1997, 2003. All rights reserved.

Permission to use, copy, modify, and distribute this software and its
documentation for any purpose is hereby granted without fee, provided
that this copyright and permissions notice appear in all copies and
derivatives.
This software is supplied "as is" without express or implied warranty.

But that said, if there are any problems please get in touch.

*/

#ifdef __cplusplus
}
#endif

#endif

+ 8
- 0
src/util/logger.cpp View File

@@ -9,6 +9,7 @@ namespace rack {


void loggerInit(bool devMode) {
#ifdef RACK_HOST
global->logger.startTime = std::chrono::high_resolution_clock::now();
if (devMode) {
global->logger.logFile = stderr;
@@ -17,12 +18,15 @@ void loggerInit(bool devMode) {
std::string logFilename = assetLocal("log.txt");
global->logger.logFile = fopen(logFilename.c_str(), "w");
}
#endif // RACK_HOST
}

void loggerDestroy() {
#ifdef RACK_HOST
if (global->logger.logFile != stderr) {
fclose(global->logger.logFile);
}
#endif // RACK_HOST
}

static const char* const loggerText[] = {
@@ -40,6 +44,7 @@ static const int loggerColor[] = {
};

static void loggerLogVa(LoggerLevel level, const char *file, int line, const char *format, va_list args) {
#ifdef RACK_HOST
auto nowTime = std::chrono::high_resolution_clock::now();
int duration = std::chrono::duration_cast<std::chrono::milliseconds>(nowTime - global->logger.startTime).count();
if (global->logger.logFile == stderr)
@@ -52,13 +57,16 @@ static void loggerLogVa(LoggerLevel level, const char *file, int line, const cha
printf("\n"); // xxx
fprintf(global->logger.logFile, "\n");
fflush(global->logger.logFile);
#endif // RACK_HOST
}

void loggerLog(LoggerLevel level, const char *file, int line, const char *format, ...) {
#ifdef RACK_HOST
va_list args;
va_start(args, format);
loggerLogVa(level, file, line, format, args);
va_end(args);
#endif // RACK_HOST
}

/** Deprecated. Included for ABI compatibility */


+ 16
- 10
src/util/system.cpp View File

@@ -4,6 +4,8 @@
#ifdef YAC_POSIX
#include <dirent.h>
#include <sys/stat.h>
#else
#include "dirent_win32/dirent.h"
#endif // YAC_POSIX

#if ARCH_WIN
@@ -21,7 +23,6 @@ namespace rack {

std::vector<std::string> systemListEntries(std::string path) {
std::vector<std::string> filenames;
#ifndef SKIP_SYSTEM_FXNS
DIR *dir = opendir(path.c_str());
if (dir) {
struct dirent *d;
@@ -33,7 +34,6 @@ std::vector<std::string> systemListEntries(std::string path) {
}
closedir(dir);
}
#endif
return filenames;
}

@@ -47,25 +47,31 @@ bool systemExists(std::string path) {
}

bool systemIsFile(std::string path) {
#ifndef SKIP_SYSTEM_FXNS
#ifdef ARCH_WIN
DWORD dwAttrib = ::GetFileAttributes(path.c_str());
return
(dwAttrib != INVALID_FILE_ATTRIBUTES) &&
(0 == (dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) ;
#else
struct stat statbuf;
if (stat(path.c_str(), &statbuf))
return false;
return S_ISREG(statbuf.st_mode);
#else
return false;
#endif // SKIP_SYSTEM_FXNS
#endif // ARCH_WIN
}

bool systemIsDirectory(std::string path) {
#ifndef SKIP_SYSTEM_FXNS
#ifdef ARCH_WIN
DWORD dwAttrib = ::GetFileAttributes(path.c_str());
return
(dwAttrib != INVALID_FILE_ATTRIBUTES) &&
(0 != (dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) ;
#else
struct stat statbuf;
if (stat(path.c_str(), &statbuf))
return false;
return S_ISDIR(statbuf.st_mode);
#else
return false;
#endif // SKIP_SYSTEM_FXNS
#endif // ARCH_WIN
}

void systemCopy(std::string srcPath, std::string destPath) {


+ 14
- 21
src/vst2_main.cpp View File

@@ -16,7 +16,7 @@
/// limitations under the License.
///
/// created: 25Jun2018
/// changed: 26Jun2018, 27Jun2018, 29Jun2018, 01Jul2018, 02Jul2018, 06Jul2018
/// changed: 26Jun2018, 27Jun2018, 29Jun2018, 01Jul2018, 02Jul2018, 06Jul2018, 13Jul2018
///
///
///
@@ -56,6 +56,7 @@ extern void vst2_queue_param (int uniqueParamId, float normValue);
extern void vst2_handle_queued_params (void);
extern float vst2_get_param (int uniqueParamId);
extern void vst2_get_param_name (int uniqueParamId, char *s, int sMaxLen);
extern void vst2_set_shared_plugin_tls_globals (void);


#include "../include/window.hpp"
@@ -830,6 +831,8 @@ static DWORD WINAPI vst2_ui_thread_entry(VSTPluginWrapper *_wrapper) {

_wrapper->b_thread_started = YAC_TRUE;

vst2_set_shared_plugin_tls_globals();

while(_wrapper->b_thread_running || _wrapper->b_queued_destroy_editor || _wrapper->queued_load_patch.addr)
{
// printf("xxx vstrack_plugin<ui>: idle loop\n");
@@ -1001,6 +1004,7 @@ void VSTPluginProcessReplacingFloat32(VSTPlugin *vstPlugin,
wrapper->lockAudio();
wrapper->setGlobals();
vst2_set_shared_plugin_tls_globals();
// // rack::global->engine.vipMutex.lock();
rack::global->engine.mutex.lock();
rack::global->vst2.last_seen_num_frames = sUI(sampleFrames);
@@ -1014,17 +1018,18 @@ void VSTPluginProcessReplacingFloat32(VSTPlugin *vstPlugin,
sUI i;
sUI k = 0u;

if(wrapper->b_processing)
// Clear output buffers
// (note) AudioInterface instances accumulate samples in the output buffer
for(i = 0u; i < uint32_t(sampleFrames); i++)
{
// Clear output buffers
// (note) AudioInterface instances accumulate samples in the output buffer
for(i = 0u; i < uint32_t(sampleFrames); i++)
for(chIdx = 0u; chIdx < NUM_OUTPUTS; chIdx++)
{
for(chIdx = 0u; chIdx < NUM_OUTPUTS; chIdx++)
{
outputs[chIdx][i] = 0.0f;
}
outputs[chIdx][i] = 0.0f;
}
}

if(1 && wrapper->b_processing)
{

#ifdef HAVE_WINDOWS
_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);
@@ -1032,18 +1037,6 @@ void VSTPluginProcessReplacingFloat32(VSTPlugin *vstPlugin,

vst2_engine_process(inputs, outputs, sampleFrames);
}
else
{
// Not processing, output silence
// printf("xxx vstrack_plugin: output silence\n");
for(i = 0u; i < uint32_t(sampleFrames); i++)
{
for(chIdx = 0u; chIdx < NUM_OUTPUTS; chIdx++)
{
outputs[chIdx][i] = 0.0f;
}
}
}

// // rack::global->engine.vipMutex.unlock();
rack::global->engine.mutex.unlock();


+ 44
- 3
src/widgets/FramebufferWidget.cpp View File

@@ -5,6 +5,7 @@
#include "nanovg_gl_utils.h"
#include "global_ui.hpp"

// #include <windows.h>

namespace rack {

@@ -35,8 +36,14 @@ FramebufferWidget::~FramebufferWidget() {

void FramebufferWidget::draw(NVGcontext *vg) {
// Bypass framebuffer rendering entirely
// Widget::draw(vg);
// return;
#ifdef RACK_PLUGIN_SHARED
// (note) FBO path crashes when plugin is a DLL (!)
// (the glGenFramebuffers() call in nvgluCreateFramebuffer() to be precise)
Widget::draw(vg);
return;
#endif // RACK_PLUGIN_SHARED
// printf("xxx FramebufferWidget::draw: ENTER vg=%p\n", vg);
// printf("xxx FramebufferWidget::draw: GetCurrentThreadId=%d\n", GetCurrentThreadId());

// Get world transform
float xform[6];
@@ -49,69 +56,103 @@ void FramebufferWidget::draw(NVGcontext *vg) {
Vec bi = b.floor();
Vec bf = b.minus(bi);

// printf("xxx FramebufferWidget::draw: 2 dirty=%d\n", dirty);

// Render to framebuffer
if (dirty) {
dirty = false;

// printf("xxx FramebufferWidget::draw: 2b internal=%p\n", internal);

internal->box = getChildrenBoundingBox();
internal->box.pos = internal->box.pos.mult(s).floor();
internal->box.size = internal->box.size.mult(s).ceil().plus(Vec(1, 1));

// printf("xxx FramebufferWidget::draw: 3b\n");

Vec fbSize = internal->box.size.mult(global_ui->window.gPixelRatio * oversample);

// printf("xxx FramebufferWidget::draw: 4b\n");

if (!fbSize.isFinite())
return;
if (fbSize.isZero())
return;

// printf("xxx FramebufferWidget::draw: 5b\n");

// info("rendering framebuffer %f %f", fbSize.x, fbSize.y);
// Delete old one first to free up GPU memory
internal->setFramebuffer(NULL);
// printf("xxx FramebufferWidget::draw: 5b2 global_ui->window.gVg=%p nvgluCreateFramebuffer=%p global_ui=%p\n", global_ui->window.gVg, global_ui);
// Create a framebuffer from the main nanovg context. We will draw to this in the secondary nanovg context.
NVGLUframebuffer *fb = nvgluCreateFramebuffer(global_ui->window.gVg, fbSize.x, fbSize.y, 0);
NVGLUframebuffer *fb = nvgluCreateFramebuffer(global_ui->window.gVg, fbSize.x, fbSize.y, 0);
// // NVGLUframebuffer *fb = nvgluCreateFramebuffer(NULL, 0, 0, 0);
// printf("xxx FramebufferWidget::draw: 6b fb=%p\n", fb);
if (!fb)
return;
internal->setFramebuffer(fb);

// printf("xxx FramebufferWidget::draw: 7b\n");

nvgluBindFramebuffer(fb);
glViewport(0.0, 0.0, fbSize.x, fbSize.y);
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

// printf("xxx FramebufferWidget::draw: 8b\n");

nvgBeginFrame(global_ui->window.gFramebufferVg, fbSize.x, fbSize.y, global_ui->window.gPixelRatio * oversample);

nvgScale(global_ui->window.gFramebufferVg, global_ui->window.gPixelRatio * oversample, global_ui->window.gPixelRatio * oversample);

// printf("xxx FramebufferWidget::draw: 9b\n");

// Use local scaling
nvgTranslate(global_ui->window.gFramebufferVg, bf.x, bf.y);
nvgTranslate(global_ui->window.gFramebufferVg, -internal->box.pos.x, -internal->box.pos.y);
nvgScale(global_ui->window.gFramebufferVg, s.x, s.y);
// printf("xxx FramebufferWidget::draw: 10b\n");
Widget::draw(global_ui->window.gFramebufferVg);
// printf("xxx FramebufferWidget::draw: 11b\n");

nvgEndFrame(global_ui->window.gFramebufferVg);
// printf("xxx FramebufferWidget::draw: 12b\n");
nvgluBindFramebuffer(NULL);
// printf("xxx FramebufferWidget::draw: 13b\n");
}

// printf("xxx FramebufferWidget::draw: 3\n");

if (!internal->fb) {
return;
}

// printf("xxx FramebufferWidget::draw: 4\n");

// Draw framebuffer image, using world coordinates
nvgSave(vg);
nvgResetTransform(vg);
nvgTranslate(vg, bi.x, bi.y);

// printf("xxx FramebufferWidget::draw: 5\n");

nvgBeginPath(vg);
nvgRect(vg, internal->box.pos.x, internal->box.pos.y, internal->box.size.x, internal->box.size.y);
NVGpaint paint = nvgImagePattern(vg, internal->box.pos.x, internal->box.pos.y, internal->box.size.x, internal->box.size.y, 0.0, internal->fb->image, 1.0);
nvgFillPaint(vg, paint);
nvgFill(vg);

// printf("xxx FramebufferWidget::draw: 6\n");

// For debugging the bounding box of the framebuffer
// nvgStrokeWidth(vg, 2.0);
// nvgStrokeColor(vg, nvgRGBA(255, 0, 0, 128));
// nvgStroke(vg);

nvgRestore(vg);

// printf("xxx FramebufferWidget::draw: LEAVE\n");
}

int FramebufferWidget::getImageHandle() {


+ 2
- 0
src/widgets/SVGWidget.cpp View File

@@ -210,10 +210,12 @@ void SVGWidget::setSVG(std::shared_ptr<SVG> svg) {
}

void SVGWidget::draw(NVGcontext *vg) {
// printf("xxx SVGWidget::draw: ENTER\n");
if (svg && svg->handle) {
// printf("drawing svg %f %f\n", box.size.x, box.size.y);
drawSVG(vg, svg->handle);
}
// printf("xxx SVGWidget::draw: LEAVE\n");
}




+ 6
- 0
src/widgets/Widget.cpp View File

@@ -110,12 +110,18 @@ void Widget::step() {

void Widget::draw(NVGcontext *vg) {
for (Widget *child : children) {
// printf("xxx Widget::draw: 1 child=%p vg=%p\n", child, vg);
if (!child->visible)
continue;
// printf("xxx Widget::draw: 2 child=%p\n", child);
nvgSave(vg);
// printf("xxx Widget::draw: 3 child=%p\n", child);
nvgTranslate(vg, child->box.pos.x, child->box.pos.y);
// printf("xxx Widget::draw: 4 child=%p\n", child);
child->draw(vg);
// printf("xxx Widget::draw: 5 child=%p\n", child);
nvgRestore(vg);
// printf("xxx Widget::draw: 6 child=%p\n", child);
}
}



+ 14
- 0
src/window.cpp View File

@@ -306,6 +306,7 @@ void errorCallback(int error, const char *description) {

void renderGui() {
int width, height;
// printf("xxx renderGui: ENTER\n");
glfwGetFramebufferSize(global_ui->window.gWindow, &width, &height);

// Update and render
@@ -313,13 +314,16 @@ void renderGui() {

nvgReset(global_ui->window.gVg);
nvgScale(global_ui->window.gVg, global_ui->window.gPixelRatio, global_ui->window.gPixelRatio);
// printf("xxx renderGui: gScene->draw() BEGIN\n");
global_ui->ui.gScene->draw(global_ui->window.gVg);
// printf("xxx renderGui: gScene->draw() END\n");

glViewport(0, 0, width, height);
glClearColor(0.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
nvgEndFrame(global_ui->window.gVg);
glfwSwapBuffers(global_ui->window.gWindow);
// printf("xxx renderGui: LEAVE\n");
}

void windowInit() {
@@ -469,7 +473,9 @@ void windowRun() {
#endif // USE_VST2
) {

#ifndef RACK_PLUGIN
vst2_handle_queued_set_program_chunk();
#endif // RACK_PLUGIN

double startTime = glfwGetTime();
global_ui->window.gGuiFrame++;
@@ -547,6 +553,7 @@ void windowRun() {
break;
}
#if defined(YAC_WIN32) && defined(VST2_REPARENT_WINDOW_HACK)
#ifndef RACK_PLUGIN
else if(rack::global_ui->vst2.b_queued_maximize_window || __glfw_hack__b_queued_maximize_window)
{
rack::global_ui->vst2.b_queued_maximize_window = false;
@@ -554,6 +561,7 @@ void windowRun() {
vst2_maximize_reparented_window();
}
#endif // VST2_REPARENT_WINDOW_HACK
#endif // RACK_PLUGIN
#endif // USE_VST2
}

@@ -749,13 +757,16 @@ std::shared_ptr<Image> Image::load(const std::string &filename) {
////////////////////

SVG::SVG(const std::string &filename) {
// printf("xxx SVG::SVG: ENTER\n");
handle = nsvgParseFromFile(filename.c_str(), "px", SVG_DPI);
// printf("xxx SVG::SVG: handle=%p\n");
if (handle) {
info("Loaded SVG %s", filename.c_str());
}
else {
warn("Failed to load SVG %s", filename.c_str());
}
// printf("xxx SVG::SVG: LEAVE\n");
}

SVG::~SVG() {
@@ -763,9 +774,12 @@ SVG::~SVG() {
}

std::shared_ptr<SVG> SVG::load(const std::string &filename) {
// printf("xxx SVG::load: ENTER\n");
auto sp = global_ui->window.svg_cache[filename].lock();
// printf("xxx SVG::load: cache locked OK\n");
if (!sp)
global_ui->window.svg_cache[filename] = sp = std::make_shared<SVG>(filename);
// printf("xxx SVG::load: RETURN\n");
return sp;
}



+ 6
- 0
vst2_bin/CHANGELOG_VST.txt View File

@@ -1,3 +1,9 @@
** July 13th, 2018
- add support for dynamically loaded plugins ("plugin.dll")
- add module Template_shared.MyModule
- change: the dBiz.* modules are now linked dynamically


** July 12th, 2018
- fix: assign unique VST param base id when duplicating modules
- change: Core.MIDI*: pre-select default VST MIDI input device


+ 108
- 77
vst2_bin/log.txt View File

@@ -1,80 +1,111 @@
[0.000 info src/main.cpp:63] VeeSeeVST Rack 0.6.1
[0.000 info src/main.cpp:66] Global directory: f:\git\VeeSeeVSTRack\vst2_bin\/
[0.000 info src/main.cpp:67] Local directory: f:\git\VeeSeeVSTRack\vst2_bin\/
[0.000 info src/plugin.cpp:639] vcvrack: Loaded static plugin Alikins 0.6.1
[0.000 info src/plugin.cpp:639] vcvrack: Loaded static plugin AS 0.6.1
[0.001 info src/plugin.cpp:639] vcvrack: Loaded static plugin AudibleInstruments 0.6.1
[0.001 info src/plugin.cpp:639] vcvrack: Loaded static plugin BaconMusic 0.6.1
[0.002 info src/plugin.cpp:639] vcvrack: Loaded static plugin Befaco 0.6.1
[0.002 info src/plugin.cpp:639] vcvrack: Loaded static plugin Bidoo 0.6.1
[0.002 info src/plugin.cpp:639] vcvrack: Loaded static plugin Bogaudio 0.6.1
[0.003 info src/plugin.cpp:639] vcvrack: Loaded static plugin cf 0.6.1
[0.003 info src/plugin.cpp:639] vcvrack: Loaded static plugin dBiz 0.6.1
[0.003 info src/plugin.cpp:639] vcvrack: Loaded static plugin DHE-Modules 0.6.1
[0.003 info src/plugin.cpp:639] vcvrack: Loaded static plugin DrumKit 0.6.1
[0.003 info src/plugin.cpp:639] vcvrack: Loaded static plugin ErraticInstruments 0.6.1
[0.003 info src/plugin.cpp:639] vcvrack: Loaded static plugin ESeries 0.6.1
[0.004 info src/plugin.cpp:639] vcvrack: Loaded static plugin FrozenWasteland 0.6.1
[0.004 info src/plugin.cpp:639] vcvrack: Loaded static plugin Fundamental 0.6.1
[0.004 info src/plugin.cpp:639] vcvrack: Loaded static plugin Gratrix 0.6.1
[0.004 info src/plugin.cpp:639] vcvrack: Loaded static plugin HetrickCV 0.6.1
[0.004 info src/plugin.cpp:639] vcvrack: Loaded static plugin huaba 0.6.1
[0.005 info src/plugin.cpp:639] vcvrack: Loaded static plugin JW-Modules 0.6.1
[0.005 info src/plugin.cpp:639] vcvrack: Loaded static plugin Koralfx-Modules 0.6.1
[0.005 info src/plugin.cpp:639] vcvrack: Loaded static plugin LindenbergResearch 0.6.1
[0.005 info src/plugin.cpp:639] vcvrack: Loaded static plugin LOGinstruments 0.6.1
[0.005 info src/plugin.cpp:639] vcvrack: Loaded static plugin ML_modules 0.6.1
[0.005 info src/plugin.cpp:639] vcvrack: Loaded static plugin moDllz 0.6.1
[0.006 info src/plugin.cpp:639] vcvrack: Loaded static plugin modular80 0.6.1
[0.006 info src/plugin.cpp:639] vcvrack: Loaded static plugin mscHack 0.6.1
[0.006 info src/plugin.cpp:639] vcvrack: Loaded static plugin mtsch-plugins 0.6.1
[0.006 info src/plugin.cpp:639] vcvrack: Loaded static plugin NauModular 0.6.1
[0.006 info src/plugin.cpp:639] vcvrack: Loaded static plugin Ohmer 0.6.1
[0.006 info src/plugin.cpp:639] vcvrack: Loaded static plugin Qwelk 0.6.1
[0.007 info src/plugin.cpp:639] vcvrack: Loaded static plugin RJModules 0.6.1
[0.007 info src/plugin.cpp:639] vcvrack: Loaded static plugin SerialRacker 0.6.1
[0.007 info src/plugin.cpp:639] vcvrack: Loaded static plugin SonusModular 0.6.1
[0.007 info src/plugin.cpp:639] vcvrack: Loaded static plugin Southpole-parasites 0.6.1
[0.007 info src/plugin.cpp:639] vcvrack: Loaded static plugin squinkylabs-plug1 0.6.1
[0.008 info src/plugin.cpp:639] vcvrack: Loaded static plugin SubmarineFree 0.6.1
[0.008 info src/plugin.cpp:639] vcvrack: Loaded static plugin Template 0.6.1
[0.008 info src/plugin.cpp:639] vcvrack: Loaded static plugin trowaSoft 0.6.1
[0.008 info src/plugin.cpp:639] vcvrack: Loaded static plugin unless_modules 0.6.1
[0.008 info src/plugin.cpp:639] vcvrack: Loaded static plugin Valley 0.6.1
[0.009 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_146097_cc.svg
[0.009 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_31859_cc.svg
[0.009 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.009 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1084369_cc.svg
[0.009 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.010 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_468341_cc.svg
[0.186 info src/window.cpp:703] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/DejaVuSans.ttf
[0.187 info src/settings.cpp:185] Loading settings f:\git\VeeSeeVSTRack\vst2_bin\/settings.json
[0.288 info src/app/RackWidget.cpp:192] Loading patch from string
[0.290 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/AudioInterface.svg
[0.290 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/ScrewSilver.svg
[0.290 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/PJ301M.svg
[0.291 info src/window.cpp:703] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/ShareTechMono-Regular.ttf
[0.292 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/MIDIToCVInterface.svg
[0.294 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/XCO.svg
[0.294 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_68px.svg
[0.295 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_16px.svg
[0.295 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/button_9px_0.svg
[0.295 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/button_9px_1.svg
[0.295 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_38px.svg
[0.295 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_0.svg
[0.296 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_1.svg
[0.296 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/port.svg
[0.297 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCA.svg
[0.297 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/RoundLargeBlackKnob.svg
[0.298 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCF.svg
[0.298 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/RoundHugeBlackKnob.svg
[0.299 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/ADSR.svg
[0.299 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-hexscrew.svg
[0.300 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePot.svg
[0.300 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePotHandle.svg
[0.300 info src/window.cpp:754] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-PJ301M.svg
[25.866 info src/app/RackWidget.cpp:137] Saving patch F:\eureka_data\vst_patches\vcvrack_duplicate_test2.vcv
[29.444 info src/app/RackWidget.cpp:154] Saving patch to string
[0.000 info src/plugin.cpp:673] vcvrack: Loaded static plugin Alikins 0.6.1
[0.001 info src/plugin.cpp:673] vcvrack: Loaded static plugin AS 0.6.1
[0.001 info src/plugin.cpp:673] vcvrack: Loaded static plugin AudibleInstruments 0.6.1
[0.001 info src/plugin.cpp:673] vcvrack: Loaded static plugin BaconMusic 0.6.1
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin Befaco 0.6.1
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin Bidoo 0.6.1
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin Bogaudio 0.6.1
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin cf 0.6.1
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin DHE-Modules 0.6.1
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin DrumKit 0.6.1
[0.003 info src/plugin.cpp:673] vcvrack: Loaded static plugin ErraticInstruments 0.6.1
[0.003 info src/plugin.cpp:673] vcvrack: Loaded static plugin ESeries 0.6.1
[0.003 info src/plugin.cpp:673] vcvrack: Loaded static plugin FrozenWasteland 0.6.1
[0.003 info src/plugin.cpp:673] vcvrack: Loaded static plugin Fundamental 0.6.1
[0.003 info src/plugin.cpp:673] vcvrack: Loaded static plugin Gratrix 0.6.1
[0.003 info src/plugin.cpp:673] vcvrack: Loaded static plugin HetrickCV 0.6.1
[0.003 info src/plugin.cpp:673] vcvrack: Loaded static plugin huaba 0.6.1
[0.004 info src/plugin.cpp:673] vcvrack: Loaded static plugin JW-Modules 0.6.1
[0.004 info src/plugin.cpp:673] vcvrack: Loaded static plugin Koralfx-Modules 0.6.1
[0.004 info src/plugin.cpp:673] vcvrack: Loaded static plugin LindenbergResearch 0.6.1
[0.004 info src/plugin.cpp:673] vcvrack: Loaded static plugin LOGinstruments 0.6.1
[0.004 info src/plugin.cpp:673] vcvrack: Loaded static plugin ML_modules 0.6.1
[0.004 info src/plugin.cpp:673] vcvrack: Loaded static plugin moDllz 0.6.1
[0.004 info src/plugin.cpp:673] vcvrack: Loaded static plugin modular80 0.6.1
[0.004 info src/plugin.cpp:673] vcvrack: Loaded static plugin mscHack 0.6.1
[0.005 info src/plugin.cpp:673] vcvrack: Loaded static plugin mtsch-plugins 0.6.1
[0.005 info src/plugin.cpp:673] vcvrack: Loaded static plugin NauModular 0.6.1
[0.005 info src/plugin.cpp:673] vcvrack: Loaded static plugin Ohmer 0.6.1
[0.005 info src/plugin.cpp:673] vcvrack: Loaded static plugin Qwelk 0.6.1
[0.005 info src/plugin.cpp:673] vcvrack: Loaded static plugin RJModules 0.6.1
[0.005 info src/plugin.cpp:673] vcvrack: Loaded static plugin SerialRacker 0.6.1
[0.005 info src/plugin.cpp:673] vcvrack: Loaded static plugin SonusModular 0.6.1
[0.006 info src/plugin.cpp:673] vcvrack: Loaded static plugin Southpole-parasites 0.6.1
[0.006 info src/plugin.cpp:673] vcvrack: Loaded static plugin squinkylabs-plug1 0.6.1
[0.006 info src/plugin.cpp:673] vcvrack: Loaded static plugin SubmarineFree 0.6.1
[0.006 info src/plugin.cpp:673] vcvrack: Loaded static plugin Template 0.6.1
[0.006 info src/plugin.cpp:673] vcvrack: Loaded static plugin trowaSoft 0.6.1
[0.006 info src/plugin.cpp:673] vcvrack: Loaded static plugin unless_modules 0.6.1
[0.006 info src/plugin.cpp:673] vcvrack: Loaded static plugin Valley 0.6.1
[0.007 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Alikins/plugin.dll does not exist
[0.007 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/AS/plugin.dll does not exist
[0.007 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/AudibleInstruments/plugin.dll does not exist
[0.007 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/BaconMusic/plugin.dll does not exist
[0.007 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Befaco/plugin.dll does not exist
[0.007 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Bidoo/plugin.dll does not exist
[0.007 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Bogaudio/plugin.dll does not exist
[0.008 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/BOKONTEPByteBeatMachine/plugin.dll does not exist
[0.008 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/cf/plugin.dll does not exist
[0.008 info src/plugin.cpp:155] Loaded plugin dBiz 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/dBiz/plugin.dll
[0.009 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/DHE-Modules/plugin.dll does not exist
[0.009 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/DrumKit/plugin.dll does not exist
[0.009 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/ErraticInstruments/plugin.dll does not exist
[0.009 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/ESeries/plugin.dll does not exist
[0.009 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/FrozenWasteland/plugin.dll does not exist
[0.009 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Fundamental/plugin.dll does not exist
[0.009 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Gratrix/plugin.dll does not exist
[0.010 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/HetrickCV/plugin.dll does not exist
[0.010 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/huaba/plugin.dll does not exist
[0.010 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/JW-Modules/plugin.dll does not exist
[0.010 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Koralfx-Modules/plugin.dll does not exist
[0.010 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/LindenbergResearch/plugin.dll does not exist
[0.010 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/LOGinstruments/plugin.dll does not exist
[0.010 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/ML_modules/plugin.dll does not exist
[0.011 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/moDllz/plugin.dll does not exist
[0.011 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/modular80/plugin.dll does not exist
[0.011 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/mscHack/plugin.dll does not exist
[0.011 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/mtsch-plugins/plugin.dll does not exist
[0.011 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/NauModular/plugin.dll does not exist
[0.011 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Ohmer/plugin.dll does not exist
[0.011 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Qwelk/plugin.dll does not exist
[0.011 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/RJModules/plugin.dll does not exist
[0.012 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/SerialRacker/plugin.dll does not exist
[0.012 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/SonusModular/plugin.dll does not exist
[0.012 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Southpole-parasites/plugin.dll does not exist
[0.012 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/squinkylabs-plug1/plugin.dll does not exist
[0.012 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/SubmarineFree/plugin.dll does not exist
[0.012 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template/plugin.dll does not exist
[0.013 info src/plugin.cpp:155] Loaded plugin Template_shared 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template_shared/plugin.dll
[0.013 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/trowaSoft/plugin.dll does not exist
[0.013 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/unless_modules/plugin.dll does not exist
[0.013 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Valley/plugin.dll does not exist
[0.014 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_146097_cc.svg
[0.014 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_31859_cc.svg
[0.014 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343816_cc.svg
[0.014 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343811_cc.svg
[0.014 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1084369_cc.svg
[0.015 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1745061_cc.svg
[0.015 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1240789_cc.svg
[0.015 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_305536_cc.svg
[0.015 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_468341_cc.svg
[0.192 info src/window.cpp:711] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/DejaVuSans.ttf
[0.194 info src/settings.cpp:185] Loading settings f:\git\VeeSeeVSTRack\vst2_bin\/settings.json
[0.295 info src/app/RackWidget.cpp:196] Loading patch from string
[0.297 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/AudioInterface.svg
[0.297 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/ScrewSilver.svg
[0.297 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/PJ301M.svg
[0.297 info src/window.cpp:711] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/ShareTechMono-Regular.ttf
[0.299 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/MIDIToCVInterface.svg
[0.301 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCA.svg
[0.301 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/RoundLargeBlackKnob.svg
[0.303 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCF.svg
[0.303 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/RoundHugeBlackKnob.svg
[0.305 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/ADSR.svg
[0.305 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-hexscrew.svg
[0.305 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePot.svg
[0.305 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePotHandle.svg
[0.306 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-PJ301M.svg
[223.996 info src/app/RackWidget.cpp:158] Saving patch to string

+ 121
- 0
vst2_bin/plugins/Template/LICENSE.txt View File

@@ -0,0 +1,121 @@
Creative Commons Legal Code

CC0 1.0 Universal

CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
HEREUNDER.

Statement of Purpose

The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator
and subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").

Certain owners wish to permanently relinquish those rights to a Work for
the purpose of contributing to a commons of creative, cultural and
scientific works ("Commons") that the public can reliably and without fear
of later claims of infringement build upon, modify, incorporate in other
works, reuse and redistribute as freely as possible in any form whatsoever
and for any purposes, including without limitation commercial purposes.
These owners may contribute to the Commons to promote the ideal of a free
culture and the further production of creative, cultural and scientific
works, or to gain reputation or greater distribution for their Work in
part through the use and efforts of others.

For these and/or other purposes and motivations, and without any
expectation of additional consideration or compensation, the person
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
is an owner of Copyright and Related Rights in the Work, voluntarily
elects to apply CC0 to the Work and publicly distribute the Work under its
terms, with knowledge of his or her Copyright and Related Rights in the
Work and the meaning and intended legal effect of CC0 on those rights.

1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not
limited to, the following:

i. the right to reproduce, adapt, distribute, perform, display,
communicate, and translate a Work;
ii. moral rights retained by the original author(s) and/or performer(s);
iii. publicity and privacy rights pertaining to a person's image or
likeness depicted in a Work;
iv. rights protecting against unfair competition in regards to a Work,
subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data
in a Work;
vi. database rights (such as those arising under Directive 96/9/EC of the
European Parliament and of the Council of 11 March 1996 on the legal
protection of databases, and under any national implementation
thereof, including any amended or successor version of such
directive); and
vii. other similar, equivalent or corresponding rights throughout the
world based on applicable law or treaty, and any national
implementations thereof.

2. Waiver. To the greatest extent permitted by, but not in contravention
of, applicable law, Affirmer hereby overtly, fully, permanently,
irrevocably and unconditionally waives, abandons, and surrenders all of
Affirmer's Copyright and Related Rights and associated claims and causes
of action, whether now known or unknown (including existing as well as
future claims and causes of action), in the Work (i) in all territories
worldwide, (ii) for the maximum duration provided by applicable law or
treaty (including future time extensions), (iii) in any current or future
medium and for any number of copies, and (iv) for any purpose whatsoever,
including without limitation commercial, advertising or promotional
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
member of the public at large and to the detriment of Affirmer's heirs and
successors, fully intending that such Waiver shall not be subject to
revocation, rescission, cancellation, termination, or any other legal or
equitable action to disrupt the quiet enjoyment of the Work by the public
as contemplated by Affirmer's express Statement of Purpose.

3. Public License Fallback. Should any part of the Waiver for any reason
be judged legally invalid or ineffective under applicable law, then the
Waiver shall be preserved to the maximum extent permitted taking into
account Affirmer's express Statement of Purpose. In addition, to the
extent the Waiver is so judged Affirmer hereby grants to each affected
person a royalty-free, non transferable, non sublicensable, non exclusive,
irrevocable and unconditional license to exercise Affirmer's Copyright and
Related Rights in the Work (i) in all territories worldwide, (ii) for the
maximum duration provided by applicable law or treaty (including future
time extensions), (iii) in any current or future medium and for any number
of copies, and (iv) for any purpose whatsoever, including without
limitation commercial, advertising or promotional purposes (the
"License"). The License shall be deemed effective as of the date CC0 was
applied by Affirmer to the Work. Should any part of the License for any
reason be judged legally invalid or ineffective under applicable law, such
partial invalidity or ineffectiveness shall not invalidate the remainder
of the License, and in such case Affirmer hereby affirms that he or she
will not (i) exercise any of his or her remaining Copyright and Related
Rights in the Work or (ii) assert any associated claims and causes of
action with respect to the Work, in either case contrary to Affirmer's
express Statement of Purpose.

4. Limitations and Disclaimers.

a. No trademark or patent rights held by Affirmer are waived, abandoned,
surrendered, licensed or otherwise affected by this document.
b. Affirmer offers the Work as-is and makes no representations or
warranties of any kind concerning the Work, express, implied,
statutory or otherwise, including without limitation warranties of
title, merchantability, fitness for a particular purpose, non
infringement, or the absence of latent or other defects, accuracy, or
the present or absence of errors, whether or not discoverable, all to
the greatest extent permissible under applicable law.
c. Affirmer disclaims responsibility for clearing rights of other persons
that may apply to the Work or any use thereof, including without
limitation any person's Copyright and Related Rights in the Work.
Further, Affirmer disclaims responsibility for obtaining any necessary
consents, permissions or other rights required for any use of the
Work.
d. Affirmer understands and acknowledges that Creative Commons is not a
party to this document and has no duty or obligation with respect to
this CC0 or use of the Work.

+ 13
- 0
vst2_bin/plugins/Template/README.md View File

@@ -0,0 +1,13 @@

# VCV Template plugin

The VCV Template plugin is a starting point for developing your own plugins for VCV Rack.
It implements a simple sine VCO, demonstrating inputs, outputs, parameters, and other concepts.

See https://vcvrack.com/manual/PluginDevelopmentTutorial.html for a development tutorial.

## Contributing

I welcome Issues and Pull Requests to this repository if you have suggestions for improvement.

This template is released into the public domain ([CC0](https://creativecommons.org/publicdomain/zero/1.0/)).

+ 243
- 0
vst2_bin/plugins/Template/res/MyModule.svg View File

@@ -0,0 +1,243 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="90"
height="380"
viewBox="0 0 23.812501 100.54167"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="MyModule.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="188.48062"
inkscape:cy="170.63765"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:snap-bbox="true"
inkscape:snap-page="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:window-width="1600"
inkscape:window-height="900"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-196.45832)">
<path
style="opacity:1;vector-effect:none;fill:#f0f0f0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.48607069;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
d="M 0,196.45831 H 23.8125 V 296.99999 H 0 Z"
id="rect817"
inkscape:connector-curvature="0" />
<g
aria-label="My Module"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055563px;line-height:6.61458302px;font-family:DINPro;-inkscape-font-specification:DINPro;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text925"
transform="translate(0,-1.0583333)">
<path
d="m 5.3546533,207.98659 v -2.76296 H 5.0597311 l -0.8770056,1.95968 -0.9002889,-1.95968 H 2.9875144 v 2.76296 h 0.2949222 v -2.09938 l 0.76835,1.66476 h 0.2522361 l 0.7567084,-1.66476 v 2.09938 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path956"
inkscape:connector-curvature="0" />
<path
d="M 7.4478493,206.07735 H 7.1451659 l -0.5199944,1.53282 -0.523875,-1.53282 H 5.7986131 l 0.6868584,1.87043 -0.1358195,0.37254 c -0.062089,0.17462 -0.1202972,0.23671 -0.314325,0.23671 H 5.949955 v 0.24835 h 0.120297 c 0.1358195,0 0.2716389,-0.0349 0.3725334,-0.13193 0.054328,-0.0505 0.097014,-0.1203 0.1358194,-0.22508 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path958"
inkscape:connector-curvature="0" />
<path
d="m 11.220962,207.98659 v -2.76296 H 10.92604 l -0.877006,1.95968 -0.9002887,-1.95968 H 8.853823 v 2.76296 h 0.2949223 v -2.09938 l 0.76835,1.66476 h 0.2522357 l 0.756709,-1.66476 v 2.09938 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path960"
inkscape:connector-curvature="0" />
<path
d="m 13.430574,207.03197 c 0,-0.29492 -0.0388,-0.56268 -0.232833,-0.76059 -0.131939,-0.13194 -0.314325,-0.21731 -0.547159,-0.21731 -0.232833,0 -0.415219,0.0854 -0.547158,0.21731 -0.194028,0.19791 -0.232833,0.46567 -0.232833,0.76059 0,0.29492 0.0388,0.56268 0.232833,0.76059 0.131939,0.13194 0.314325,0.21731 0.547158,0.21731 0.232834,0 0.41522,-0.0854 0.547159,-0.21731 0.194028,-0.19791 0.232833,-0.46567 0.232833,-0.76059 z m -0.2794,0 c 0,0.21343 -0.01164,0.45015 -0.151342,0.58985 -0.08925,0.0892 -0.21343,0.1397 -0.34925,0.1397 -0.135819,0 -0.256116,-0.0504 -0.345369,-0.1397 -0.1397,-0.1397 -0.155222,-0.37642 -0.155222,-0.58985 0,-0.21343 0.01552,-0.45014 0.155222,-0.58984 0.08925,-0.0893 0.20955,-0.1397 0.345369,-0.1397 0.13582,0 0.259998,0.0504 0.34925,0.1397 0.1397,0.1397 0.151342,0.37641 0.151342,0.58984 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path962"
inkscape:connector-curvature="0" />
<path
d="m 15.441855,207.98659 v -2.76296 h -0.2794 v 1.07492 c -0.155223,-0.19791 -0.329848,-0.24448 -0.539398,-0.24448 -0.194027,0 -0.364772,0.066 -0.465666,0.16686 -0.194028,0.19403 -0.232834,0.51224 -0.232834,0.81104 0,0.2988 0.03881,0.61701 0.232834,0.81104 0.100894,0.10089 0.271639,0.16686 0.465666,0.16686 0.20955,0 0.388056,-0.0505 0.543278,-0.25224 v 0.22896 z m -0.2794,-0.95462 c 0,0.37253 -0.06209,0.72955 -0.477309,0.72955 -0.415219,0 -0.481189,-0.35702 -0.481189,-0.72955 0,-0.37253 0.06597,-0.72954 0.481189,-0.72954 0.41522,0 0.477309,0.35701 0.477309,0.72954 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path964"
inkscape:connector-curvature="0" />
<path
d="m 17.622423,207.98659 v -1.90924 h -0.2794 v 1.17581 c 0,0.33373 -0.190147,0.50836 -0.477308,0.50836 -0.287161,0 -0.465667,-0.17075 -0.465667,-0.50836 v -1.17581 h -0.2794 v 1.2185 c 0,0.22119 0.05821,0.40358 0.194028,0.53552 0.116417,0.11641 0.287161,0.1785 0.492831,0.1785 0.21343,0 0.403577,-0.0815 0.539397,-0.23671 v 0.21343 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path966"
inkscape:connector-curvature="0" />
<path
d="m 19.001961,207.98659 v -0.2406 h -0.151342 c -0.194028,0 -0.256116,-0.0931 -0.256116,-0.2794 v -2.24296 h -0.2794 v 2.2546 c 0,0.29105 0.151341,0.50836 0.485069,0.50836 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path968"
inkscape:connector-curvature="0" />
<path
d="m 20.839343,207.1057 v -0.12806 c 0,-0.56656 -0.291042,-0.92357 -0.783872,-0.92357 -0.48507,0 -0.783873,0.36089 -0.783873,0.9779 0,0.67522 0.329848,0.9779 0.83432,0.9779 0.325967,0 0.504472,-0.10089 0.6985,-0.29492 l -0.190147,-0.16687 c -0.151342,0.15135 -0.2794,0.21732 -0.500592,0.21732 -0.364772,0 -0.562681,-0.2406 -0.562681,-0.6597 z m -0.2794,-0.20955 h -1.008945 c 0.0078,-0.15522 0.01552,-0.21343 0.05821,-0.3182 0.07373,-0.17463 0.244475,-0.28717 0.446264,-0.28717 0.201789,0 0.372533,0.11254 0.446264,0.28717 0.04269,0.10477 0.05045,0.16298 0.05821,0.3182 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path970"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Pitch"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:6.61458302px;font-family:DINPro;-inkscape-font-specification:DINPro;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text946"
transform="translate(0,-2.1166665)">
<path
d="m 10.343313,234.08358 c 0,-0.36124 -0.254,-0.58984 -0.6208893,-0.58984 H 8.9745348 v 2.00942 h 0.2144889 v -0.82691 h 0.5334 c 0.3668893,0 0.6208893,-0.23142 0.6208893,-0.59267 z m -0.214489,0 c 0,0.26529 -0.174978,0.40076 -0.4261558,0.40076 H 9.1890237 v -0.79869 h 0.5136445 c 0.2511778,0 0.4261558,0.13264 0.4261558,0.39793 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path973"
inkscape:connector-curvature="0" />
<path
d="m 10.921471,235.50316 v -1.38853 h -0.2032 v 1.38853 z m 0.01411,-1.78365 v -0.2286 h -0.2286 v 0.2286 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path975"
inkscape:connector-curvature="0" />
<path
d="m 11.968251,235.50316 v -0.17498 h -0.107244 c -0.129822,0 -0.189089,-0.0762 -0.189089,-0.2032 v -0.84667 h 0.296333 v -0.15522 h -0.296333 v -0.43462 h -0.2032 v 0.43462 H 11.29374 v 0.15522 h 0.174978 v 0.85232 c 0,0.20602 0.118533,0.37253 0.3556,0.37253 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path977"
inkscape:connector-curvature="0" />
<path
d="m 13.346113,235.31407 -0.138289,-0.13264 c -0.104422,0.11571 -0.186267,0.15804 -0.318911,0.15804 -0.135467,0 -0.248356,-0.0536 -0.321733,-0.15804 -0.06491,-0.0903 -0.09031,-0.19756 -0.09031,-0.37254 0,-0.17498 0.0254,-0.28222 0.09031,-0.37253 0.07338,-0.10442 0.186266,-0.15805 0.321733,-0.15805 0.132644,0 0.214489,0.0395 0.318911,0.15523 l 0.138289,-0.12983 c -0.143933,-0.15522 -0.265289,-0.20602 -0.4572,-0.20602 -0.349956,0 -0.615244,0.23707 -0.615244,0.7112 0,0.47414 0.265288,0.7112 0.615244,0.7112 0.191911,0 0.313267,-0.0508 0.4572,-0.20602 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path979"
inkscape:connector-curvature="0" />
<path
d="m 14.825619,235.50316 v -0.89182 c 0,-0.31327 -0.186267,-0.51365 -0.499534,-0.51365 -0.155222,0 -0.287866,0.0536 -0.389466,0.16934 v -0.77329 h -0.2032 v 2.00942 h 0.2032 v -0.85796 c 0,-0.23989 0.138289,-0.36689 0.347133,-0.36689 0.208844,0 0.338667,0.12418 0.338667,0.36689 v 0.85796 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path981"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="1V/oct"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:6.61458302px;font-family:DINPro;-inkscape-font-specification:DINPro;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text950"
transform="translate(0,-6.0862931)">
<path
d="m 8.7942542,262.66519 v -2.00942 h -0.2032 l -0.3753555,0.32455 v 0.23143 l 0.3753555,-0.3302 v 1.78364 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path984"
inkscape:connector-curvature="0" />
<path
d="m 10.853021,260.65577 h -0.225778 l -0.522111,1.6256 -0.5221108,-1.6256 H 9.3572434 l 0.6603996,2.00942 h 0.174978 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path986"
inkscape:connector-curvature="0" />
<path
d="m 11.88278,260.44692 h -0.200378 l -0.804333,2.42712 h 0.200377 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path988"
inkscape:connector-curvature="0" />
<path
d="m 13.196436,261.97092 c 0,-0.21448 -0.02822,-0.40922 -0.169334,-0.55315 -0.09596,-0.096 -0.2286,-0.15805 -0.397933,-0.15805 -0.169333,0 -0.301978,0.0621 -0.397933,0.15805 -0.141111,0.14393 -0.169334,0.33867 -0.169334,0.55315 0,0.21449 0.02822,0.40923 0.169334,0.55316 0.09595,0.096 0.2286,0.15804 0.397933,0.15804 0.169333,0 0.301978,-0.0621 0.397933,-0.15804 0.141111,-0.14393 0.169334,-0.33867 0.169334,-0.55316 z m -0.2032,0 c 0,0.15523 -0.0085,0.32738 -0.110067,0.42898 -0.06491,0.0649 -0.155222,0.1016 -0.254,0.1016 -0.09878,0 -0.186267,-0.0367 -0.251178,-0.1016 -0.1016,-0.1016 -0.112889,-0.27375 -0.112889,-0.42898 0,-0.15522 0.01129,-0.32737 0.112889,-0.42897 0.06491,-0.0649 0.1524,-0.1016 0.251178,-0.1016 0.09878,0 0.189089,0.0367 0.254,0.1016 0.1016,0.1016 0.110067,0.27375 0.110067,0.42897 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path990"
inkscape:connector-curvature="0" />
<path
d="m 14.625318,262.4761 -0.138289,-0.13264 c -0.104422,0.11571 -0.186267,0.15804 -0.318911,0.15804 -0.135467,0 -0.248356,-0.0536 -0.321733,-0.15804 -0.06491,-0.0903 -0.09031,-0.19756 -0.09031,-0.37254 0,-0.17497 0.0254,-0.28222 0.09031,-0.37253 0.07338,-0.10442 0.186266,-0.15804 0.321733,-0.15804 0.132644,0 0.214489,0.0395 0.318911,0.15522 l 0.138289,-0.12982 c -0.143933,-0.15523 -0.265289,-0.20603 -0.4572,-0.20603 -0.349956,0 -0.615244,0.23707 -0.615244,0.7112 0,0.47414 0.265288,0.7112 0.615244,0.7112 0.191911,0 0.313267,-0.0508 0.4572,-0.20602 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path992"
inkscape:connector-curvature="0" />
<path
d="m 15.546024,262.66519 v -0.17498 H 15.43878 c -0.129822,0 -0.189089,-0.0762 -0.189089,-0.2032 v -0.84666 h 0.296333 v -0.15523 h -0.296333 v -0.43462 h -0.2032 v 0.43462 h -0.174978 v 0.15523 h 0.174978 v 0.85231 c 0,0.20602 0.118533,0.37253 0.3556,0.37253 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path994"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Sine"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:6.61458302px;font-family:DINPro;-inkscape-font-specification:DINPro;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text954"
transform="translate(0,-10.054167)">
<path
d="m 10.714958,289.26526 c 0,-0.16651 -0.05927,-0.3048 -0.169334,-0.39793 -0.08467,-0.0734 -0.1778,-0.11289 -0.366889,-0.14111 l -0.220133,-0.0339 c -0.1044223,-0.0169 -0.2088445,-0.0564 -0.2709334,-0.11006 -0.062089,-0.0536 -0.090311,-0.13265 -0.090311,-0.23143 0,-0.22295 0.1552222,-0.37253 0.4233334,-0.37253 0.211667,0 0.344311,0.0593 0.468489,0.17216 l 0.138289,-0.13829 c -0.172156,-0.15522 -0.341489,-0.22014 -0.598311,-0.22014 -0.3979337,0 -0.643467,0.22578 -0.643467,0.56727 0,0.16087 0.0508,0.28505 0.1524,0.37536 0.087489,0.0762 0.2116666,0.127 0.3697111,0.1524 l 0.2342439,0.0367 c 0.146756,0.0226 0.197556,0.0395 0.262467,0.0959 0.06491,0.0565 0.09596,0.14676 0.09596,0.25118 0,0.23424 -0.180623,0.37253 -0.474134,0.37253 -0.2257774,0 -0.3809996,-0.0536 -0.5475107,-0.22013 l -0.1467556,0.14675 c 0.1890889,0.18909 0.3866445,0.26529 0.6886223,0.26529 0.417689,0 0.694267,-0.21731 0.694267,-0.57009 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path997"
inkscape:connector-curvature="0" />
<path
d="m 11.329893,289.81842 v -1.38853 h -0.2032 v 1.38853 z m 0.01411,-1.78364 v -0.2286 h -0.2286 v 0.2286 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path999"
inkscape:connector-curvature="0" />
<path
d="m 12.935473,289.81842 v -0.889 c 0,-0.16087 -0.04515,-0.29069 -0.143933,-0.38664 -0.08467,-0.0847 -0.206022,-0.12983 -0.3556,-0.12983 -0.155222,0 -0.290689,0.0564 -0.389467,0.16934 v -0.1524 h -0.2032 v 1.38853 h 0.2032 v -0.85513 c 0,-0.24271 0.135467,-0.36971 0.344311,-0.36971 0.208845,0 0.341489,0.12417 0.341489,0.36971 v 0.85513 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path1001"
inkscape:connector-curvature="0" />
<path
d="m 14.494751,289.17778 v -0.0931 c 0,-0.41204 -0.211667,-0.67169 -0.570089,-0.67169 -0.352778,0 -0.570089,0.26247 -0.570089,0.7112 0,0.49107 0.239889,0.7112 0.606778,0.7112 0.237067,0 0.366889,-0.0734 0.508,-0.21449 l -0.138289,-0.12135 c -0.110067,0.11007 -0.2032,0.15804 -0.364067,0.15804 -0.265289,0 -0.409222,-0.17497 -0.409222,-0.47977 z m -0.2032,-0.1524 h -0.733778 c 0.0056,-0.11289 0.01129,-0.15523 0.04233,-0.23143 0.05362,-0.127 0.1778,-0.20884 0.324556,-0.20884 0.146756,0 0.270933,0.0818 0.324556,0.20884 0.03104,0.0762 0.03669,0.11854 0.04233,0.23143 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path1003"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Tutorial"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:6.61458302px;font-family:DINPro;-inkscape-font-specification:DINPro;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text1008">
<path
d="M 8.5614537,289.39941 V 289.2075 H 7.1842093 v 0.19191 h 0.5813778 v 1.81751 H 7.980076 v -1.81751 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1010" />
<path
d="m 9.8262062,291.21692 v -1.38853 h -0.2032 v 0.85513 c 0,0.24271 -0.1382889,0.36971 -0.3471334,0.36971 -0.2088444,0 -0.3386666,-0.12418 -0.3386666,-0.36971 v -0.85513 H 8.7340061 v 0.88617 c 0,0.16087 0.042333,0.29351 0.1411112,0.38947 0.084667,0.0847 0.2088444,0.12982 0.3584222,0.12982 0.1552222,0 0.2935111,-0.0593 0.3922889,-0.17215 v 0.15522 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1012" />
<path
d="m 10.869017,291.21692 v -0.17498 h -0.107244 c -0.129822,0 -0.189089,-0.0762 -0.189089,-0.2032 v -0.84667 h 0.296333 v -0.15522 h -0.296333 v -0.43462 h -0.2032 v 0.43462 h -0.174978 v 0.15522 h 0.174978 v 0.85232 c 0,0.20602 0.118533,0.37253 0.3556,0.37253 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1014" />
<path
d="m 12.31179,290.52265 c 0,-0.21449 -0.02822,-0.40922 -0.169333,-0.55315 -0.09596,-0.096 -0.2286,-0.15805 -0.397934,-0.15805 -0.169333,0 -0.301977,0.0621 -0.397933,0.15805 -0.141111,0.14393 -0.169333,0.33866 -0.169333,0.55315 0,0.21449 0.02822,0.40922 0.169333,0.55316 0.09596,0.096 0.2286,0.15804 0.397933,0.15804 0.169334,0 0.301978,-0.0621 0.397934,-0.15804 0.141111,-0.14394 0.169333,-0.33867 0.169333,-0.55316 z m -0.2032,0 c 0,0.15522 -0.0085,0.32738 -0.110067,0.42898 -0.06491,0.0649 -0.155222,0.1016 -0.254,0.1016 -0.09878,0 -0.186266,-0.0367 -0.251177,-0.1016 -0.1016,-0.1016 -0.112889,-0.27376 -0.112889,-0.42898 0,-0.15522 0.01129,-0.32738 0.112889,-0.42898 0.06491,-0.0649 0.1524,-0.1016 0.251177,-0.1016 0.09878,0 0.189089,0.0367 0.254,0.1016 0.1016,0.1016 0.110067,0.27376 0.110067,0.42898 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1016" />
<path
d="m 13.670117,289.94127 c -0.09878,-0.0988 -0.200378,-0.12982 -0.333022,-0.12982 -0.160867,0 -0.313267,0.0706 -0.389467,0.18627 v -0.16933 h -0.2032 v 1.38853 h 0.2032 v -0.85231 c 0,-0.21167 0.129822,-0.37254 0.333022,-0.37254 0.107245,0 0.163689,0.0254 0.239889,0.1016 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1018" />
<path
d="m 14.138253,291.21692 v -1.38853 h -0.2032 v 1.38853 z m 0.01411,-1.78365 v -0.2286 h -0.2286 v 0.2286 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1020" />
<path
d="m 15.642233,291.21692 v -0.94262 c 0,-0.30198 -0.183445,-0.46285 -0.555978,-0.46285 -0.225778,0 -0.366889,0.0452 -0.491067,0.20602 l 0.138289,0.127 c 0.08184,-0.11571 0.172156,-0.15804 0.349956,-0.15804 0.254,0 0.3556,0.1016 0.3556,0.3048 v 0.13264 h -0.417689 c -0.310445,0 -0.479778,0.15805 -0.479778,0.40076 0,0.11007 0.03669,0.21449 0.104422,0.28222 0.08749,0.0903 0.200378,0.127 0.392289,0.127 0.186267,0 0.287867,-0.0367 0.400756,-0.14958 v 0.13265 z m -0.2032,-0.49107 c 0,0.11571 -0.02258,0.19474 -0.07056,0.23989 -0.08749,0.0847 -0.191911,0.0931 -0.310444,0.0931 -0.220134,0 -0.318912,-0.0762 -0.318912,-0.23706 0,-0.16087 0.1016,-0.24554 0.310445,-0.24554 h 0.389467 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1022" />
<path
d="m 16.628291,291.21692 v -0.17498 h -0.110067 c -0.141111,0 -0.186267,-0.0677 -0.186267,-0.2032 v -1.63124 h -0.2032 v 1.63971 c 0,0.21166 0.110067,0.36971 0.352778,0.36971 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1024" />
</g>
</g>
</svg>

+ 121
- 0
vst2_bin/plugins/Template_shared/LICENSE.txt View File

@@ -0,0 +1,121 @@
Creative Commons Legal Code

CC0 1.0 Universal

CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
HEREUNDER.

Statement of Purpose

The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator
and subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").

Certain owners wish to permanently relinquish those rights to a Work for
the purpose of contributing to a commons of creative, cultural and
scientific works ("Commons") that the public can reliably and without fear
of later claims of infringement build upon, modify, incorporate in other
works, reuse and redistribute as freely as possible in any form whatsoever
and for any purposes, including without limitation commercial purposes.
These owners may contribute to the Commons to promote the ideal of a free
culture and the further production of creative, cultural and scientific
works, or to gain reputation or greater distribution for their Work in
part through the use and efforts of others.

For these and/or other purposes and motivations, and without any
expectation of additional consideration or compensation, the person
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
is an owner of Copyright and Related Rights in the Work, voluntarily
elects to apply CC0 to the Work and publicly distribute the Work under its
terms, with knowledge of his or her Copyright and Related Rights in the
Work and the meaning and intended legal effect of CC0 on those rights.

1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not
limited to, the following:

i. the right to reproduce, adapt, distribute, perform, display,
communicate, and translate a Work;
ii. moral rights retained by the original author(s) and/or performer(s);
iii. publicity and privacy rights pertaining to a person's image or
likeness depicted in a Work;
iv. rights protecting against unfair competition in regards to a Work,
subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data
in a Work;
vi. database rights (such as those arising under Directive 96/9/EC of the
European Parliament and of the Council of 11 March 1996 on the legal
protection of databases, and under any national implementation
thereof, including any amended or successor version of such
directive); and
vii. other similar, equivalent or corresponding rights throughout the
world based on applicable law or treaty, and any national
implementations thereof.

2. Waiver. To the greatest extent permitted by, but not in contravention
of, applicable law, Affirmer hereby overtly, fully, permanently,
irrevocably and unconditionally waives, abandons, and surrenders all of
Affirmer's Copyright and Related Rights and associated claims and causes
of action, whether now known or unknown (including existing as well as
future claims and causes of action), in the Work (i) in all territories
worldwide, (ii) for the maximum duration provided by applicable law or
treaty (including future time extensions), (iii) in any current or future
medium and for any number of copies, and (iv) for any purpose whatsoever,
including without limitation commercial, advertising or promotional
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
member of the public at large and to the detriment of Affirmer's heirs and
successors, fully intending that such Waiver shall not be subject to
revocation, rescission, cancellation, termination, or any other legal or
equitable action to disrupt the quiet enjoyment of the Work by the public
as contemplated by Affirmer's express Statement of Purpose.

3. Public License Fallback. Should any part of the Waiver for any reason
be judged legally invalid or ineffective under applicable law, then the
Waiver shall be preserved to the maximum extent permitted taking into
account Affirmer's express Statement of Purpose. In addition, to the
extent the Waiver is so judged Affirmer hereby grants to each affected
person a royalty-free, non transferable, non sublicensable, non exclusive,
irrevocable and unconditional license to exercise Affirmer's Copyright and
Related Rights in the Work (i) in all territories worldwide, (ii) for the
maximum duration provided by applicable law or treaty (including future
time extensions), (iii) in any current or future medium and for any number
of copies, and (iv) for any purpose whatsoever, including without
limitation commercial, advertising or promotional purposes (the
"License"). The License shall be deemed effective as of the date CC0 was
applied by Affirmer to the Work. Should any part of the License for any
reason be judged legally invalid or ineffective under applicable law, such
partial invalidity or ineffectiveness shall not invalidate the remainder
of the License, and in such case Affirmer hereby affirms that he or she
will not (i) exercise any of his or her remaining Copyright and Related
Rights in the Work or (ii) assert any associated claims and causes of
action with respect to the Work, in either case contrary to Affirmer's
express Statement of Purpose.

4. Limitations and Disclaimers.

a. No trademark or patent rights held by Affirmer are waived, abandoned,
surrendered, licensed or otherwise affected by this document.
b. Affirmer offers the Work as-is and makes no representations or
warranties of any kind concerning the Work, express, implied,
statutory or otherwise, including without limitation warranties of
title, merchantability, fitness for a particular purpose, non
infringement, or the absence of latent or other defects, accuracy, or
the present or absence of errors, whether or not discoverable, all to
the greatest extent permissible under applicable law.
c. Affirmer disclaims responsibility for clearing rights of other persons
that may apply to the Work or any use thereof, including without
limitation any person's Copyright and Related Rights in the Work.
Further, Affirmer disclaims responsibility for obtaining any necessary
consents, permissions or other rights required for any use of the
Work.
d. Affirmer understands and acknowledges that Creative Commons is not a
party to this document and has no duty or obligation with respect to
this CC0 or use of the Work.

+ 13
- 0
vst2_bin/plugins/Template_shared/README.md View File

@@ -0,0 +1,13 @@

# VCV Template plugin

The VCV Template plugin is a starting point for developing your own plugins for VCV Rack.
It implements a simple sine VCO, demonstrating inputs, outputs, parameters, and other concepts.

See https://vcvrack.com/manual/PluginDevelopmentTutorial.html for a development tutorial.

## Contributing

I welcome Issues and Pull Requests to this repository if you have suggestions for improvement.

This template is released into the public domain ([CC0](https://creativecommons.org/publicdomain/zero/1.0/)).

BIN
vst2_bin/plugins/Template_shared/plugin.dll View File


+ 243
- 0
vst2_bin/plugins/Template_shared/res/MyModule.svg View File

@@ -0,0 +1,243 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="90"
height="380"
viewBox="0 0 23.812501 100.54167"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="MyModule.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="188.48062"
inkscape:cy="170.63765"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:snap-bbox="true"
inkscape:snap-page="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:window-width="1600"
inkscape:window-height="900"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-196.45832)">
<path
style="opacity:1;vector-effect:none;fill:#f0f0f0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.48607069;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
d="M 0,196.45831 H 23.8125 V 296.99999 H 0 Z"
id="rect817"
inkscape:connector-curvature="0" />
<g
aria-label="My Module"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88055563px;line-height:6.61458302px;font-family:DINPro;-inkscape-font-specification:DINPro;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text925"
transform="translate(0,-1.0583333)">
<path
d="m 5.3546533,207.98659 v -2.76296 H 5.0597311 l -0.8770056,1.95968 -0.9002889,-1.95968 H 2.9875144 v 2.76296 h 0.2949222 v -2.09938 l 0.76835,1.66476 h 0.2522361 l 0.7567084,-1.66476 v 2.09938 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path956"
inkscape:connector-curvature="0" />
<path
d="M 7.4478493,206.07735 H 7.1451659 l -0.5199944,1.53282 -0.523875,-1.53282 H 5.7986131 l 0.6868584,1.87043 -0.1358195,0.37254 c -0.062089,0.17462 -0.1202972,0.23671 -0.314325,0.23671 H 5.949955 v 0.24835 h 0.120297 c 0.1358195,0 0.2716389,-0.0349 0.3725334,-0.13193 0.054328,-0.0505 0.097014,-0.1203 0.1358194,-0.22508 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path958"
inkscape:connector-curvature="0" />
<path
d="m 11.220962,207.98659 v -2.76296 H 10.92604 l -0.877006,1.95968 -0.9002887,-1.95968 H 8.853823 v 2.76296 h 0.2949223 v -2.09938 l 0.76835,1.66476 h 0.2522357 l 0.756709,-1.66476 v 2.09938 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path960"
inkscape:connector-curvature="0" />
<path
d="m 13.430574,207.03197 c 0,-0.29492 -0.0388,-0.56268 -0.232833,-0.76059 -0.131939,-0.13194 -0.314325,-0.21731 -0.547159,-0.21731 -0.232833,0 -0.415219,0.0854 -0.547158,0.21731 -0.194028,0.19791 -0.232833,0.46567 -0.232833,0.76059 0,0.29492 0.0388,0.56268 0.232833,0.76059 0.131939,0.13194 0.314325,0.21731 0.547158,0.21731 0.232834,0 0.41522,-0.0854 0.547159,-0.21731 0.194028,-0.19791 0.232833,-0.46567 0.232833,-0.76059 z m -0.2794,0 c 0,0.21343 -0.01164,0.45015 -0.151342,0.58985 -0.08925,0.0892 -0.21343,0.1397 -0.34925,0.1397 -0.135819,0 -0.256116,-0.0504 -0.345369,-0.1397 -0.1397,-0.1397 -0.155222,-0.37642 -0.155222,-0.58985 0,-0.21343 0.01552,-0.45014 0.155222,-0.58984 0.08925,-0.0893 0.20955,-0.1397 0.345369,-0.1397 0.13582,0 0.259998,0.0504 0.34925,0.1397 0.1397,0.1397 0.151342,0.37641 0.151342,0.58984 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path962"
inkscape:connector-curvature="0" />
<path
d="m 15.441855,207.98659 v -2.76296 h -0.2794 v 1.07492 c -0.155223,-0.19791 -0.329848,-0.24448 -0.539398,-0.24448 -0.194027,0 -0.364772,0.066 -0.465666,0.16686 -0.194028,0.19403 -0.232834,0.51224 -0.232834,0.81104 0,0.2988 0.03881,0.61701 0.232834,0.81104 0.100894,0.10089 0.271639,0.16686 0.465666,0.16686 0.20955,0 0.388056,-0.0505 0.543278,-0.25224 v 0.22896 z m -0.2794,-0.95462 c 0,0.37253 -0.06209,0.72955 -0.477309,0.72955 -0.415219,0 -0.481189,-0.35702 -0.481189,-0.72955 0,-0.37253 0.06597,-0.72954 0.481189,-0.72954 0.41522,0 0.477309,0.35701 0.477309,0.72954 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path964"
inkscape:connector-curvature="0" />
<path
d="m 17.622423,207.98659 v -1.90924 h -0.2794 v 1.17581 c 0,0.33373 -0.190147,0.50836 -0.477308,0.50836 -0.287161,0 -0.465667,-0.17075 -0.465667,-0.50836 v -1.17581 h -0.2794 v 1.2185 c 0,0.22119 0.05821,0.40358 0.194028,0.53552 0.116417,0.11641 0.287161,0.1785 0.492831,0.1785 0.21343,0 0.403577,-0.0815 0.539397,-0.23671 v 0.21343 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path966"
inkscape:connector-curvature="0" />
<path
d="m 19.001961,207.98659 v -0.2406 h -0.151342 c -0.194028,0 -0.256116,-0.0931 -0.256116,-0.2794 v -2.24296 h -0.2794 v 2.2546 c 0,0.29105 0.151341,0.50836 0.485069,0.50836 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path968"
inkscape:connector-curvature="0" />
<path
d="m 20.839343,207.1057 v -0.12806 c 0,-0.56656 -0.291042,-0.92357 -0.783872,-0.92357 -0.48507,0 -0.783873,0.36089 -0.783873,0.9779 0,0.67522 0.329848,0.9779 0.83432,0.9779 0.325967,0 0.504472,-0.10089 0.6985,-0.29492 l -0.190147,-0.16687 c -0.151342,0.15135 -0.2794,0.21732 -0.500592,0.21732 -0.364772,0 -0.562681,-0.2406 -0.562681,-0.6597 z m -0.2794,-0.20955 h -1.008945 c 0.0078,-0.15522 0.01552,-0.21343 0.05821,-0.3182 0.07373,-0.17463 0.244475,-0.28717 0.446264,-0.28717 0.201789,0 0.372533,0.11254 0.446264,0.28717 0.04269,0.10477 0.05045,0.16298 0.05821,0.3182 z"
style="font-size:3.88055563px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path970"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Pitch"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:6.61458302px;font-family:DINPro;-inkscape-font-specification:DINPro;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text946"
transform="translate(0,-2.1166665)">
<path
d="m 10.343313,234.08358 c 0,-0.36124 -0.254,-0.58984 -0.6208893,-0.58984 H 8.9745348 v 2.00942 h 0.2144889 v -0.82691 h 0.5334 c 0.3668893,0 0.6208893,-0.23142 0.6208893,-0.59267 z m -0.214489,0 c 0,0.26529 -0.174978,0.40076 -0.4261558,0.40076 H 9.1890237 v -0.79869 h 0.5136445 c 0.2511778,0 0.4261558,0.13264 0.4261558,0.39793 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path973"
inkscape:connector-curvature="0" />
<path
d="m 10.921471,235.50316 v -1.38853 h -0.2032 v 1.38853 z m 0.01411,-1.78365 v -0.2286 h -0.2286 v 0.2286 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path975"
inkscape:connector-curvature="0" />
<path
d="m 11.968251,235.50316 v -0.17498 h -0.107244 c -0.129822,0 -0.189089,-0.0762 -0.189089,-0.2032 v -0.84667 h 0.296333 v -0.15522 h -0.296333 v -0.43462 h -0.2032 v 0.43462 H 11.29374 v 0.15522 h 0.174978 v 0.85232 c 0,0.20602 0.118533,0.37253 0.3556,0.37253 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path977"
inkscape:connector-curvature="0" />
<path
d="m 13.346113,235.31407 -0.138289,-0.13264 c -0.104422,0.11571 -0.186267,0.15804 -0.318911,0.15804 -0.135467,0 -0.248356,-0.0536 -0.321733,-0.15804 -0.06491,-0.0903 -0.09031,-0.19756 -0.09031,-0.37254 0,-0.17498 0.0254,-0.28222 0.09031,-0.37253 0.07338,-0.10442 0.186266,-0.15805 0.321733,-0.15805 0.132644,0 0.214489,0.0395 0.318911,0.15523 l 0.138289,-0.12983 c -0.143933,-0.15522 -0.265289,-0.20602 -0.4572,-0.20602 -0.349956,0 -0.615244,0.23707 -0.615244,0.7112 0,0.47414 0.265288,0.7112 0.615244,0.7112 0.191911,0 0.313267,-0.0508 0.4572,-0.20602 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path979"
inkscape:connector-curvature="0" />
<path
d="m 14.825619,235.50316 v -0.89182 c 0,-0.31327 -0.186267,-0.51365 -0.499534,-0.51365 -0.155222,0 -0.287866,0.0536 -0.389466,0.16934 v -0.77329 h -0.2032 v 2.00942 h 0.2032 v -0.85796 c 0,-0.23989 0.138289,-0.36689 0.347133,-0.36689 0.208844,0 0.338667,0.12418 0.338667,0.36689 v 0.85796 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path981"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="1V/oct"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:6.61458302px;font-family:DINPro;-inkscape-font-specification:DINPro;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text950"
transform="translate(0,-6.0862931)">
<path
d="m 8.7942542,262.66519 v -2.00942 h -0.2032 l -0.3753555,0.32455 v 0.23143 l 0.3753555,-0.3302 v 1.78364 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path984"
inkscape:connector-curvature="0" />
<path
d="m 10.853021,260.65577 h -0.225778 l -0.522111,1.6256 -0.5221108,-1.6256 H 9.3572434 l 0.6603996,2.00942 h 0.174978 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path986"
inkscape:connector-curvature="0" />
<path
d="m 11.88278,260.44692 h -0.200378 l -0.804333,2.42712 h 0.200377 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path988"
inkscape:connector-curvature="0" />
<path
d="m 13.196436,261.97092 c 0,-0.21448 -0.02822,-0.40922 -0.169334,-0.55315 -0.09596,-0.096 -0.2286,-0.15805 -0.397933,-0.15805 -0.169333,0 -0.301978,0.0621 -0.397933,0.15805 -0.141111,0.14393 -0.169334,0.33867 -0.169334,0.55315 0,0.21449 0.02822,0.40923 0.169334,0.55316 0.09595,0.096 0.2286,0.15804 0.397933,0.15804 0.169333,0 0.301978,-0.0621 0.397933,-0.15804 0.141111,-0.14393 0.169334,-0.33867 0.169334,-0.55316 z m -0.2032,0 c 0,0.15523 -0.0085,0.32738 -0.110067,0.42898 -0.06491,0.0649 -0.155222,0.1016 -0.254,0.1016 -0.09878,0 -0.186267,-0.0367 -0.251178,-0.1016 -0.1016,-0.1016 -0.112889,-0.27375 -0.112889,-0.42898 0,-0.15522 0.01129,-0.32737 0.112889,-0.42897 0.06491,-0.0649 0.1524,-0.1016 0.251178,-0.1016 0.09878,0 0.189089,0.0367 0.254,0.1016 0.1016,0.1016 0.110067,0.27375 0.110067,0.42897 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path990"
inkscape:connector-curvature="0" />
<path
d="m 14.625318,262.4761 -0.138289,-0.13264 c -0.104422,0.11571 -0.186267,0.15804 -0.318911,0.15804 -0.135467,0 -0.248356,-0.0536 -0.321733,-0.15804 -0.06491,-0.0903 -0.09031,-0.19756 -0.09031,-0.37254 0,-0.17497 0.0254,-0.28222 0.09031,-0.37253 0.07338,-0.10442 0.186266,-0.15804 0.321733,-0.15804 0.132644,0 0.214489,0.0395 0.318911,0.15522 l 0.138289,-0.12982 c -0.143933,-0.15523 -0.265289,-0.20603 -0.4572,-0.20603 -0.349956,0 -0.615244,0.23707 -0.615244,0.7112 0,0.47414 0.265288,0.7112 0.615244,0.7112 0.191911,0 0.313267,-0.0508 0.4572,-0.20602 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path992"
inkscape:connector-curvature="0" />
<path
d="m 15.546024,262.66519 v -0.17498 H 15.43878 c -0.129822,0 -0.189089,-0.0762 -0.189089,-0.2032 v -0.84666 h 0.296333 v -0.15523 h -0.296333 v -0.43462 h -0.2032 v 0.43462 h -0.174978 v 0.15523 h 0.174978 v 0.85231 c 0,0.20602 0.118533,0.37253 0.3556,0.37253 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path994"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Sine"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:6.61458302px;font-family:DINPro;-inkscape-font-specification:DINPro;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text954"
transform="translate(0,-10.054167)">
<path
d="m 10.714958,289.26526 c 0,-0.16651 -0.05927,-0.3048 -0.169334,-0.39793 -0.08467,-0.0734 -0.1778,-0.11289 -0.366889,-0.14111 l -0.220133,-0.0339 c -0.1044223,-0.0169 -0.2088445,-0.0564 -0.2709334,-0.11006 -0.062089,-0.0536 -0.090311,-0.13265 -0.090311,-0.23143 0,-0.22295 0.1552222,-0.37253 0.4233334,-0.37253 0.211667,0 0.344311,0.0593 0.468489,0.17216 l 0.138289,-0.13829 c -0.172156,-0.15522 -0.341489,-0.22014 -0.598311,-0.22014 -0.3979337,0 -0.643467,0.22578 -0.643467,0.56727 0,0.16087 0.0508,0.28505 0.1524,0.37536 0.087489,0.0762 0.2116666,0.127 0.3697111,0.1524 l 0.2342439,0.0367 c 0.146756,0.0226 0.197556,0.0395 0.262467,0.0959 0.06491,0.0565 0.09596,0.14676 0.09596,0.25118 0,0.23424 -0.180623,0.37253 -0.474134,0.37253 -0.2257774,0 -0.3809996,-0.0536 -0.5475107,-0.22013 l -0.1467556,0.14675 c 0.1890889,0.18909 0.3866445,0.26529 0.6886223,0.26529 0.417689,0 0.694267,-0.21731 0.694267,-0.57009 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path997"
inkscape:connector-curvature="0" />
<path
d="m 11.329893,289.81842 v -1.38853 h -0.2032 v 1.38853 z m 0.01411,-1.78364 v -0.2286 h -0.2286 v 0.2286 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path999"
inkscape:connector-curvature="0" />
<path
d="m 12.935473,289.81842 v -0.889 c 0,-0.16087 -0.04515,-0.29069 -0.143933,-0.38664 -0.08467,-0.0847 -0.206022,-0.12983 -0.3556,-0.12983 -0.155222,0 -0.290689,0.0564 -0.389467,0.16934 v -0.1524 h -0.2032 v 1.38853 h 0.2032 v -0.85513 c 0,-0.24271 0.135467,-0.36971 0.344311,-0.36971 0.208845,0 0.341489,0.12417 0.341489,0.36971 v 0.85513 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path1001"
inkscape:connector-curvature="0" />
<path
d="m 14.494751,289.17778 v -0.0931 c 0,-0.41204 -0.211667,-0.67169 -0.570089,-0.67169 -0.352778,0 -0.570089,0.26247 -0.570089,0.7112 0,0.49107 0.239889,0.7112 0.606778,0.7112 0.237067,0 0.366889,-0.0734 0.508,-0.21449 l -0.138289,-0.12135 c -0.110067,0.11007 -0.2032,0.15804 -0.364067,0.15804 -0.265289,0 -0.409222,-0.17497 -0.409222,-0.47977 z m -0.2032,-0.1524 h -0.733778 c 0.0056,-0.11289 0.01129,-0.15523 0.04233,-0.23143 0.05362,-0.127 0.1778,-0.20884 0.324556,-0.20884 0.146756,0 0.270933,0.0818 0.324556,0.20884 0.03104,0.0762 0.03669,0.11854 0.04233,0.23143 z"
style="font-size:2.82222223px;text-align:center;text-anchor:middle;stroke-width:0.26458332px"
id="path1003"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Tutorial"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:6.61458302px;font-family:DINPro;-inkscape-font-specification:DINPro;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text1008">
<path
d="M 8.5614537,289.39941 V 289.2075 H 7.1842093 v 0.19191 h 0.5813778 v 1.81751 H 7.980076 v -1.81751 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1010" />
<path
d="m 9.8262062,291.21692 v -1.38853 h -0.2032 v 0.85513 c 0,0.24271 -0.1382889,0.36971 -0.3471334,0.36971 -0.2088444,0 -0.3386666,-0.12418 -0.3386666,-0.36971 v -0.85513 H 8.7340061 v 0.88617 c 0,0.16087 0.042333,0.29351 0.1411112,0.38947 0.084667,0.0847 0.2088444,0.12982 0.3584222,0.12982 0.1552222,0 0.2935111,-0.0593 0.3922889,-0.17215 v 0.15522 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1012" />
<path
d="m 10.869017,291.21692 v -0.17498 h -0.107244 c -0.129822,0 -0.189089,-0.0762 -0.189089,-0.2032 v -0.84667 h 0.296333 v -0.15522 h -0.296333 v -0.43462 h -0.2032 v 0.43462 h -0.174978 v 0.15522 h 0.174978 v 0.85232 c 0,0.20602 0.118533,0.37253 0.3556,0.37253 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1014" />
<path
d="m 12.31179,290.52265 c 0,-0.21449 -0.02822,-0.40922 -0.169333,-0.55315 -0.09596,-0.096 -0.2286,-0.15805 -0.397934,-0.15805 -0.169333,0 -0.301977,0.0621 -0.397933,0.15805 -0.141111,0.14393 -0.169333,0.33866 -0.169333,0.55315 0,0.21449 0.02822,0.40922 0.169333,0.55316 0.09596,0.096 0.2286,0.15804 0.397933,0.15804 0.169334,0 0.301978,-0.0621 0.397934,-0.15804 0.141111,-0.14394 0.169333,-0.33867 0.169333,-0.55316 z m -0.2032,0 c 0,0.15522 -0.0085,0.32738 -0.110067,0.42898 -0.06491,0.0649 -0.155222,0.1016 -0.254,0.1016 -0.09878,0 -0.186266,-0.0367 -0.251177,-0.1016 -0.1016,-0.1016 -0.112889,-0.27376 -0.112889,-0.42898 0,-0.15522 0.01129,-0.32738 0.112889,-0.42898 0.06491,-0.0649 0.1524,-0.1016 0.251177,-0.1016 0.09878,0 0.189089,0.0367 0.254,0.1016 0.1016,0.1016 0.110067,0.27376 0.110067,0.42898 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1016" />
<path
d="m 13.670117,289.94127 c -0.09878,-0.0988 -0.200378,-0.12982 -0.333022,-0.12982 -0.160867,0 -0.313267,0.0706 -0.389467,0.18627 v -0.16933 h -0.2032 v 1.38853 h 0.2032 v -0.85231 c 0,-0.21167 0.129822,-0.37254 0.333022,-0.37254 0.107245,0 0.163689,0.0254 0.239889,0.1016 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1018" />
<path
d="m 14.138253,291.21692 v -1.38853 h -0.2032 v 1.38853 z m 0.01411,-1.78365 v -0.2286 h -0.2286 v 0.2286 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1020" />
<path
d="m 15.642233,291.21692 v -0.94262 c 0,-0.30198 -0.183445,-0.46285 -0.555978,-0.46285 -0.225778,0 -0.366889,0.0452 -0.491067,0.20602 l 0.138289,0.127 c 0.08184,-0.11571 0.172156,-0.15804 0.349956,-0.15804 0.254,0 0.3556,0.1016 0.3556,0.3048 v 0.13264 h -0.417689 c -0.310445,0 -0.479778,0.15805 -0.479778,0.40076 0,0.11007 0.03669,0.21449 0.104422,0.28222 0.08749,0.0903 0.200378,0.127 0.392289,0.127 0.186267,0 0.287867,-0.0367 0.400756,-0.14958 v 0.13265 z m -0.2032,-0.49107 c 0,0.11571 -0.02258,0.19474 -0.07056,0.23989 -0.08749,0.0847 -0.191911,0.0931 -0.310444,0.0931 -0.220134,0 -0.318912,-0.0762 -0.318912,-0.23706 0,-0.16087 0.1016,-0.24554 0.310445,-0.24554 h 0.389467 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1022" />
<path
d="m 16.628291,291.21692 v -0.17498 h -0.110067 c -0.141111,0 -0.186267,-0.0677 -0.186267,-0.2032 v -1.63124 h -0.2032 v 1.63971 c 0,0.21166 0.110067,0.36971 0.352778,0.36971 z"
style="font-size:2.82222223px;stroke-width:0.26458332px"
id="path1024" />
</g>
</g>
</svg>

BIN
vst2_bin/plugins/dBiz/plugin.dll View File


+ 4
- 0
vst2_bin/settings.json View File

@@ -16,6 +16,10 @@
"lastPath": "",
"moduleBrowser": {
"favorites": [
{
"plugin": "Template_shared",
"model": "MyModule"
},
{
"plugin": "Alikins",
"model": "SpecificValue"


BIN
vst2_bin/veeseevstrack_effect.dll__X86_LEGACY View File


BIN
vst2_bin/veeseevstrack_instr.dll__ View File


BIN
vst2_bin/veeseevstrack_instr.dll__X86_LEGACY__ View File


+ 1
- 1
vst2_common.mk View File

@@ -13,6 +13,6 @@ PLAF_OBJ=

include make.objects

ALL_OBJ=$(MAIN_OBJ)
ALL_OBJ= $(MAIN_OBJ)

include vst2_common_msvc_post.mk

+ 1
- 1
vst2_common_staticlibs.mk View File

@@ -8,7 +8,7 @@ EXTRALIBS+= $(call plugin_lib,Bidoo)
EXTRALIBS+= $(call plugin_lib,Bogaudio)
#EXTRALIBS+= $(call plugin_lib,BOKONTEPByteBeatMachine) # unstable
EXTRALIBS+= $(call plugin_lib,cf)
EXTRALIBS+= $(call plugin_lib,dBiz)
#EXTRALIBS+= $(call plugin_lib,dBiz) # now a DLL (13Jul2018)
EXTRALIBS+= $(call plugin_lib,DHE-Modules)
EXTRALIBS+= $(call plugin_lib,DrumKit)
EXTRALIBS+= $(call plugin_lib,ErraticInstruments)


Loading…
Cancel
Save