Mutable Instruments UGens

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

Hi folks,
@paulchannelstrip and I are embarking on a journey to document these ugens and their parameters, mostly for use in tidal (but the info will have other applicability too).

We're beginning with what constitutes a "Standard Installation" - I've written what I believe to be a "standard install" process for linux specifically, that should be portable to other os' (just need to change the paths)

It'd be great if anyone interested could go through and vet this process, and confirm/provide the correct paths for:

  • windows
  • OSX
  • non-debian based distros (fedora, arch)

The doc is here - very much appreciate any assistance :slight_smile: :

[edit] removed - it's now merged into the offical doc:
https://tidalcycles.org/docs/reference/mi-ugens

7 Likes

@kit-christopher and I had an attempt at doing this on OSX today - I've updated the paths for OSX now, but we still couldn't get SuperCollider to see the ugens

If anyone else familiar with wrangling OSX security and SuperCollider could take a look and report the secret back, that would be amazing :slight_smile:

1 Like

You can disable the security feature temporarily with "sudo spctl --master-disable", allow SC to boot the ugens, then re-enable it immediately afterwards with "sudo spctl --master-enable". This seems to work OK.

But if you prefer to go about things more carefully (by which I mean, NOT disabling the global security mechanism even briefly), this seems to work on OS X Big Sur:

As SC tries to load each ugen, it shows a dialog saying unidentified developer, etc., and suggests moving the ugen file to the trash, or allowing you to cancel.

Cancel the first one, then go to System Preferences > Security & Privacy where you'll see its name mentioned at the bottom of the dialog, something like "MiRipples.scx was blocked from use because it is not from an identified developer."

Next to that text is an "Allow anyway" button. Click that, then return to the next dialog that OS X put up saying that the next ugen was forbidden, and repeat the process.

Once all of them have been given "Allow anyway", if you boot SC again and load the ugens, you will still get dialogs asking if you really want to open each one. But you can say Open, and after that, everything seems to work fine.

2 Likes

Thankyou! Given the quantity/detail of information, I've just pointed osx users to your post in case they're not sure what to do.

1 Like

You're welcome, and thanks for the work on the docs! Hopefully the details in the post work for others too.

2 Likes

@cleary Thanks a ton for the documentation. I'm going through the install right now on OS X, and just hit a snag at the very last step (or so it seems): adding the path to mi-ugens-params.hs to my BootTidal.hs file.

I initially placed my mi-ugens-params.hs file alongside the uGen files under Application Support > SuperCollider > SynthDefs, but hit a :script error — presumably because Haskell doesn't like whitespaces in path names (i.e. /Application Support/)?

I then moved the .hs file to another folder (without whitespaces) — /Users/olivier/Sound/tidal-proj/bootTidal/mi-ugens-params.hs, but on boot, Tidal throws this error:

t> IO error:  ""/Users/olivier/Sound/tidal-proj/bootTidal/mi-ugens-params.hs"" does not exist

Tried removing the quotation marks, but no dice. For reference, I placed the code from step 9 in the documentation at the very bottom of my BootTidal file, like so:

:script "/Users/olivier/Sound/tidal-proj/bootTidal/mi-ugens-params.hs"
^:set prompt (.*$)

Sorry if this falls beyond the scope of this thread. But I feel I'm close :slight_smile:

Hi,

thanks for the documentation!

While checking whether my setup was up to date I realized that if I use the

mentioned way to configure `verb` and `clouds` as global effects
// define global effects for mutable instruments effects
        ~dirt.orbits.do { |x|
            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]);
            x.globalEffects = x.globalEffects
              .addFirst(clouds)
              .addFirst(verb); 
            x.initNodeTree;    
        };                     
        // end define global effects for mutable instruments effects

Supercollider will exit on the first use of braids.

I have to use

this version to avoid the crash, ...
		{
			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]);

			~dirt.orbits[0].globalEffects = ~dirt.orbits[0].globalEffects
			.addFirst(clouds)
			.addFirst(verb);

			~dirt.orbits[0].initNodeTree;
		}

... which - as far as I understood, makes verb and cloud only available within a single orbit.

Any ideas of how I can use the multiple orbit configuration and avoid the crash?

