Thanks so much @mrreason & @mattia.paterna for this proof of concept!
I couldn't get this to work and filed an issue here, I think I might just be misunderstanding something:
Thanks so much @mrreason & @mattia.paterna for this proof of concept!
I couldn't get this to work and filed an issue here, I think I might just be misunderstanding something:
Hey @jarm and thanks for trying out the experimental TidalVST. And sorry for the late reply. Today I was able to look into the issue.
You need to simply execute this statement in TidalCycles before you can use the vst
statement:
vstName = pS "vstName"
vst name = s "vst" # vstName name
It is defined in this file: TidalVST/newFunctions.hs at main · thgrund/TidalVST · GitHub
Let me know if there is any further problem.
Progress!
I took a big step in simplifying the setup and becoming more flexible by being able to apply SuperDirt effects to the VST instruments. This is done by creating a VST plugin as SynthDef in SuperCollider and routing it into the SynthDef bus and linking the SynthGroup.
And the error message disappeared. I would say this is a huge step in creating a more generic approach.
The source code is updated and can be found (as always) here: GitHub - thgrund/TidalVST: Using Supercolliders VSTPluginController to control VST plugins with TidalCycles
I made a small showcase. You can find it here:
Hi. Love the plugin. However I have problems with frequent clipping which is not present using VSTPlugin in supercollider directly. Increasing fadeTime helps a little. I tried with Surge XT, Dexed and Odin2 vsts mono and poly modes. Maybe there is some parameter or hack that can help? Thanks
Glad to hear you're having fun with it! I've heard of clipping occurring, but I haven't had that problem yet. I would install Dexed and try to reproduce it. Do you have some information for me here? Something like what preset are you using and what does your TidalCycles code look like?
After a long debug session yesterady I realized that there is a problem with the event duration in combination with the ~dirt.server.makeBundle
. But the solution could be a little bit complicated.
I think it's needed to re-build the SuperDirt midi event type to a vst-midi event type. There is a proxy interface that I could use.
And work with a thread scheduler with the event latency and the sustain value to manually trigger noteOn and noteOffs in sync with the rest of the event. I hoped there is a simpler solution (like I played a vst_midi
event triggered by a dirt
event.).
This in combination with an envelope in the VSTPlugin SynthDef should remove the clipping.
Btw. I tested everything with the Dexed Plugin. I will try to fix it asap because I would like to try a "one synthesizer challenge" with Dexed and this Tidal-VST. Sooo my motivation is huge to fix this.
Thanks. Glad to hear u found a problem. I want to ask or at least get pointers (maybe I will try to dig in myself) for 2 other things:
The short answer is that it is certainly all possible. But I can not estimate the effort and what is a good solution here.
But I always call it proof of concept because I am not able to answer all questions. What is important to me about my approach is that it works together with SuperDirt (otherwise there is the other approach with Ableton Studio).
But there is not yet a solution for everything, so everyone is free to contribute here and for help I am always grateful.
But for transparency, my next steps are:
Next progress! I think I solved the clipping issue as I described here
You can try it out now:
That seems to have done the trick. Interestingly I was exploring a similar path this weekend but wasn't successful in getting good results.
Excellent work @mrreason
@qaciwq I might have a solution for you. Let me get some time to package it up and post my current version here.
Hi. Appreciate the update. I tried new code, but encountered similar clipping as before. I made short 1 min video in vimeo Vimeo of test using VSTPlugin directly and then Dexed.scd code.
Unfortunately I can not see your definition of the triggerFunc
function. For me it looks like you have a function with makeBundle
because I see that there are multiple notes triggered even when this should not be possible with your pattern:
Furthermore the clipping problem is harder to solve with the newest version of the VSTPlugin extension.
To avoid clipping, you may have to set the fadeInTime to 0.01 and set a begin
value greater than 0 in the pattern. But this is only a small dirty hack (but it works).
I made a new showcase to demonstrate the current state of TidalVST. All sounds come exclusively from the VST plugin Dexed. The drum sounds are played as samples, but all other sounds are generated live from seven plugin instances:
Also, with the new version of the VSTPlugin extension, I am able to create and load presets.
The only downer is that I don't seem to be able to apply an envelope to the VST SynthDef. To avoid clipping, you may have to set the fadeInTime to 0.01 and set a begin
value greater than 0 in the pattern. But this is only a small dirty hack (but it works).
You can find my SuperCollider code from the small example here:
Wow, great! @mrreason
I believe one of the significant unique points of using Tidal is that it is easy to trigger a massive number of parameters simultaneously with a simple code.
I think we can dive deeper into legendary synthesizers by combining them with Tidal VST. (I am trying to do it through Ableton Live, but it costs too much overhead memory and manual work...)
Thanks for the updates @mrreason!
I'm trying to get up and running on an M1 machine and having some struggles, don't know if you've had similar issues; Building SuperCollider (and plugins) on Mac M1 - #25 by jarm - Development - scsynth
Edit: Build issues solved: Testing on Apple Silicon (Mac Mini M1) (#137) · Issues · Pure Data libraries / vstplugin · GitLab
When I add the example TidalVST.scd
to my Boot.hs
like so:
s.waitForBoot {
~dirt = SuperDirt(2, s);
~dirt.loadSoundFiles;
s.sync;
~dirt.start(57120, [0, 2, 4, 6, 8, 10, 12, 14]);
("/path/to/TidalVST/TidalVST.scd").load;
};
I get this syntax error on boot (referring to TidalVST/TidalVST.scd at main · thgrund/TidalVST · GitHub):
ERROR: syntax error, unexpected '(', expecting $end
in interpreted text
line 20 char 1:
(
^
var diversions = ();
-----------------------------------
ERROR: Command line parse failed
Another thing I spotted comparing TidalVST.scd
to MrReasonsSetup.scd
is:
var serverMessage = { |synth|
[\out, ~out, \sustain, ~sustain].asControlInput.flop.do { |each|
~dirt.server.sendMsg(\s_new,
\VST,
-1, // no id
1, // add action: addToTail
currentEnvironment.at(\synthGroup), // send to group
*each.asOSCArgArray // append all other args
)
}
};
Shouldn't that \VST
be replaced with synth
, even for this demo example?
Thank you @superpeachman!
I believe one of the significant unique points of using Tidal is that it is easy to trigger a massive number of parameters simultaneously with a simple code.
I agree! I feel like I'm still at the beginning of TidalVST, even if you can change parameters and busses.
But you can already experiment with it well.
I know you didn't ask a question, but I wanted to take the chance to say that
~instruments.at(\dexed).gui
in SuperCollider helps to start with the parameter mapping. Found this out myself only recently
You can map the parameter 0 from the VST plugin with varg0 = pF "varg0"
for example.
I think we can dive deeper into legendary synthesizers by combining them with Tidal VST.
I would find that extremely exciting
I'm glad to hear that! I have not yet switched to M1, so thanks for the tip. I haven't encountered this problem yet, but I'm glad to hear that it's been fixed.
Another thing I spotted comparing
TidalVST.scd
toMrReasonsSetup.scd
is:
For me it looks like that in MrReasonsSetup
everything is fine but I updated it for TidalVST.scd
- thanks!
I get this syntax error on boot
You need to remove the brackets in the scd
file and store the synthdef in the global synthdef store (or you separate TidalVST.scd and the Synthdef in two files and load them).
At least it worked for me.
not sure if i missed this somewhere in the thread, but would setting this up and doing this make it possible to use effect vsts in tidal?