Skip to content

Using Supercolliders VSTPluginController to control VST plugins with TidalCycles

License

Notifications You must be signed in to change notification settings

thgrund/TidalVST

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TidalVST

Using Supercolliders VSTPluginController to control VST plugins with TidalCycles.

This can currently be understood as a proof of concept. What you can do is to:

  • Use the VSTPluginController to make a VST plugin accesible for TidalCycles
  • Control VST parameters with TidalCycles pattern. You can use simple functions or even control busses!
  • Apply all kind of effects from SuperDirt

Requirements

TidalCycles

Installation

Create a new control bus target in your BootTidal.hs:

let vstTarget = Target {oName = "hydra", oAddress = "127.0.0.1", oHandshake = True, oPort = 3337, oBusPort = Just 3338, oLatency = 0.1, oSchedule = Pre BundleStamp, oWindow = Nothing}

tidal <- startStream (defaultConfig {cFrameTimespan = 1/20}) [(superdirtTarget {oLatency = 0.1}, [superdirtShape]),(vstTarget, [superdirtShape]) ]

And you need to add the content from newFunction.hs in this repo to your BootTidal.hs too.

How to use it

One simple approach is to play notes withouth controlling any other parameter:

d1 $ n (scale "major" "0 5 ~7") # s "vst" -- this name can be changed in the addSynth function  

But you can use the functions varg1 .. varg100 from newFunction.hs. The parameter mapping depends on the plugin. I prefer to create a more semantically meaning for a specific vst plugin parameter like oscrate = varg23.

d1 $ n (scale "major" "0 5 ~7")
   # s "vst"
   # varg34 (
      "[0.25 <0.5 0.75> <0.75 0>]"
   )

You can control the vst parameter with control busses too! Like the functions you can access the control busses with varg1bus .. varg100bus.

d1 $ n "0/2"
   # s "vst"
   # varg34bus 1 (
      segment "<4 256>"
      $ ( isaw * "<0.25 0.25 0.5>") + 0.25
   ) # legato 2

And you can add global effects from SuperDirt

d1 $ n (scale "major" "0 5 ~7")
   # s "vst"
   # room 0.2 # sz 0.4
   # delay 1
   # delaytime 0.2 # delayfeedback 0.2
   # leslie 1
   # lsize 2.8 # lrate 6.7
   # legato 0.1

Andlocal effects from SuperDirt

d1 $ n (scale "major" "0 5 ~7")
   # s "vst"
   # lpf (slow 4 $ sine * 4000)

SuperCollider

For adding or removing a VST plugins you need to do the following changes in TidalVST.scd:

  1. Add something like VSTPlugin.ar(sound, ~dirt.numChannels, id: \myVstId); to the "VST" SynthDef
  2. Add \myVstId -> Synth("VST", [id: \myVstId]),to the synths Dictionary
  3. Add \myVstId -> VSTPluginController(synths.at(\zebralette2), id: \zebralette2).open("Zebralette", editor: true, verbose: false),to the instruments Dictionary.

I think not every parameter should be necessary and it should be clean up soon. But to be unsure everything is working you should do it this way.

The VSTPluginController should looks into your VST and VST3 folder for the file names. These names should be the same for the open method.

About

Using Supercolliders VSTPluginController to control VST plugins with TidalCycles

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published