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

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

I can repro the OSC crash and know why it happens (we use a different, and better, memory allocation method for oscillators in XT; and the rack modules still assume we dont so it double frees). Nothing to do with path or assets.

Will fix it soon enough and report back here when I do.

Will also try and expose the new effects and oscillator types through the modules.

3 Likes

yeah that’s it

I can merge the appropriate change before the weekend then we can get testing as we head towards XT 1.1

4 Likes

ooh, that looks nice. I know your stuff is high quality, so can I assume there is little aliasing with any of these settings?

We run surge internally at 2xOS and downsample; and I do the same in these oscillator modules. So it will have the same alias characteristic as surge

The sine oscillator can alis a little in some of the modes; and one of the oscillators in XT not in 1.7 is called “Alias” which does alias. because it is meant to alias.

But yeah these are the same sound sources you get in surge xt.

I have the code pushed now so now I can also do the exciting thing of exposing the new oscillators and FX we added in the last couple of years. And, like I said, making that polyphonic non-linear filter module which could be very exciting.

6 Likes