Mutable Instruments UGens

Sorry yes, I did see that. I thought you meant if there were any errors.

At this point don't know what the problem could be... have you copied into the extensions folder of supercollider the *.so files?

I copied .scx files to the extensions folder (I'm on a mac). Was there something else I needed to copy too? Where do I get those? I've got your plaits and rings working fine. I haven't tested the verb. I should do that since that is the other global effect I think.

Uhm...no, if rings and plaits are working you should be ok, on linux also the *.so (compiled libraries) are needed

Being able to easily use plaits in Tidal would be a huge step forward. So much possibilities within one little synth...

+1

I got clouds to work! I removed the text plus colon you had before passing the params into clouds here:

Out.ar(effectBus, MiClouds.ar(
      inputArray: signal,
      pit: cloudspitch,
      pos: cloudspos,
      size: cloudssize,
      etc.......
    ));

Mine looks like this now and works:

  SynthDef("global_mi_clouds" ++ numChannels, { |dryBus, effectBus, cloudspitch=0, cloudspos=0, cloudssize=0.5, cloudsdens=0.5, cloudstex=0.5, cloudswet=0.5, cloudsgain=0.5, cloudsspread=0.5, cloudsrvb=0.5, cloudsfb=0.5, cloudsfreeze=0, cloudsmode=0, cloudslofi=0|
    var signal = In.ar(dryBus, ~dirt.numChannels);
    Out.ar(effectBus, MiClouds.ar(
      signal,
      cloudspitch,
      cloudspos,
      cloudssize,
      cloudsdens,
      cloudstex,
      cloudswet,
      cloudsgain,
      cloudsspread,
      cloudsrvb,
      cloudsfb,
      cloudsfreeze,
      cloudsmode,
      cloudslofi
    ));
  }, [\ir, \ir]).add;
};

Maybe try yours similar to mine and see if it still works?

2 Likes

I've spent some time exploring Plaits and have noticed that many parameter configurations have two distinct signals in the left and right channels. According to the Mutable Instruments docs, many of these sounds have both an 'out' and an 'aux': The AUX output carries a variant, sidekick, or by-product of the main signal produced on OUT.

It seems that these two signals are hard panned left and right, which isn't ideal.

Are there any out-of-the-box (either in Tidal or SuperDirt) ways for combining these signals? Failing that, I suppose I'll figure out how to build an effect in SuperDirt for mixing stereo signals together, but hoping that there is already some way to do that.

I think the best would be open an issue/pr on the github repository to improve that.
I didn't used plaits a lot but noticed a "stereo" output also with a simple { MiPlaits.ar }.play in supercollider

The thing is that I'm not really sure what this should look like. Should there be an additional 'aux' parameter that controls the mix of the 'aux' with the 'out' in a mono signal? That would work for me, but there might be use cases where keeping these signals distinct makes sense.

That's why I'm thinking a separate stereo mixing effect might the more flexible way to go.

1 Like

I think that the "sound source" ugen should be as simple as possible, so there could be a parameter to choose what the output should be. In mono.
Then will be a synthdef choice to eventually mix them.

Has anyone been able to get elements to work? If so, how would I go about using it on the tidal side of things? I have installed the Ugen properly, and the tests in the SChelp file are working for me. I have a feeling that this works similarly to rings with a sample being used as the impulse, but I don't know where to go from there.

I had a quick go at this based on what I've been doing for the Toybox Nano Pack for Reaktor (https://github.com/jarmitage/tidal-nano-pack)

Someone who knows the modules better than me should name them, and I'm also pretty sure the ordering of these is incorrect, but you get the idea.

This means you can do:

d1
  $ sengine "wtable chords vowel" -- string engine, like irand = integer rand
  # n 0
  # s "plaits"

And if you want a reminder of the param list / order, print the string e.g. plaits_engines

-- https://mutable-instruments.net/modules/braids/manual/
:{
braids_models = "csaw trisaw sawsq fold comb hardsync saw3 ring saw7 sawcomb toy zf vosm vowel harm fm pluk bowd blow bell drum kick cymb wtbl wmap wlin wt4 nois twnq clkn qpsk"
braidsModelN "csaw"     = 0
braidsModelN "trisaw"   = 1
braidsModelN "sawsq"    = 2
braidsModelN "fold"     = 3
braidsModelN "comb"     = 4
braidsModelN "hardsync" = 5
braidsModelN "saw3"     = 6
braidsModelN "ring"     = 7
braidsModelN "saw7"     = 8
braidsModelN "sawcomb"  = 9
braidsModelN "toy"      = 10
braidsModelN "zf"       = 11
braidsModelN "vosm"     = 12
braidsModelN "vowel"    = 13
braidsModelN "harm"     = 14
braidsModelN "fm"       = 15
braidsModelN "pluk"     = 16
braidsModelN "bowd"     = 17
braidsModelN "blow"     = 18
braidsModelN "bell"     = 19
braidsModelN "drum"     = 20
braidsModelN "kick"     = 21
braidsModelN "cymb"     = 22
braidsModelN "wtbl"     = 23
braidsModelN "wmap"     = 24
braidsModelN "wlin"     = 25
braidsModelN "wt4"      = 26
braidsModelN "nois"     = 27
braidsModelN "twnq"     = 28
braidsModelN "clkn"     = 29
braidsModelN "qpsk"     = 30
smodel = model . (braidsModelN <$>)
:}

