Would Any Rack Plugin Devs Like To Join The Surge Team?

Hi all!

So over in Surge land we’ve been doing an enormous amount of work on several synths (Surge, B-Step, Monique, Short-Circuit), libraries (the tuning lib used in lots of places, refactoring the core of surge into standalone libraries) and platforms (CLAP, Bespoke, and to an extent Rack-integration). If you haven’t used Surge, I encourage you to give it a try or google some of the reviews!

But we’ve sort of not been keeping the surge-rack modules up to date (other than doing a port to v2, which is done)

I wrote the surge rack modules 2 years ago to debug the surge DSP, honestly, and they turned out to be somewhat useful, but since then I haven’t turned to them and, more critically, I don’t really use rack to make music so I don’t have good instincts as to what makes modules work well.

Moreover we’ve done 2 years of work on surge (new oscillator types, FX, filters, modulators, and more) and none of that is in the rack modules which are still based off of Surge 1.7, not Surge XT.

So I wanted to toss a note onto the community which is just shamelessly recruiting for someone to join us in the surge synth team and help with these modules. The surge synth team is a group of folks around the world working on our projects. Joining is easy. Show up, do stuff, don’t be a jerk. We pride ourselves on being a dynamic, welcoming, music-software based open source community. Most of our action happens on the surge discord which I’m happy to link if someone is interested.

Right now I have a branch of the rack modules which build agains the newest surge codebase but they only build on mac in our CI pipeline. Windows crashes the mingw compiler; linux has some bug i haven’t chased. But a cross platform dev could get that sorted I bet.

And then there’s a lot we could add. We’ve added like 10 filter models, 15 FX, and I think 50 wave shaper shapes since I did the port. The UI could use a refresh. And just generally there’s a chunk of an interesting open source project which is at the intersection of a very popular soft synth and a very popular euro-rack system which is just kinda there for someone to take a swing at, with help from those of us in surge land of course.

If you are interested please reply here, or find me in surge discord, or figure out why this PR fails to build and push a correction to our repo and get to work! Pull requests · surge-synthesizer/surge-rack · GitHub. Whatever you prefer :slight_smile:

14 Likes

Thanks a bunch Paul. I hope some enterprising developer jumps on this. Some of the Surge modules are really wonderful and it sounds like there could be a lot more. Fingers crossed!

3 Likes

yeah i just spent half an hour on it and could make win almost build on a windows box, just not in our ci pipeline. I think it’s all tractable, just requires someone who wants to spend a bit of time following up.

And yes, we have some amazing filter modules now (try them all in the plugin if you want!) and they are all SIMD parallelized across voices - even the complicated non-linear ones - so I think those could be very nice as a standalone rack module.

3 Likes

pinging @netboy3 ?

3 Likes

Seconded @netboy3

Any release approaching? :flushed: ← (this is meant to be a curious and wishful although not very hopeful emoji)

You could’ve just checked the repository and seen that there hasn’t been any change.

The team is clearly still looking for contributors to the rack port, so until someone steps up to fill that gap there is no release to be expected.

Wishfully asking is like watching water boil or grass grow. It will only make things seem to take longer :wink:

The man who asks a question is a fool for a minute, the man who does not ask is a fool for life. :wink:

7 Likes

I did a port to the xt codebase. There’s an open pr. It works on my Mac against the new codebase.

The windows toolchain code dumps in ci, unlike msvc which we use for production surge. And takes forever

So if someone wants to help us grapple with those it’s an easy upgrade and then we could add all the new filters and oscillators too

But we need help to do that

5 Likes

Hi,

I looked into this and fixed the issues so it compiles now on all platforms, see PR fix compile issues by qno · Pull Request #315 · surge-synthesizer/surge-rack · GitHub

I added also a Github workflow action for CI builds on native OS, which means the plugin is compiled on MacOS, Windows and Linux VMs which are available from Github. This can be checked under the Github Actions tab.

Using Github action is much simpler than Azure, because it doesn’t require any repo setup on a third party service for other participants.

At first I tried to cross compile the project with the rack-plugin-toolchain Docker container in CI, but it took way too much time and I had to add ugly workarounds to sort out toolchain issues.

