Mutable Instruments UGens

this is so cool! I was trying to get the mi-Ugens running on Windows for the last 2 days or so without success (struggled with my C++ compiler and stuff), so it's really great to have this easy option now!
In the mi-UGens-Windows.zip the "Classes" and "HelpSource" folders are empty. Apparently though, one can just take those from the mi-UGens-Linux.zip

Works like a charm! (from what I've tried)

Thanks for the feedback! Yes it was because the copy command on windows does not copy recursively (!!!).
I fixed that: Release v0.0.24 · ndr-brt/mi-UGens · GitHub

ok, it's merged! this is the official release:

1 Like

I am a bit helpless to get your nice example running. Definitely due to the fact that I am just copying and pasting code from this thead without yet understanding the internals.

So I did copy this code and got it basically running. Whereby basically means that trying to run your example Tidal can't find: Variable not in scope: clouds because obviously it is not defined and I do not now how to extend the synth def.

Any hints to what exact code I will have to run while starting dirt to use clouds?

you need 3 things:

6 Likes

After some trouble with order in my superdirt startup file I got it working. Nice! Thanks!!

1 Like

Finally finding the time to test this. I don't know if it's related to your issue, but after loading clouds in startup.scd with your code, I'm getting XRuns in the sclang console, before even starting TidalCycles (which indeed correlates with high CPU usage). The module seems to be functioning otherwise, except for, well, the XRuns runing everything.
This only happens at this step of the installation, if I do everything else except loading the global effect, SuperCollider and Tidal are working just fine.

I guess that I'll just renounce to using clouds and focus on the other modules :frowning:

Yes, I noticed this kind of behaviour... I'd like to open an issue but I'd want to better verify this "leak".

To use a more lightweight approach, you could load it only on a single orbit:

var clouds = GlobalDirtEffect(\global_mi_clouds, [\cloudspitch, \cloudspos, \cloudssize, \cloudsdens, \cloudstex, \cloudswet, \cloudsgain, \cloudsspread, \cloudsrvb, \cloudsfb, \cloudsfreeze, \cloudsmode, \cloudslofi]);
var verb = GlobalDirtEffect(\global_mi_verb, [\verbwet, \verbtime, \verbdamp, \verbhp, \verbfreeze, \verbdiff, \verbgain]); \sawresonance, \sawpan]);
~dirt.orbits[0].globalEffects = ~dirt.orbits[0].globalEffects
  .addFirst(clouds)
  .addFirst(verb);

~dirt.orbits[0].initNodeTree;
1 Like

So, if I understand correctly, with this solution, I'd have to put the patterns I want to use clouds and verb on in orbit 1?

Yes, in the orbit 0 (you can substitute the [0] in the code with the orbit number you need). It's more limited but maybe less heavy to handle for the computer

1 Like

mhm thats clever. I'm about to test clouds. but the verb has been working for me. Aside from that, I had to modify warps slightly since I wasn't hearing any thing being process. I basically replace the

ReplaceOut.ar(out, signal);
//with
Out.ar(out,signal);

and then I could hear the result which is nuts!! awesome shaper. now I'm going to try using the freq argument and see if it grabs things like chords and octaves from the pattern (I hope but maybe its not the case since its an effect and not an instrument...)
Also, the plates had this weird thing where it produced two signal that where hard pan on each stereo output. A quick solution that I found was summing both signals that the UGen produces like this

Out.ar(out, DirtPan.ar( (sig[0] + sig[1])/2 * volume, ~dirt.numChannels, pan);

I hope we find a way to use this UGens both as processors and generators, but for now it seems that is one or the other. In my case, for example, I found rings a really nice pluck synth so I'm using it as a synth. But haven't tried it as a modulator yet... Elements the other way around: haven't use it as a synth but as a processor, and haven't got to anything I really dig yet...

you can also write sig.sum

and for this: sig.mean

This isn't totally related to the MI Ugens, but is something I've also struggled with figuring out in other areas of Tidal too. Mainly I want to have a sustained chord with plaits and sweep a param, but since the left-most pattern is a pattern of one (just one chord) I don't get a sweep.

d1 $ n ("e'add11")
  # s "plaits"
  # harm 0
  # timbre 0.5
  # morph saw

I've tried this, thinking I could give a pattern to morph to give it more subdivisions, but it doesn't work either (no error, but no sweep either):

  # morph (struct "t*32" saw)

Any ideas?

Of course this works, but I want a sustained chord and sweep, which this is not:

d1 $ n ("e'add11*16")
  # s "plaits"
  # harm 0
  # timbre 0.5
  # morph saw
2 Likes

In my non-producer terminology, you effectively want to apply a changing morph effect to the long plaits note which is only playing one event per cycle - but the problem is the morph value is only being taken/applied at the time of the event?

I think what you're looking for has been implemented in tidal as "control busses", but these are only available on a subset of effects (and these ugens are not one of them)... it would be interesting to know how/if the ugens/scsynth/superdirt defs could be modified to make them work though (any thoughts @yaxu )?

I did a demo with them and midi input here:

Ooo, I didn't know about the new control busses, that's exactly what I need. It'd be great to hear if we can modify ugens/etc. to work. I'd love to be able to use speed as a control bus too (just plugging that feature request).

1 Like

Hi i'm a bit late for this but super excited to get it running. Thanks!!

I am having trouble with the mutable.scd.

I am getting these errors on start up:

ERROR: Class not defined.
  in interpreted text
  line 11 char 31:

      freq = freq * DirtFreqScale.kr(speed, accelerate, sustain);
                                 
      sig = MiBraids.ar(pitch: freq.cpsmidi, timbre: timbre, color: color, model: model);
-----------------------------------
ERROR: Class not defined.
  in interpreted text
  line 26 char 31:

      freq = freq * DirtFreqScale.kr(speed, accelerate, sustain);
                                 
      sig = MiOmi.ar(pit: freq.cpsmidi);
-----------------------------------
ERROR: Class not defined.
  in interpreted text
  line 42 char 31:

      freq = freq * DirtFreqScale.kr(speed, accelerate, sustain);
                                 
      sig = MiPlaits.ar(
-----------------------------------
ERROR: Class not defined.
  in interpreted text
  line 66 char 31:

      freq = freq * DirtFreqScale.kr(speed, accelerate, sustain);
                                 
      sig = MiTides.ar(
-----------------------------------

I used a class that's not yet released in superdirt, you would need the chechout the last commit of the develop version of it, otherwise, you can use the code before I introduced that feature:

1 Like

Thanks!!! This is really a game changer. Still wrapping my head around elements.

I set it as an effect but it can be used as synth itself (same as rings).
I have to admit, my favourites are clouds and verb, I"m not using the others a lot

Hey people, this is great!
It is amazing!
Just dropped in to share my happiness :slight_smile:

1 Like