-- https://mutable-instruments.net/modules/plaits/manual/
:{
plaits_engines = "anaosc wshape fm formant harm wtable chords vowel gran noisef noisep modal anabd anasn anahh"
plaitsEngineN "anaosc"  = 0
plaitsEngineN "wshape"  = 1
plaitsEngineN "fm"      = 2
plaitsEngineN "formant" = 3
plaitsEngineN "harm"    = 4
plaitsEngineN "wtable"  = 5 
plaitsEngineN "chords"  = 6
plaitsEngineN "vowel"   = 7
plaitsEngineN "gran"    = 8
plaitsEngineN "noisef"  = 9
plaitsEngineN "noisep"  = 10
plaitsEngineN "modal"   = 11
plaitsEngineN "anabd"   = 12
plaitsEngineN "anasn"   = 13
plaitsEngineN "anahh"   = 14
sengine = engine . (plaitsEngineN <$>)
:}

-- https://mutable-instruments.net/modules/tides/manual/
:{
tides_modes = "shapes amps time freqs"
modeN "shapes" = 0
modeN "amps"   = 1
modeN "times"  = 2
modeN "freqs"  = 3
smode = mode . (modeN <$>)
:}

:{
rings_models = "res symp sympq mod fm rvb"
ringsModelN "res"   = 0 -- MODAL_RESONATOR,
ringsModelN "symp"  = 1 -- SYMPATHETIC_STRING,
ringsModelN "sympq" = 4 -- SYMPATHETIC_STRING_QUANTIZED,
ringsModelN "mod"   = 2 -- MODULATED/INHARMONIC_STRING,
ringsModelN "fm"    = 3 -- 2-OP_FM_VOICE,
ringsModelN "rvb"   = 5 -- STRING_AND_REVERB
ringsSmodel = ringsmodel . (ringsModelN <$>)
:}
4 Likes

I made some demo patches to hear what's going on with these (uses some of https://github.com/jarmitage/jarmlib). Some of it sounding totally wild, especially Elements which is like an entire concert all by itself.

Some quick notes:

  • With Elements it seems there's some glitchy high pitched ringing happening. Can anyone confirm?
  • Ripples causes SuperCollider CPU to increase exponentially - guessing a memory leak?
  • I couldn't get the global effects to work. Edit: fixed, didn't see the edit to startup.scd
p1 -- plaits
  $ sl 2
  $ fa "<1 [1 2] <1 [0.5 3]> [1 [2 4]]>"
  $ struct "t(9,16)"
  $ n (arp "<up down diverge>" "<a'm9'8 e'7sus4'8>" -24)
  # engine 14
  # s "plaits"
  # adsr "0.1:1:1:0.5"
  # timbre (rsinf 0 1 0.25)
  # harm (rsinf 0 1 0.33)
  # morph (rsinf 0 1 0.11)
  # lpgdecay (rsinf 0 1 0.44)
  # lpgcolour (rsinf 0 1 0.35)

p1 -- braids
  $ n (arp "<up down>" "<c'maj'7*2 d'min'7*2 e'min'7*2 [a'min'7 f'maj'7]>" -24)
  # s "braids"
  # adsr "0:1:1:0.5"
  # model (sl 8 $ r 30)
  # timbre (rsinf 0 1 0.35)
  # color (rsinf 0 1 0.25)

p1 -- omi (elements)
  -- $ slow 2
  $ n (arp "<up down>" "<c'maj'7*2 d'min'7*2 e'min'7*2 [a'min'7 f'maj'7]>" +12)
  # s "omi"
  -- # sustain 1
  -- # adsr "0:1:1:0.5"

p1 -- tides
  $ sl 4
  $ fa "<1 [1 2] <1 [0.5 3]> [1 [2 4]]>"
  $ struct "t(<11 21 17 15>,32)"
  $ n (seg 32 $ rsinf 0 12 0.25 * rtrif 0 2 0.7 + "<0 8 4 1 3>" + "[0 0 12 -12]/4" -24)
  # s "tides"
  # mode (sl 4 $ "0 1 2 3")
  # sustain (rsinf 0.5 2 1)
  # tidesshape (rsinf 0 1 0.11)
  # tidessmooth (rsinf 0.5 1 0.33)
  # slope (rsinf 0 1 0.22)
  # shift (rsinf 0 1 0.44)