My changes just make the plugin build working, but I think it is still far from an optimal solution to build the plugin at all.

The plugins for Windows, Mac and Linux versions can be downloaded from the related Github Action run.

3 Likes

here the compiled version crashes VCV when I try loading the VCO module,
Win11 and VCV 2.1.2

downloaded, and played for a few minutes in VCV rack free 2.1.2 on windows 11. then crash to desktop. (When adding Surge VCO) No errors, nothing in log file.

However, this was logged in the end of my log.txt, perhaps the “userdatapath” and “datapath” and look “suspicious”

[12.934 info src/app/Browser.cpp:89 chooseModel] Creating module Surge for Rack SurgeLFO
[12.942 info src/SurgeModuleCommon.hpp:88 showBuildInfo] [SurgeRack] Instance: Module=LFO BuildInfo=os:win pluggit:a5b60fb surgegit:60228e8 buildtime=Jul 13 2022 18:37:42
[13.956 info src/SurgeModuleCommon.cpp:105 setupSurgeCommon] [SurgeRack] storage::dataPath = 'C'
[13.956 info src/SurgeModuleCommon.cpp:106 setupSurgeCommon] [SurgeRack] storage::userDataPath = 'C'
[13.958 info src/app/Browser.cpp:93 chooseModel] Creating module widget Surge for Rack SurgeLFO
[15.006 info src/patch.cpp:211 saveAutosave] Saving autosave C:/Users/jpn99/Documents/Rack2/autosave/patch.json
[15.008 info src/settings.cpp:470 save] Saving settings C:/Users/jpn99/Documents/Rack2/settings.json
[20.137 info src/app/Browser.cpp:89 chooseModel] Creating module Surge for Rack SurgeDelay
[20.137 info src/SurgeModuleCommon.hpp:88 showBuildInfo] [SurgeRack] Instance: Module=DELAY BuildInfo=os:win pluggit:a5b60fb surgegit:60228e8 buildtime=Jul 13 2022 18:37:42
[20.479 info src/SurgeModuleCommon.cpp:105 setupSurgeCommon] [SurgeRack] storage::dataPath = 'C'
[20.479 info src/SurgeModuleCommon.cpp:106 setupSurgeCommon] [SurgeRack] storage::userDataPath = 'C'
[20.481 info src/app/Browser.cpp:93 chooseModel] Creating module widget Surge for Rack SurgeDelay
[24.316 info src/app/Browser.cpp:89 chooseModel] Creating module Surge for Rack SurgeReverb2
[24.316 info src/SurgeModuleCommon.hpp:88 showBuildInfo] [SurgeRack] Instance: Module=REVERB2 BuildInfo=os:win pluggit:a5b60fb surgegit:60228e8 buildtime=Jul 13 2022 18:37:42
[24.644 info src/SurgeModuleCommon.cpp:105 setupSurgeCommon] [SurgeRack] storage::dataPath = 'C'
[24.644 info src/SurgeModuleCommon.cpp:106 setupSurgeCommon] [SurgeRack] storage::userDataPath = 'C'
[24.648 info src/app/Browser.cpp:93 chooseModel] Creating module widget Surge for Rack SurgeReverb2
[30.018 info src/patch.cpp:211 saveAutosave] Saving autosave C:/Users/jpn99/Documents/Rack2/autosave/patch.json
[30.020 info src/settings.cpp:470 save] Saving settings C:/Users/jpn99/Documents/Rack2/settings.json
[45.034 info src/patch.cpp:211 saveAutosave] Saving autosave C:/Users/jpn99/Documents/Rack2/autosave/patch.json
[45.036 info src/settings.cpp:470 save] Saving settings C:/Users/jpn99/Documents/Rack2/settings.json
[45.725 info src/app/Browser.cpp:89 chooseModel] Creating module Surge for Rack SurgeOSC
[45.725 info src/SurgeModuleCommon.hpp:88 showBuildInfo] [SurgeRack] Instance: Module=OSC BuildInfo=os:win pluggit:a5b60fb surgegit:60228e8 buildtime=Jul 13 2022 18:37:42
[46.062 info src/SurgeModuleCommon.cpp:105 setupSurgeCommon] [SurgeRack] storage::dataPath = 'C'
[46.062 info src/SurgeModuleCommon.cpp:106 setupSurgeCommon] [SurgeRack] storage::userDataPath = 'C'
[46.063 info src/app/Browser.cpp:93 chooseModel] Creating module widget Surge for Rack SurgeOSC

