Skip to content
Gil Fuser edited this page Jun 6, 2019 · 5 revisions

Use VSTs in Tidal

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.


Boilerplate

VST Plugin Extension

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.

LinVST and Wine

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")

go to top


VSTPlugin and VSTPluginController

VSTPlugin

load VST plugins as UGens

NOTE: VST3 plugins are not supported (yet)!

Take a look at the SuperCollider Help System to learn more about it:
Ctrl+Shift+D+VSTPlugin

VSTPluginController

Client-side representation of a VSTPlugin UGen instance

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

go to top


VARIABLE DEPENDENCY WARNING

~dirt q.orb0 q.orb1 q.orb2 q.orb3
created in interface/superDirt_startup.scd

Insert VSTs

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

go to top

Master Effect

Molot Compressor

the compressor with character

It runs in a group (~masterFxGroup) created after the default group to get all the sounds.

Effect Chains

NOVA 8 Band EQ + TAL-Reverb-3

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

Single Effects

TAL-Reverb-3

Again replaces the orbit dry bus and runs inside its group

Instrument

Phosycon

It's not free. Sorry. If dont't want to spend any money stick with:

TAL-NoiseMaker

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"

go to top


Mapping Parameters

instrument gui and editor

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.

The reverb SynthDef

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;

The Phosycon SynthDef

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

go to top


Mapping Parameters the MIDI Way

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.


Learn more

SuperDirt_MIDI_Tutorial

SuperCollider Help System for VSTPlugin and VSTPluginController

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

go to top