p1 -- elements
  $ fa "<1 [1 2] <1 [0.5 3]> [1 [2 4]]>"
  $ struct "t(<11 21 17 15>,32)"
  $ elementspitch (seg 32 $ rsinf 0 12 0.25 * rtrif 0 2 0.7 + "<0 8 4 1 3>" + "[0 0 12 -12]/4")
  # s "[[808bd:1(3,8)]*<1 2>, ~ 808sd:1]" --, 808:1*16]"
  # sustain (rsinf 0.4 1.5 1)
  # elementsstrength (rsinf 0 1 0.08)
  # elementscontour (rsinf 0 1 0.10)
  # elementsbowlevel (rsinf 0 1 0.12)
  # elementsblowlevel (rsinf 0 1 0.14)
  # elementsstrikelevel (rsinf 0 1 0.16)
  # elementsflow (rsinf 0 1 0.18)
  # elementsmallet (rsinf 0 1 0.20)
  # elementsbowtimb (rsinf 0 1 0.22)
  # elementsblowtimb (rsinf 0 1 0.24)
  # elementsstriketimb (rsinf 0 1 0.26)
  # elementsgeom (rsinf 0 1 0.28)
  # elementsbright (rsinf 0 1 0.30)
  # elementsdamp (rsinf 0 1 0.32)
  # elementspos (rsinf 0 1 0.34)
  # elementsspace (rsinf 0 1 0.36)
  # elementsmodel "<0 1 2>"
  # elementseasteregg 0

p1 -- mu
  $ s "[[808bd:1(3,8)]*<1 2>, ~ [808sd:4(3,8)], 808:1*16]"
  # mu 10

p1 -- rings
  $ s "[[808bd:1(3,8)]*<1 2 0.5>, ~ [808sd:4(3,8)], 808:1*<16 [32 16!3] 16 [12 24]>]"
  # ringsfreq (rsinf 50 100 0.22 * rtrif 1 1.5 1.3 * rsinf 0.8 1.2 4 * "<1 3 0.5 5>")
  # ringsstruct (rsinf 0 1 0.14)
  # ringsbright (rsinf 0.5 1 0.27)
  # ringsdamp (rsinf 0 1 0.36)
  # ringspos (rsinf 0 1 0.46)
  # ringsmodel (sl 8 $ "[0 1 2 3 4 5]")
  # ringspoly 0
  # ringsinternal 0
  # ringseasteregg (sl 7 $ "[0 1 2 3 4 5]")

p1 -- ripples MEMORY_LEAK!
  $ s "[[808bd:1(3,8)]*<1 2 0.5>, ~ [808sd:4(3,8)], 808:1*<16 [32 16!3] 16 [12 24]>]"
  # ripplescf 0.5
  # ripplesreson 0
  # ripplesdrive 1

p1 -- global_mi_verb
  $ s "[[808bd:1(3,8)]*<1 2 0.5>, ~ [808sd:4(3,8)], 808:1*<16 [32 16!3] 16 [12 24]>]"
  # verbwet 1
  # verbtime 0.9
  # verbdamp 0.5
  # verbhp 0.5
  # verbfreeze 0
  # verbdiff 0.625
  # verbgain 1

p1 -- global_mi_verb
  $ s "[[808bd:1(3,8)]*<1 2 0.5>, ~ [808sd:4(3,8)], 808:1*<16 [32 16!3] 16 [12 24]>]"
  # cloudspitch 0.5
  # cloudspos 0.5
  # cloudssize 0.5
  # cloudsdens 0.5
  # cloudstex 0.5
  # cloudswet 0.5
  # cloudsgain 0.5
  # cloudsspread 0.5
  # cloudsrvb 0.5
  # cloudsfb 0.5
  # cloudsfreeze 0.5
  # cloudsmode 0.5
  # cloudslofi 0.5
6 Likes

Hey everyone, does anyone have any pointers on how to build these for windows? I've only compiled some very simple c executables with gcc and mingw on the windows subsystem for linux in the past, but i have no experience with cmake and googling didn't help either...
As far as i can tell no one has done this so far, but maybe someone in this thread is actually using these on windows?

1 Like

Following the setup in @ndr_brt's repository worked for me: https://github.com/ndr-brt/sc-adente

3 Likes

That elements example is sounding nuts! Nice.

I'm not getting that high pitch ringing. It sounds so crazy though, that I might not be looking for what you're hearing. Every so often there probably is a high pitched ring, but only briefly.

Anyone noticed an high cpu usage when clouds is loaded as global effect on every orbit? Tried before and supercollider was about 35-40% of the cpu also with no event sent by tidalcycles..., without it the cpu was around 3-4%

1 Like

I haven't checked cpu usage, but I've been having quite a bit of difficulty with clouds not actually stopping when I stop tidal, there is often residual noise (sometimes really significant amounts/feedback style) after I hush

I've learned to keep cloudsfeedback always under 0.4, otherwise it literally explodes :smiley:

1 Like

that may have been the issue... I think I was using 1 or 0 :stuck_out_tongue: