Substation Open Source Release

It’s been a year, which means Substation is now open source! Check out the repository here:

This open-source release includes the source code for Substation for VCV Rack, along with some of its dependencies. It does not include the graphical assets used in the paid version of the plugin, as they are under copyright. Instead, replacement visual assets are provided under the terms of this open-source release’s license.

Be aware that Slime Child Audio cannot provide any support or assistance for this open-source release. Please purchase the paid version of Substation for VCV Rack if you require product support.

Edit: Don’t forget to make dep before make install :slight_smile:

Edit: In response to the stream of unhappy DMs and emails I’ve gotten, I would like to clarify the intent of this open source release: The goal of releasing Substation’s source was to provide a resource for other developers (or anyone else who is curious) to take inspiration from and learn more about how our plugins work.

The intent was not to provide a free or limited alternative to the paid plugin. Substation is already very reasonably priced, and we continue to offer community / education discounts on our website for anyone that requires one.

If you have a complaint about how something in the open source release works, or wish it had some additional features, you are welcome to add them yourself, provided you follow the attached license.

With that in mind, I am revising our policy of releasing open source versions of all plugins; this will be the first and last Slime Child plugin to do that. If I keep getting support requests for or criticisms about Substation’s open source release, I will just take the repository down.

29 Likes

Happy birthday!! Such a great plugin!

3 Likes

Oh, cool! I’m as excited to read this as I’d be to read a great new novel.

Keep up the awesome work, @slimechildaudio! Thanks for all the sounds!

1 Like

Amazing, thanks so much for the release, looking forward to learning from it! I understand that

Be aware that Slime Child Audio cannot provide any support or assistance for this open- source release.

so not expecting help with this, but has anyone else managed to compile? I’m getting the following

_MAC -mmacosx-version-min=10.9  -c -o build/src/Clock.cpp.o src/Clock.cpp
src/Clock.cpp:63:7: error: 'slime::plugin::substation::ClockModule::onReset' hides overloaded virtual function [-Werror,-Woverloaded-virtual]
        void onReset(void) override {
             ^
dep/slime4rack/include/slime/engine/Module.hpp:21:7: note: hidden overloaded virtual function 'slime::engine::Module::onReset' declared here: different number of parameters (1 vs 0)
        void onReset(const ResetEvent& e) override {
             ^

compiling on MacOS for Rack 2.0.6. Looks like a possible name clash, that maybe different compiler wouldn’t complain about?

The following is one possible fix (and repeated for other modules), but better to hear if there is something more proper to do (or if I’m missing something).

diff --git a/src/Clock.cpp b/src/Clock.cpp
index 72d02ae..7839013 100644
--- a/src/Clock.cpp
+++ b/src/Clock.cpp
@@ -44,7 +44,8 @@ struct ClockModule : slime::engine::Module {
 	ClockModule(void) {
 		config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
 
-		onReset();
+		ResetEvent e;
+		onReset(e);
 
 		configInput(RUN_INPUT, "Run enable");
 		configInput(SYNC_INPUT, "Sync");
@@ -60,7 +61,7 @@ struct ClockModule : slime::engine::Module {
 		param_divider.setDivision(64);  // Min 689 Hz
 	}
 
-	void onReset(void) override {
+	void onReset(const ResetEvent& e) override {
 		base_clock.reset();
 		mult_clock.reset();
 		run_trigger.reset();


1 Like

That’s strange! I don’t see that error when I compile for Mac :thinking:

1 Like

Bit more info to help track things down:

Substation commit 06b56f2ec3cfda9a5c87185297c7846097dba57b	5cf59e9	C. Violet Pines <login@corianderpines.org>	9 Feb 2022 at 05:37
c++ --version
Apple clang version 13.0.0 (clang-1300.0.29.30)
Target: x86_64-apple-darwin21.2.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

If I make the above change to all plugins it compiles with make dep && make install, and I get the following (replacement graphics), is that what you expect?

Looks right to me. Very odd! I’m building with clang 11.0.0 (because my computer is old and sad and can’t run anything newer), so perhaps that’s it. :woman_shrugging: Glad you got it working though!

1 Like

It sounds so lush, already having loads of fun with them!

Re the fix, I suppose it depends if you intended the resets to actually be overrides of Rack onReset() or just to be a generic reset helper. If the latter, the following also works, and is perhaps more what you intended? EDIT: it’s not

Alternative patch (don't use)
diff --git a/src/Clock.cpp b/src/Clock.cpp
index 72d02ae..8543281 100644
--- a/src/Clock.cpp
+++ b/src/Clock.cpp
@@ -44,7 +44,7 @@ struct ClockModule : slime::engine::Module {
 	ClockModule(void) {
 		config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
 
-		onReset();
+		reset();
 
 		configInput(RUN_INPUT, "Run enable");
 		configInput(SYNC_INPUT, "Sync");
@@ -60,7 +60,7 @@ struct ClockModule : slime::engine::Module {
 		param_divider.setDivision(64);  // Min 689 Hz
 	}
 
-	void onReset(void) override {
+	void reset(void) {
 		base_clock.reset();
 		mult_clock.reset();
 		run_trigger.reset();

and so on for the other modules.

2 Likes

Override is the intent here. Rack’s Module.hpp has both virtual void onReset(const ResetEvent& e) and virtual void onReset(), the latter of which is called by the former if it isn’t overridden. Not sure why clang isn’t associating the override with the 0-arg method.

2 Likes

Maybe in the future I’ll just use the unary version, since the nullary one has been deprecated.

2 Likes

FYI make dep will also do this for you (I also missed this initially).

1 Like

nice! may I suggest using the SPDX identifier for the license instead of a URL?

That’s amazing that you released the code. Some entitled haters seem to think their time complaining is as valuable as your time making and sharing something valuable… but alas, the great pandemic of Internetus Juvinelius catches many.

What I can do is add my voice of appreciation. It’s generous and admirable that you released the code so others can learn. Thank you!

6 Likes

At first I didn’t understand where @trevormeier was coming from. Then I read the update in the original post. That really is a shame.

7 Likes

If anyone would be kind enough to post a windows build I would appreciate it. I am currently unable to build on my system. TIA

Yeah same here.

I really don’t understand why anyone would complain about Substations open source release - iirc the developer stated very clearly right from the beginning that the source would be released after one year. And they did exactly what they said they would do. Kudos.

7 Likes

OMG! As an owner of substation I’ll have to say, that I am very happy about the open source release and your intention! Please ignore those trolls.

8 Likes

This saddens me, please don’t let idiots taint your benevolence.

5 Likes

i can also just say a big thank you for providing the source code for the plugins. i think you were very clear that there is no support for it and i think this is completely ok. i have bought your plugins before already, but having the source code of the plugins i can also play around with them on linux on arm systems for which no official build is available.

so once more a big thank you - hexdump

3 Likes

Second what everyone else has posted in here. If you want to build yourself from open source repos then you’d best get comfortable diagnosing and fixing build platform differences, and other such things.

My advice to the Substation crew would be to hang tight on any decisions about the long-term. The first day of release is always a bit of a wild ride.

Either way, I’m sure the vast majority appreciate the generosity in releasing a paid product as open source.

7 Likes