-
Notifications
You must be signed in to change notification settings - Fork 1
VSTs
These steps are not specific to Tidal usage, apart from details related to sound buses and adding the VST instrument as midi in Tidal sound library. You could use them if you wanted to use SuperCollider only.
This project allows you to use VST plugins in Pd and SuperCollider on Windows, MacOS and Linux. It includes a Pd external called "vstplugin~" and a SuperCollider UGen called "VSTPlugin" (+ various SC classes).
Go here and follow their instructions on how to build it.
If you use Linux and want to use Windows VSTs you can have them using LinVST + Wine. Click on the links and follow their instructions.
My Linux distro (Ubuntu Studio 18.04) already have Wine all setup in it, so I didn't have to set it myself. Check if yours also have it. This will greatly simplify this step for you.
To install a VST execute wine your-downloaded-vst-installer.exe
Pay attention on where it will be installed, you will need this path later when opening the VST, like here:
~eqOrb0.open( "/home/gilfuser/.wine/drive_c/Program Files/Steinberg/VSTPlugins/TDR Nova.so")
NOTE: VST3 plugins are not supported (yet)!
Take a look at the SuperCollider Help System to learn more about it:
Ctrl+Shift+D+VSTPlugin
I recommend you to take a look at the SuperCollider Help System to have a good understanding of what it does and how to use it:
Ctrl+Shift+D+VSTPluginController
~dirt
q.orb0
q.orb1
q.orb2
q.orb3
created in interface/superDirt_startup.scd
I just followed the examples in the VSTPluginController SC Help System
The VSTs are being used in different ways:
- master effect - a compressor
- effect chains - with EQ and reverb
- single effects - reverb
- instrument - a synth
All the effects that aren't modulated by Tidal are Synths of this SynthDef:
SynthDef(\insertVst, { | bus |
ReplaceOut.ar(bus, VSTPlugin.ar( In.ar(bus, ~dirt.numChannels), ~dirt.numChannels ));
}).add;
The others are Synths from specific SynthDefs with specific arguments that are passed to a parameter array. More on that on the section Mapping Parameters
the compressor with character
It runs in a group (~masterFxGroup
) created after the default group to get all the sounds.
The EQ, the first in the chain replaces the sound of the orbits dry buses, e.g. q.orb0.dryBus
The buses numbers are chosen automatically by SuperDirt
It runs in the orbits groups, like q.orb0.group
The second effect in the chain, the reverb uses the first as target, e.g. ~eqOrb0.synth
TAL-Reverb-3
Again replaces the orbit dry bus and runs inside its group
It's not free. Sorry. If dont't want to spend any money stick with:
I'm using orbit 2 and 3 dry buses as outputs for the instruments, but it could be any others, including both instruments in the same one.
After creating the synth add it as midi to Tidal with e.g.
~dirt.soundLibrary.addMIDI(\acid, ~acid.midi);
where ~acid
is the VSTPluginController. So, will you will be able to play it in Tidal like any instrument like so:
p 1 $ "acid"
To find the parameters you want to tweak and their numbers open both the instrument GUI and aditor at the same time: ~talnoise.gui
(which is the QT interface) and ~talnoise.editor
(the native VST GUI)
MAC users are advised in the VSTPlugin repository website to not let the editor opened while live-coding, but there's no problem to use here and close it afterwards
...
On MacOS, however, because of technical limitations the GUI must run on the main thread1 - which happens to be the audio thread in Pd...
Until we've found a better solution, macOS users are advised to keep native GUI windows closed in low-latency realtime situations to avoid audio hick-ups.
Find the parameter you'd like to play with, take its number. You will use them in a params array inside the SynthDefs.
SynthDef(\vst_verb, { | bus bypass = 0 vwet = 0.2 vdry = 1 delay = 0.1 vsize = 0.60 vlocut = 0.7 vhicut = 0.25 |
ReplaceOut.ar( bus, VSTPlugin.ar( In.ar(bus, ~dirt.numChannels), ~dirt.numChannels, bypass,
params: [1, vwet, 2, vdry, 3, delay, 4, vsize, 5, vlocut, 6, vhicut] )
);
}).add;
SynthDef(\vst_acid, { | out bypass = 0 acutoff = 1 areson = 0.5 asweept = 1 aenvmod = 1 aenvatt = 0 aenvdec = 0.5 aaccdec = 0.5 aenvacc = 0.5 |
OffsetOut.ar(out, VSTPlugin.ar( nil, ~dirt.numChannels, bypass,
params: [2, acutoff, 3, areson, 4, asweept, 5, aenvmod, 6, aenvatt, 7, aenvdec, 8, aaccdec, 9, aenvacc ] )
);
}).add;
Give the name you want to the parameters just having in mind that they should not collide.
THE COUNTER-PARTS to make this magic happens are in interface/tidal_set_FX.scd and in Tidal.ghci
In the former you will find something like this:
{ \vwet } { q.verbs[q.vstorb].synth.set( key, msg[i+1].asFloat ) }
{ \vdry } { q.verbs[q.vstorb].synth.set( key, msg[i+1].asFloat ) }
{ \vdelay } { q.verbs[q.vstorb].synth.set( key, msg[i+1].asFloat ) }
{ \vsize } { q.verbs[q.vstorb].synth.set( key, msg[i+1].asFloat ) }
{ \vlocut } { q.verbs[q.vstorb].synth.set( key, msg[i+1].asFloat ) }
{ \vhicut } { q.verbs[q.vstorb].synth.set( key, msg[i+1].asFloat ) }
In the later like this:
vwet = pF "vwet"
vdry = pF "vdry"
vdelay = pF "vdelay"
vsize = pF "vsize"
vlocut = pF "vlocut"
vhicut = pF "vhicut"
You will understand this better and in context after reading the pages Tidal set SC Effects and config file
For know have in mind that those are related to the parameters you saw here
There's another way of mapping parameters much like you would do to any MIDI instrument. It won't rely on any other SuperCollider thing, but it has a huge downside, at least in my experience: there's a gap between the moment the instrument is played and the moment that the parameter changes.
If you prefer to do it the MIDI way follow the next steps instead of the method above.
Enable MIDI Learn or MIDI Map in the editor (native VST GUI)
Move The fader or knob of the parameter you choose
Open Tidal and play the synth
p 1 $ "talnoise"
Now use the parameter's number here:
once $ ccv 11 # ccn 1 # "talnoise"
Now your parameter is mapped. Just don't play with the parameters and play notes in the same pattern.
As soon as you have mapped all the parameters all the parameters you want don't forget to save it.
This will be done in the native GUI. The name of the button and interface to do it varies.
In Tal-NoiseMaker it calls Save Preset and you'll have to load it every time you open it.
In Phosycon is in Options/Midi Control in a floppy-disk icon and you don't need to load it every time you use if you check Default map and point to the preset you saved.
In SC-IDE press Ctrl+Shift+D
and type VSTPlugin or VSTPluginController. Or, if you have them already written, click over and press Ctrl+d
SuperCollider stuff
SuperDirt Stuff
-
extra synths and FX
Tidal Stuff
More