Week 3 lesson 2 - cut vs legato

Hi @cycle0!

Here's the first of three videos sharing techniques for dealing with longer samples, this time looking at the 'cut' and 'legato' control patterns, and the difference between them.

Here's a couple of examples to play with. Note what happens to the 'bev' sample when you hush and there's nothing to 'cut' it..

d1 $ jux rev $ speed "<1 0.5 0.75>(<3 5>,8)" # sound "bev" # cut 1
  # room 0.4 # sz 0.9 # gain 1.3

d2 $ jux rev $ sound "sax(3,8)" # legato 1 # n 3 
  # note "<[9 7] 5 [9 12]>" # djf 0.7 # sz 0.4 # room 0.4

If you're not up to speed, or fancy a recap, you can check all the previous lessons here: Weeks 1-4 - index

Next lesson:

10 Likes

Does Tidal automatically place all different sounds into their own orbits (so then delay, reverb, etc, aren't really global anymore)? Or does it only dynamically do that when using cut groups?

Hi @ben

If you look in BootTidal.hs (atom should tell you where that file is when you start tidal), you'll see something like this:

    d1 = p 1 . (|< orbit 0) 
    d2 = p 2 . (|< orbit 1) 
    d3 = p 3 . (|< orbit 2)
    ... etc ...

This means that when you do

d2 $ sound "bd"

It gets expanded to

p 2 $ sound "bd" |< orbit 1

So every pattern is put in its own orbit, but not the sounds within them.

So you'd still get problems with e.g.:

d1 $ sound "[bd,ho]" # cut 1

As two sounds would trigger at the same time and in the same orbit and cut group, and one would 'win' and cancel the other one out.

6 Likes

Got it thank you.

I added a couple of examples to the above (I fixed the colour syntax highlighting by the way)

Don't forget that you can also use values other than '1' with legato. For example, legato 0.5 will play the sound for half a cycle, e.g.:

d1 $ s "sax" # legato 0.5

...and legato 1.5 will cause the sound to overlap with the next cycle, playing it for 1.5 cycles:

d1 $ s "sax" # legato 1.5

5 Likes

Yes I forgot to mention that!

3 Likes

the example is fascinating one thing i didn't understand : i tweaked the euclidean to sax(3,7) and it becomes polyphonic (!).
d2 $ jux rev $ sound "sax(3,7)" # legato 1 # n 3 # note "<[9 7] 5 [9 12]>"
it seems that jux is doing that? quite powerful..
i tried getting drawLine to tell me about it in vain, i might not get how to do it for embedded structures :
drawLine "x(3,7)" #note "<[9 7] 5 [9 12]>"

this is obviously very much neither here nor there, but I think the jargon for what legato accomplishes is a little closer to "tenuto"

6 Likes

Ah yes that does seem closer!

drawLine needs a Pattern of Characters, so it can not take control patterns like note "...". But have you tried to evaluate just structures directly. E.g. for sound "bd sd" |>| crush "[1 2]*3" you get:

(0>⅙)|crush: 1.0f, s: "bd"
(⅙>⅓)|crush: 2.0f, s: "bd"
(⅓>½)|crush: 1.0f, s: "bd"
(½>⅔)|crush: 2.0f, s: "sd"
(⅔>⅚)|crush: 1.0f, s: "sd"
(⅚>1)|crush: 2.0f, s: "sd"

I find this really useful. The only disadvantage I found compared to drawLine is, that only the first cycle is shown, so the < > variations are ignored.

How do you get the sample to stop playing in the first example?
"hush" or "d1 $ silence" don't work

Is there an emergency "stop all" if Tidal gets into a situation where it won't stop?

thx
tom

1 Like

To stop an ongoing sound, you can do ctrl-. (ctrl and period) in supercollider.

To do this in tidal you can run this in supercollider first

dirt.soundLibrary.addSynth(\panic, (play: { ~dirt.orbits.do(_.freeSynths) }));

then do this in tidal

once $ s "panic"
4 Likes

that is probably the thing that made me the most excited during the quarantine - together with patterning legato:

d2
    $ slow 4
    $ off 0.25 (|+ 3) 
    $ note (scale "minor" "0 7 -1 3 5") 
    # s "tabla"
    # n (irand 16)
    + legato "0.7 <0.6 3 1.5> 4"
5 Likes

To stop an ongoing sound, you can do ctrl-. (ctrl and period) in supercollider.

To do this in tidal you can run this in supercollider first

dirt.soundLibrary.addSynth(\panic, (play: { ~dirt.orbits.do(_.freeSynths) }));

then do this in tidal

once $ s "panic"

Or, if you're using Visual Studio Code for your Tidal editor, you can map 'Ctrl + .' to the 'hush' command of the Tidal plugin-- I got so used to Ctrl + . with Supercollider, this was a no-brainer for me. :slight_smile:

Bryan

1 Like

Damn....I listened to this for about 10 minutes straight.....

Very nice!

Bryan

1 Like

Thank you, appreciated :slight_smile:
Although I see a drawback: I'm wandering around when making patterns and, when I find something that I really like, I get stuck in it and lose track of time.
Incredibly good in search mode, not so much during live performances!

1 Like

I always wanted to know this exactly, thank you!

1 Like

Hi! Supercollider returns this error when I try to run that panic bit:

ERROR: Variable 'dirt' not defined.
in interpreted text
line 1 char 4:

dirt.soundLibrary.addSynth(\panic, (play: { ~dirt.orbits.do(_.freeSynths) }));


-> nil

what's the problem? :frowning:

dirt is stored in the global variable ~dirt, so you need to write

 ~dirt.soundLibrary.addSynth(\panic, (play: { ~dirt.orbits.do(_.freeSynths) }));