Cloning the xtupg branch locally and building a dist package fails on Windows

g++ -std=c++11 -Wsuggest-override  -Isurge/src/common -Isurge/src/common/dsp -Isurge/src/common/dsp/filters -Isurge/src/common/dsp/vembertech -Isurge/src/common/dsp/utilities -Isurge/src/common/dsp/oscillators -Isurge/src/common/dsp/modulators -Isurge/src/surge-testrunner -Isurge/libs/tinyxml/include -Isurge/libs/filesystem -Isurge/libs/LuaJitLib/LuaJIT/src -Isurge/ignore/rack-build/libs/filesystem/include -Isurge/libs/strnatcmp -Isurge/src/headless -Isurge/libs/tuning-library/include -include limits -DRELEASE=1  -DRACK_V1 -DTIXML_USE_STL=1 -std=c++17 -fvisibility=hidden -fvisibility-inlines-hidden -fPIC -I../../include -I../../dep/include -MMD -MP -g -O3 -march=nehalem -funsafe-math-optimizations -fno-omit-frame-pointer -Wall -Wextra -Wno-unused-parameter -DARCH_WIN -D_USE_MATH_DEFINES -municode  -Wno-suggest-override -Wno-sign-compare -Wno-ignored-qualifiers -Wno-unused-variable -Wno-char-subscripts -Wno-reorder -Wno-int-in-bool-context -DWINDOWS -Isurge/src/windows -DSURGE_RACK_BASE_VERSION=XT1-0-1 -DSURGE_RACK_PLUG_VERSION=a5b60fb -DSURGE_RACK_SURGE_VERSION=60228e84 -c -o build/src/SurgeChorus.cpp.o src/SurgeChorus.cpp
In file included from surge/src/common/SurgeStorage.h:22,
                 from src/Surge.cpp:2:
surge/libs/tinyxml/include/tinyxml/tinyxml.h:32:18: fatal error: filesystem/import.h: No such file or directory
   32 |         #include "filesystem/import.h"
      |                  ^~~~~~~~~~~~~~~~~~~~~
In file included from surge/src/common/SurgeStorage.h:22,
                 from src/SurgeModuleCommon.hpp:12,
                 from src/SurgeADSR.hpp:3,
                 from src/SurgeADSR.cpp:1:
surge/libs/tinyxml/include/tinyxml/tinyxml.h:32:18: fatal error: filesystem/import.h: No such file or directory
   32 |         #include "filesystem/import.h"
      |                  ^~~~~~~~~~~~~~~~~~~~~
In file included from surge/src/common/SurgeStorage.h:22,
                 from src/SurgeModuleCommon.hpp:12,
                 from src/SurgeBiquad.hpp:3,
                 from src/SurgeBiquad.cpp:1:
surge/libs/tinyxml/include/tinyxml/tinyxml.h:32:18: fatal error: filesystem/import.h: No such file or directory
   32 |         #include "filesystem/import.h"
      |                  ^~~~~~~~~~~~~~~~~~~~~
In file included from surge/src/common/SurgeStorage.h:22,
                 from src/SurgeModuleCommon.hpp:12,
                 from src/SurgeFX.hpp:3,
                 from src/SurgeChorus.cpp:1:
surge/libs/tinyxml/include/tinyxml/tinyxml.h:32:18: fatal error: filesystem/import.h: No such file or directory
   32 |         #include "filesystem/import.h"
      |                  ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
compilation terminated.
compilation terminated.
compilation terminated.
make: *** [../../compile.mk:71: build/src/SurgeBiquad.cpp.o] Error 1
make: *** Waiting for unfinished jobs....
make: *** [../../compile.mk:71: build/src/SurgeADSR.cpp.o] Error 1
make: *** [../../compile.mk:71: build/src/SurgeChorus.cpp.o] Error 1
make: *** [../../compile.mk:71: build/src/Surge.cpp.o] Error 1