EDIT: Sorry, just checked again, I am getting the crash with either configuration as soon as I try to use braids. So I have no idea what is causing the crash.

@oli Might be an issue with the content of file as we've got it at the moment. Try wrapping the entire text of mi-ugen-params.hs with :{ ... :}. For example:

:{
let
-- mutable synths
    timbre = pF "timbre"
...
    warpsvgain = pF "warpsvgain"
    warpseasteregg = pI "warpseasteregg"
:}

Let me know if that works :slight_smile:


@mbutz This sounds like an issue with braids in particular, then. Have you tried updating the UGens to the most recent release and the SynthDefs to the most recent commit?

1 Like

Yes, I have updated to the latest release.

Another questions: I am trying to become aquainted with elements. Therefore I tried to recreate what I see in

At least in my setup damp does not have any audible effect. Can anyone confirm this or is this a possibly due to my setup?

EDIT: Guess I am too hasty: As soon as I engage elementspace I get awesome results...
EDIT 2: After checking bow, blow and strike independently I find that damp does not have any effect on strike. Can anyone confirm? I was hoping to recreate the use of strike in the first part of the video but I can't.

Thanks for the help. I just tried wrapping everything in my mi-ugen-params.hs file as recommended, but still no dice. I'll keep poking about...

The installation documentation has been added, there are stubs for the synths/effects and parameters - contributions welcome!

https://tidalcycles.org/docs/reference/mi-ugens

4 Likes

I've had a bit of time over this break, so I've done some delving further into documenting these ugens (updates coming sporadically on the docs page), which has been really vluable. It turns out I've barely been touching the surface of just about all them.

It's also raised some questions for me on how the parameters have been implemented for some - I'll take a note here, since I'm using @ndr_brt 's packages that's probably who is best suited to field my questions, but there are so many people who've been working on them I'd be grateful for all/any insights :slight_smile:

  1. tides has a "frequency" knob - from the manual, it's description:

D. Frequency. Spans a range of ±4 octaves around the central value set by the frequency range button [A]. The direction of this knob is reversed compared to the rate control you would find on classic envelope generators: when the one-shot AD or AR mode is selected, turn clockwise for faster envelopes, and counter-clockwise for slower envelopes.

It has a relationship to the "slope" knob, which controls the...:

F. Ratio between the durations of the ascending and descending segments. Classic envelope generators have separate attack and decay controls. With Tides, one first adjusts how fast the whole envelope will complete (with FREQUENCY), then adjusts how much of this time is spent on the decay or release relatively to the attack (with SLOPE).

Looking at the synthdef, it looks like this "frequency" knob parameter is just ignored. There is a standard freq parameter which controls note pitch, but this frequency knob (by my reading) does something else.

Should there be a tidesfreq parameter or similar added to take advantage of this extra feature?

(I am not capable of doing this, and am not even sure I am reading it properly, hence asking the question) :slight_smile:

I'm not sure to remember exactly but, tides is, or, the basic tides functionality is function generator/LFO, so in the synthdef it's used only in looping mode in audio range to make it sound.

freq in fact is the frequency knob, and it's used in pair with a fixed ratio value of 9 (default), that means that the freq is used 1:1, so if it is 440, the frequency of the sound in output will be 440.

The slope only sets how's the envelope slope, from an attack 1 and decay 0 to an attack 0 to decay 1, it's a typical parameter of a function generator, in our case it will change the sound as it will change the waveform (from isaw, to triangle, to saw, if shape it's 0.5).

1 Like

I think most of that detail is beyond my knowledge, but I understand the main point - freq is the frequency knob - Thanks for the explanation :slight_smile:

All the documentation is finished!
https://tidalcycles.org/docs/reference/mi-ugens/

My big takeway, the synths have waaaayy more depth than I'd given them credit for - there are so many sounds to be squeezed out of them

6 Likes

Hi there,
I followed the instructions. Received an error;

ERROR: syntax error, unexpected SYMBOL, expecting ';' or ','
  in interpreted text
  line 5 char 24:

  var envLength = sustain\*(end-begin)/speed;
                         ^
  var line = Line.ar(begin, end, envLength, doneAction: Done.freeSelf);
-----------------------------------
ERROR: Command line parse failed