# Using VSTPlugin with Tidal

**URL:** <https://uzu.lurk.org/t/using-vstplugin-with-tidal/2352>\
**Category:** TidalCycles\
**Tags:** questions\
**Created:** [2 November 2020 20:37 UTC](https://uzu.lurk.org/t/using-vstplugin-with-tidal/2352 "2020-11-02T20:37:54Z")\
**Posts on this page:** 11\
**Page:** 4

<div class="post-metadata">

**Author:** ![damu](https://uzu.lurk.org/letter_avatar_proxy/v4/letter/d/3da27b/32.png) [@damu](https://uzu.lurk.org/u/damu)\
**Post date:** [8 October 2024 14:49 UTC](https://uzu.lurk.org/t/using-vstplugin-with-tidal/2352/62 "2024-10-08T14:49:14Z")

</div>

Does anybody know a reliable way to control a VST synth with SuperDirt via Tidalcycles?

I've tried out most of the ways mentioned here but it's not been mentioned for a while so it's hard to know what may or may not be expected errors.

---

<div class="post-metadata">

**Author:** ![cleary](https://uzu.lurk.org/user_avatar/uzu.lurk.org/cleary/32/177_2.png) [@cleary](https://uzu.lurk.org/u/cleary)\
**Post date:** [8 October 2024 22:07 UTC](https://uzu.lurk.org/t/using-vstplugin-with-tidal/2352/63 "2024-10-08T22:07:32Z")

</div>

I just use superdirt-midi as per this docs section:

> **[MIDI | Tidal Cycles](https://tidalcycles.org/docs/configuration/MIDIOSC/midi/)**
>
> Tidal can send and receive MIDI messages. You can talk with external synthesizers and hardware and receive data from your controllers. All the mapping is done directly through the language in an intuitive way.

For a little more detail:  
On linux it's possible to create virtual midi interfaces for routing, I set up 4 and connect supercollider to each one referenced as `midi1`, `midi2`, etc in tidal. So the midi signal is sent to the virtual midi-through port, then I choose to route the virtual ports to any synth destination I want (which can change mid-set)

This setup gives the benefit of flexibility (I can change synth anytime by routing the virtual port wherever I want), and stability (I don't need to create new midi-port connections in supercollider every time I want to change to a different one)

---

<div class="post-metadata">

**Author:** ![mrreason](https://uzu.lurk.org/user_avatar/uzu.lurk.org/mrreason/32/3203_2.png) [@mrreason](https://uzu.lurk.org/u/mrreason)\
**Post date:** [9 October 2024 07:19 UTC](https://uzu.lurk.org/t/using-vstplugin-with-tidal/2352/64 "2024-10-09T07:19:50Z")

</div>

Hey @demu? What did you tried concretely?

I will start with a short answer and then I can share the current insights that I have nowadays with you and the community. Because (disclaimer) it's not easy and I can not ensure, that you can use everything that SuperDirt is offering.  
In my answer I assume that you want to have the VST plugins available within SuperCollider as well. I.e. that you can control and manage them directly in the TidalCycles ecosystem. And I am focussing on VST instruments, because VST FXs are a complete separate topic. (I use VST FXs but currently I didn't worked on a system, that can be used easily).

## Short answer

SuperCollider is not supporting VST plugins out of the box, so you need to install this [vstplugin Quark](https://github.com/Spacechild1/vstplugin) first. And then in (in general) you need i.e. [TidalVST](https://github.com/thgrund/TidalVST/tree/main) to map TidalCycles events to midi notes that can be used to control the plugin.

## Long answer

I work with VST plugins since quite a while with SuperDirt. And I created some functionalities to help with a better scaling. But these are not published yet. Some of the pitfalls are:

- Resource management
- Crackling noises
- Preset management
- Missing feedback
- Missing Quark

I will share the plans I have for TidalVST here, but they are not fully resolved and released yet. I worked since quite a while on different topics (like SuperDirtMixer and TidalMIDI), and this will be the next topic I will tackle. But even here I will mainly focus on VST instruments.

### Resource management

For me it's hard to tell, but it looks like, that for resource intensive VST plugins I want to use multi threading but it's not workin'. The vstplugin Quark offers multi threading, but for me this has no effect.  
And SuperDirt itself is not using [SuperNova](https://madskjeldgaard.dk/posts/supernova-intro/) and everything runs on a single server.

So what I did (and works pretty well for VST instruments) is to bypass the plugins automatically, when there is no incoming Tidal event. This will help, but not completely resolve the resource management topic.

### Crackling noises

In SuperDirt we have the synthBus, the dryBus and the globalEffectBus. The globalEffectBus can be ignored

The synthBus is used for single events and every (non global) effect will be applied on single events. This means that with every event, the synth node will be attached and detached from the node tree.  
But the VST instruments are usually coming with there own FXs inside. So to put the audio signals will change the sound of the VST instrument. And the worst part is, that you need to apply an envelope on every single note to avoid crackling noises. Global effects can be applied as well.

The dryBus is used as a base signal for the globalEffectBus. This bus is always on and can be used to avoid crackling noises. The downside is, that the tidal effects are not usable. For me this is not a problem, because I do not need them. I fix this with using global effects and the [SuperDirtMixer](https://club.tidalcycles.org/t/the-supedirtmixer-v1-0-is-out-now/4861).

### Preset management

This is what I use since quite a while locally. When you want to reuse the same instrument with different presets, then it's better to use vst presets instead of adding new instruments. And for me this is really handy, to control these presets with OSC messages.

### Missing feedback

When you start to load more and more plugins and you want to trace the status of the plugins and the synths, then it's import to receive a good overview of the plugins. I.e. what are the names in TidalCycles, is the plugin bypassed, is the synth free, preset management (load and save new presets), etc. In a next version I will add a small ui for these purposes.

### Missing Quark

I just realized, that the last releases version of TidalVST is not a Quark. So to sum it up, the latest version is not very user friendly. But you can still execute the code under `TidalVST.sc`.

---

<div class="post-metadata">

**Author:** ![alvaro.makes.music](https://uzu.lurk.org/user_avatar/uzu.lurk.org/alvaro.makes.music/32/3040_2.png) [@alvaro.makes.music](https://uzu.lurk.org/u/alvaro.makes.music)\
**Post date:** [4 December 2024 03:42 UTC](https://uzu.lurk.org/t/using-vstplugin-with-tidal/2352/65 "2024-12-04T03:42:53Z")

</div>

This is so exciting! I usually get sound out of my VST's so I'm very interested in this. If there's any way in which I can help with the codebase let me know!

---

<div class="post-metadata">

**Author:** ![msautark](https://uzu.lurk.org/user_avatar/uzu.lurk.org/msautark/32/3483_2.png) [@msautark](https://uzu.lurk.org/u/msautark)\
**Post date:** [24 March 2026 19:26 UTC](https://uzu.lurk.org/t/using-vstplugin-with-tidal/2352/66 "2026-03-24T19:26:24Z")

</div>

> [@mrreason](#):
>
> The dryBus is used as a base signal for the globalEffectBus.

Hi @mrreason, i have a question in this regards i managed to use vst and pass Parameter from tidal to supercollider. I’m even able to switch presets by tidal cycle. But this crackling Noise is annoying especially when playing faster notes. Where do I configure Tidalcycles to use the dryBus?

---

<div class="post-metadata">

**Author:** ![mrreason](https://uzu.lurk.org/user_avatar/uzu.lurk.org/mrreason/32/3203_2.png) [@mrreason](https://uzu.lurk.org/u/mrreason)\
**Post date:** [25 March 2026 07:49 UTC](https://uzu.lurk.org/t/using-vstplugin-with-tidal/2352/67 "2026-03-25T07:49:40Z")

</div>

Hi @msautark I assume, that you use the TidalVST implementation from the main branch? I should wrap up and clean up my changes, because I almost resolved all these issues as described here [Using VSTPlugin with Tidal - #64 by mrreason](https://uzu.lurk.org/t/using-vstplugin-with-tidal/2352/64) . Anyway, the idea is, to change the orbits synthBus to dryBus in these lines:

- [TidalVST/TidalVST.scd at main · thgrund/TidalVST · GitHub](https://github.com/thgrund/TidalVST/blob/main/TidalVST.scd#L52)
- [https://github.com/thgrund/TidalVST/blob/main/TidalVST.scd#L116](https://github.com/thgrund/TidalVST/blob/main/TidalVST.scd#L116)

This means, that you need to change the bus within SuperCollider, when using the main branch. Because it is hard wired. Do you need any assistant to achieve this?

---

<div class="post-metadata">

**Author:** ![msautark](https://uzu.lurk.org/user_avatar/uzu.lurk.org/msautark/32/3483_2.png) [@msautark](https://uzu.lurk.org/u/msautark)\
**Post date:** [25 March 2026 14:21 UTC](https://uzu.lurk.org/t/using-vstplugin-with-tidal/2352/68 "2026-03-25T14:21:56Z")

</div>

Yes, indeed I’m using your TidalVST implementation from main branch. Thanks for that, btw.  
I’m not sure I understand it correctly.  
You mean here I should switch ~out to something like ~out.dryBus as per default it is routed to synthBus in SuperDirt implementation?

`// Switch to the current orbit`  
`synths.at(vstName).set(`  
`\out, ~out,`  
`\pan, currentEnvironment.at(\pan),`  
`);`

When I try to do something like

“\out, ~dirt.orbits[busId].dryBus”

It runs but I don’t hear the VST synths anymore.

Maybe one more hint: In startup.scd I’m assigning Supercollider Busses already to the orbit outputs:

`~dirt.start(`  
`57120,`  
`outBusses: [`  
`~mixBusCh1, ~mixBusCh2, ~mixBusCh3, ~mixBusCh4,`  
`~mixBusCh5, ~mixBusCh6, ~mixBusCh7, ~mixBusCh8,`  
`~mixBusCh9, ~mixBusCh10, ~mixBusCh11, ~mixBusCh12,`  
`~mixBusCh13, ~mixBusCh14, ~mixBusCh15, ~mixBusCh16`  
`]`  
`);`

Do I need to change it too?

I was assuming the following routing of signals:

TidalCycles → SuperDirt orbit → MixBusN → MasterBusA/B → Out

I don’t know how the concept of the dryBus is fitting in my picture.

---

<div class="post-metadata">

**Author:** ![mrreason](https://uzu.lurk.org/user_avatar/uzu.lurk.org/mrreason/32/3203_2.png) [@mrreason](https://uzu.lurk.org/u/mrreason)\
**Post date:** [26 March 2026 15:49 UTC](https://uzu.lurk.org/t/using-vstplugin-with-tidal/2352/69 "2026-03-26T15:49:25Z")

</div>

Unfortunately I need to look into the code and play around with it. It is quite a while since I used the code from the main branch. I will be able to do this next week.

Regarding the orbit bus routing, Julian Rohrhuber once summarized it in this post [The routing structure of a dirt orbit](https://uzu.lurk.org/t/the-routing-structure-of-a-dirt-orbit/3902)

---

<div class="post-metadata">

**Author:** ![mrreason](https://uzu.lurk.org/user_avatar/uzu.lurk.org/mrreason/32/3203_2.png) [@mrreason](https://uzu.lurk.org/u/mrreason)\
**Post date:** [11 April 2026 18:29 UTC](https://uzu.lurk.org/t/using-vstplugin-with-tidal/2352/70 "2026-04-11T18:29:16Z")

</div>

Sorry @msautark for the late response. In my working branch of TidalVST I am doing this:

```haskell
synths.at(vstName).set(
   \out, (if (enabledEffectSynths.includes(vstName), {~out}, {~dryBus} )),
   \sustain, sustain,
   \pan, currentEnv.at(\pan)
);

```

This means you can just exchange all occurences of `~out` with `dryBus` and then you shouldn’t have the crackling noises anymore. With this change you are not able to use effects on the synths anymore (but global effects are still working!). I can give a more in depth explanation if you are interested, but this will fix your current issue.

---

<div class="post-metadata">

**Author:** ![msautark](https://uzu.lurk.org/user_avatar/uzu.lurk.org/msautark/32/3483_2.png) [@msautark](https://uzu.lurk.org/u/msautark)\
**Post date:** [12 April 2026 04:11 UTC](https://uzu.lurk.org/t/using-vstplugin-with-tidal/2352/71 "2026-04-12T04:11:44Z")

</div>

Thanks @mrreason for coming back on this topic. I haven‘t found the time yet to dig deeper but I will give it a try. Then i will come back with questions for sure 😉.

---

<div class="post-metadata">

**Author:** ![msautark](https://uzu.lurk.org/user_avatar/uzu.lurk.org/msautark/32/3483_2.png) [@msautark](https://uzu.lurk.org/u/msautark)\
**Post date:** [13 April 2026 18:45 UTC](https://uzu.lurk.org/t/using-vstplugin-with-tidal/2352/72 "2026-04-13T18:45:04Z")

</div>

Ok. I‘ve tested it and it finally works. Thanks for the explanation.

As Long as global effects are working i am fine. I will add parameter for reverb and supermassive mix amount which i use on supercollider bus i‘m routing individual orbits to then i am covered.

[Previous page](https://uzu.lurk.org/t/using-vstplugin-with-tidal/2352.md?page=3)