For some reason the file is named import.h.in in the folder.

Can confirm the crash by Surge VCO too.

Backtraces from gdb:

warning: Critical error detected c0000374

Thread 27 received signal SIGTRAP, Trace/breakpoint trap.
[Switching to Thread 11712.0xdd0]
0x00007ff9560e755f in ntdll!RtlIsNonEmptyDirectoryReparsePointAllowed () from C:\Windows\SYSTEM32\ntdll.dll
(gdb) bt
#0  0x00007ff9560e755f in ntdll!RtlIsNonEmptyDirectoryReparsePointAllowed () from C:\Windows\SYSTEM32\ntdll.dll
#1  0x00007ff9560edd5a in ntdll!RtlpNtSetValueKey () from C:\Windows\SYSTEM32\ntdll.dll
#2  0x00007ff956094e82 in wcstok_s () from C:\Windows\SYSTEM32\ntdll.dll
#3  0x00007ff9560a8e0d in ntdll!memset () from C:\Windows\SYSTEM32\ntdll.dll
#4  0x00007ff9555e995c in msvcrt!free () from C:\Windows\System32\msvcrt.dll
#5  0x00007ff9119aa793 in plugin!_ZN8SurgeOSC7respawnEii () from C:\Users\Letheward\Documents\Rack2\plugins\SurgeRack\plugin.dll
#6  0x00007ff9119aa06e in plugin!_ZN8SurgeOSC7processERKN4rack6engine6Module11ProcessArgsE () from C:\Users\Letheward\Documents\Rack2\plugins\SurgeRack\plugin.dll
#7  0x00007ff91cd3fb6a in libRack!_ZN4rack6engine6Module9doProcessERKNS1_11ProcessArgsE () from D:\Software\Rack2\libRack.dll
#8  0x00007ff91cd3ab82 in libRack!_ZN4rack6engine6Engine9stepBlockEi () from D:\Software\Rack2\libRack.dll
#9  0x00007ff91cd3b486 in libRack!_ZN4rack6engine6Engine9stepBlockEi () from D:\Software\Rack2\libRack.dll
#10 0x00007ff927071371 in ?? () from D:\Software\Rack2\libstdc++-6.dll
#11 0x00007ff940064d53 in ?? () from D:\Software\Rack2\libwinpthread-1.dll
#12 0x00007ff95560ae06 in msvcrt!_beginthreadex () from C:\Windows\System32\msvcrt.dll
#13 0x00007ff95560aedc in msvcrt!_endthreadex () from C:\Windows\System32\msvcrt.dll
#14 0x00007ff9556f2784 in KERNEL32!BaseThreadInitThunk () from C:\Windows\System32\kernel32.dll
#15 0x00007ff956040c31 in ntdll!RtlUserThreadStart () from C:\Windows\SYSTEM32\ntdll.dll
#16 0x0000000000000000 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
(gdb)

I think the issues should be opened on the GitHub project GitHub - surge-synthesizer/surge-rack: Take Surge and factor it into modules for VCV Rack and discussed there.

And I will not fix them, as I was just trying to fix the build issues.

1 Like

Oh these issues will probably get fixed if you also install the surge plugin. Thank you so much @qno!

I thought this too. I do have Surge XT VST (works very nicely with Host/Host FX modules) installed on Windows but the data files are installed in C:\ProgramData\Surge XT not C:\Users\Steve\Documents\Surge XT

When I have a bit more time I’ll write up the issues on GitHub; there’s a bit more testing I want to do. I might have a couple of PR’s as well.

Wonderful thanks

I will look at and review the changes today and probably just merge them

This is great timing too. Xt 1.1 is almost ready and the rack modules can follow right behind

Thank you again!

3 Likes

This one looks like you perhaps didn’t make deps or submodule update?

@qno thanks so much - i merged all your changes to main just now.

so now lets get them working!

Lots we can do with the xt1.1 base also. All our non-linear filters are SIMD coded and polyphonic and single sample… a new filter module with the surge filters could be fun!

2 Likes