Xynthii is now live

I’ve finally posted this after years of gestating. xynthii

If you’ve been around for a while, you may have encountered the standalone app I made in 2006, Xynthi. This was inspired by but not emulating the EMS Synthi A. It turns out that a lot of people used it, from Pita to Kevin Drumm to, well, me, and it had a pretty long life. Alas, 64-bit would finally become the rule, and the standalone no longer worked on modern machines (and never worked on Windows or Linux).

While I’ve had the code all this time, it’s from the days of .rtf files and uses a bunch of GUI classes and other stuff that is no longer relevant. Over the years, people have asked me about updating Xynthi, and it’s not like I didn’t want to. But I really only wanted to do it if I could make some kind of library in vanilla SC that would allow for building similar tools with a routing patchbay and flexible modulation. No need to add to the class library, relatively simple to distribute, not as a standalone app, but running in SC (which is, in a lot of ways, better, because you can control and modify it easily with SC code instead of treating it like just a softsynth).

So, that has happened. As far as a stable core library, there are some things that I very much want to refine, but a lot of problems seem to be solved (how to “sync” different modules, gui and MIDI learn, saving and loading presets, routing anywhere / anytime, attenuating patches, etc.). As far as the successor to Xynthi, well, there’s now xynthii, which I’ve been playing with quite a bit. It’s a super fun, nasty noise maker, rebuilt from the ground up (though I used the same reverb, because it still sounds great to me) and has some different features, a lot of UX improvement (did I mention MIDI learn?), all with the same spirit.

I’m also trying a method of installing extensions that’s as friendly as I could imagine for newbies. The built extensions are distributed in the repo, and there’s an init.scd file that should copy them to the proper place for Mac and Windows users. This is pretty experimental right now (it works for me on Windows). You can still install the extensions the traditional way, which, if you’re comfortable with that sort of thing, is probably the right way to go.

So, it’s a subtractive synth, a successor to an old piece of software from an old paradigm, but dang it still can do some wild s**t. Not to mention integrating with SC in general (check out the spectral-tracking.scd example that replaces the output with a Concat2, mixing xynthii with your input). And it gives you the building blocks to construct your own modular system with any kind of sound concept and quickly spin up a routing matrix and modulation “pod”. So, cool, right?

It has been beta tested by a few people, but it’s still early stages. Give it a run. Hopefully, you enjoy it. It’s obviously free, but if you have it in you to hit the donate button, that would really, really help right now. Thanks!

14 Likes

Hell yeah - rad Bhob!

/*
Josh Parmenter
www.realizedsound.net/josh
*/

1 Like

cool! wanted to try this out but it seems PortedPlugins is not compiled for M1/2/…

(mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64'))
*** ERROR: dlopen '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/VASEM12_scsynth.scx' err 'dlopen(/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/VASEM12_scsynth.scx, 0x0002): tried: '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/VASEM12_scsynth.scx' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/VASEM12_scsynth.scx' (no such file), '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/VASEM12_scsynth.scx' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64'))'
*** ERROR: dlopen '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/AnalogVintageDistortion_supernova.scx' err 'dlopen(/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/AnalogVintageDistortion_supernova.scx, 0x0002): tried: '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/AnalogVintageDistortion_supernova.scx' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/AnalogVintageDistortion_supernova.scx' (no such file), '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/AnalogVintageDistortion_supernova.scx' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64'))'
*** ERROR: dlopen '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/LPG_supernova.scx' err 'dlopen(/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/LPG_supernova.scx, 0x0002): tried: '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/LPG_supernova.scx' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/LPG_supernova.scx' (no such file), '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/LPG_supernova.scx' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64'))'
*** ERROR: dlopen '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/LPG_scsynth.scx' err 'dlopen(/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/LPG_scsynth.scx, 0x0002): tried: '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/LPG_scsynth.scx' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/LPG_scsynth.scx' (no such file), '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/LPG_scsynth.scx' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64'))'
*** ERROR: dlopen '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/VASEM12_supernova.scx' err 'dlopen(/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/VASEM12_supernova.scx, 0x0002): tried: '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/VASEM12_supernova.scx' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/VASEM12_supernova.scx' (no such file), '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/VASEM12_supernova.scx' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64'))'
*** ERROR: dlopen '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/VALadder_scsynth.scx' err 'dlopen(/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/VALadder_scsynth.scx, 0x0002): tried: '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/VALadder_scsynth.scx' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/VALadder_scsynth.scx' (no such file), '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/VALadder_scsynth.scx' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64'))'
*** ERROR: dlopen '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/PhasorModal_supernova.scx' err 'dlopen(/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/PhasorModal_supernova.scx, 0x0002): tried: '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/PhasorModal_supernova.scx' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/PhasorModal_supernova.scx' (no such file), '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/PhasorModal_supernova.scx' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64'))'
*** ERROR: dlopen '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/AnalogChew_supernova.scx' err 'dlopen(/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/AnalogChew_supernova.scx, 0x0002): tried: '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/AnalogChew_supernova.scx' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/AnalogChew_supernova.scx' (no such file), '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/AnalogChew_supernova.scx' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64'))'
*** ERROR: dlopen '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/AnalogPhaser_scsynth.scx' err 'dlopen(/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/AnalogPhaser_scsynth.scx, 0x0002): tried: '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/AnalogPhaser_scsynth.scx' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/AnalogPhaser_scsynth.scx' (no such file), '/Users/mstep/Library/Application Support/SuperCollider/Extensions/PortedPlugins/AnalogPhaser_scsynth.scx' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64'))'

...and so on...

What would happen if you installed the Plugins quark - Quarks.install("https://github.com/madskjeldgaard/plugins.quark") - and ran Plugins.installPlugin("portedplugins")?

it can-t find cmake (but its installed).

Plugins: Creating folder for plugin packages
cd "/Users/mstep/Library/Application Support/SuperCollider/pluginpackages" ; git clone --recurse-submodules https://github.com/madskjeldgaard/portedplugins
nil
cd "/Users/mstep/Library/Application Support/SuperCollider/pluginpackages" ; git clone --recurse-submodules https://github.com/supercollider/supercollider
Submodule path 'editors/sc-el': checked out 'd8296a9af54d145703726328e22b9e89a08476af'
Submodule path 'editors/scvim': checked out '4b738f8a13056e0a74227135ff928c0149d233eb'
Submodule path 'external_libraries/hidapi': checked out '399ceb4c66fb9efb05149588ee14953cbcf51b1d'
Submodule path 'external_libraries/link': checked out 'a33d2c34997dc8679ba9092652dd52bffc0c7b04'
Submodule path 'external_libraries/link/modules/asio-standalone': checked out 'bba12d10501418fd3789ce01c9f86a77d37df7ed'
Submodule path 'external_libraries/nova-simd': checked out '2bdc68bc5704a42578300a4c18411df2405cb307'
Submodule path 'external_libraries/nova-tt': checked out '692a8859fb94030f581b8a3d626a5f40c236114e'
Submodule path 'external_libraries/portaudio/portaudio_submodule': checked out '147dd722548358763a8b649b3e4b41dfffbcfbb6'
Submodule path 'external_libraries/yaml-cpp': checked out '728e26e42645d4d70ca65522990f915f47b47a50'
ERROR: CMake is not installed
mstep@mstep-mbpro ~> cmake --version
cmake version 4.1.0

CMake suite maintained and supported by Kitware (kitware.com/cmake).

Looks like that’s a known issue CMake not installed on MacOS 10.13.6 · Issue #3 · madskjeldgaard/plugins.quark · GitHub

Darn. Have to manually build apparently.

Anyone want to build PortedPlugins for ARM architecture and share the build? It sure would save a lot of people a lot of trouble down the road. @madskjeldgaard ?

Meanwhile, if you grab the latest xynthii commit and open modules/xfilt.scd, you’ll see an array of SynthDefs near the top. Two are commented out. If you uncomment those and comment out the other two, then you won’t need PortedPlugins.

(I’ve added this to the README)

Also, there was a section in the PortedPlugins README that was recently removed that had to do with building on arm under Rosetta compatibility. Remove M1 instructions · madskjeldgaard/portedplugins@c6c0d74 · GitHub

I’m pretty out of the loop with Macs and all of their fun quirks, but this seems potentially useful for diagnosing the situation.

@mstep looks like @Sam_Pluta did an ARM build of these a while back. Can you try it out? If it works, I’ll include it in the repo for easy install. https://drive.google.com/file/d/12H8EzGksCxIqhgD4ljVHnsHQxanufB7j/view

works! thank you very much.

1 Like

Insane synchronicity. I spent an entire day the day before you posted this experimenting with getting GPT-5 to vibe-modernize the old Xynthi codebase.

I made significant progress, but as you can imagine, this is a huge relief!

I haven’t had time to look into it closely, but I believe I had the same issue as above trying to get this to run on my M4 machine.

If I can make time, I’ll see if I can contribute at least clear documentation for getting it running, if not a PR.

Amazing. I’m still regularly surprised and delighted at how many people used Xynthi.

So, to clarify, did you get the install working on M4 using the plug-in build from Sam? And, if so, does the current README describe the process clearly? And, one of the things I’m most curious about, does the current init.scd manage to do what is necessary for a proper ARM install?

I ran init.scd and got a mountain of errors in the console and stopped there so far

Hmmm, I would imagine that it’s the same error with different properties. Any snippets?

Ok, I borrowed a Mac for a bit and fixed init.scd. It looks like my attempt to unquarantine via sclang is not going to fly, so I had the init file output the terminal commands to run at the end.

Now the only problem, and it’s such a royal pain in SC, is that the screen on this computer I borrowed is not too big, and the GUI objects are larger than they should be, and so the GUI is all goofy. I really, really don’t like working with SC GUI (so sorry devs, you are angels, but… well…). If anyone has any advice on easily taking a GUI this complex and helping it to resize properly within screen bounds, let me know.

For now, I’ve added a “fix” that makes the view scrollable if the screen is too small. At least you can get to all of the elements.

I could try to break the GUI up into separate windows, but I don’t love the idea.

1 Like

hoping to get it going on my M1…

ran the code from init.scd successfully, quit and reopen sc. once i run the code from play-xynthii.scd

(Document.current.dir ++ “/xynthii.scd”).loadPaths;
~makeXynthii.value({|d| ~xynthii = d });
)

i get a parse error

There’s no parse error in the current code. A parse error would be platform independent. So, you’ll have to be a little more specific. What’s the actual error being reported? The code that you copied here is missing the first line from that file, also. Should be:

( // ONLY RUN THIS IF XYNTHII ISN'T ALREADY RUNNING
(Document.current.dir ++ "/xynthii.scd").loadPaths;
~makeXynthii.value({|d| ~xynthii = d });
)

To clarify some more, if you have the latest code and run the block of code at the top of play-xynthii, you should not get a parse error.

If you run the code that you pasted above, which you would have to do by actually selecting that text and hitting shift-return or cmd-return, then you will get a parse error, because the opening parentheses is missing.

If you run the code I copied above by placing your cursor within it and not selecting any text and hitting cmd-return, you should not get a parse error.

There is a possibility that you’ll get another type of error. I have now tested all of this on M-series Macs, and everything is working fine, so, if you get an error, I’ll need to see what that error is. Please copy whatever is shown in the Post Window regarding the error and paste it here. Otherwise, there’s very little I or anyone else can do to help.

1 Like