Week 2 lesson 1 - starting out with effects

Ok, time to start exploring some effects! In this video I introduce some of the many effects available with superdirt.. and begin to explain how Tidal goes about combining two or more such patterns into one. We'll return to this later..

If you find that some of the effects don't work for you, then check that you have 'sc3-plugins' properly installed in supercollider.

-- Tidal has lots of effects we can use to change the way things sound.

-- vowel is a filter which adds a vowel sound
-- try a, e, i, o and u

d1 $ n "0 1 0 [2 4] 2 4 1*2 3" # s "cpu"

d1 $ n "0 1 0 [2 4] 2 ~ 1*2 3" # s "cpu" # vowel "a"

d1 $ n "0 1 0 [2 4] 2 ~ 1*2 3" # s "cpu" # vowel "o"

-- We can use the mini notation to create sequences of effects too:

d1 $ n "0 1 0 [2 4] 2 ~ 1*2 3" # s "cpu" # vowel "a o e"

-- Tidal does its best to map patterns across to one another.

-- You can add a non-vowel letter to pause the vowel effect

d1 $ n "0 1 0 [2 4] 2 ~ 1*2 3" # s "cpu" # vowel "a p"

-- 'squiz' is a nice distortion effect
d1 $ n "0 1 0 [2 4] 2 ~ 1*2 3" # s "cpu" # squiz "4 1 0 3"

-- With '#' structure comes from the left - try swapping the parameters around

d1 $ squiz "4 1 0 3" # n "0 1 0 [2 4] 2 ~ 1*2 3" # s "cpu"

-- Now there are only four sounds per cycle, because there's four in the leftmost
-- 'squiz' pattern

-- We'll learn more about how things in patterns get matched up later!

-- 'gain' changes the volume of different sounds

d1 $ sound "kick kick snare snare" # gain "1 0.7 0.6 0.5"

d1 $ sound "[hh*16, kick:8 snare:4 [~ kick:8] snare]" # gain "[1 1.2]*8"

-- speed can be used to pitch samples
-- (we can also use 'note' to do this, but we'll look at that later)

-- speed changes the speed of playback,
-- e.g. 2 = play the sample twice as fast - which moves the note up an octave

d1 $ sound "numbers:1 numbers:2 numbers:3 numbers:4" # speed "1 1.5 2 0.5"

-- Or we can take the pattern from the speed parameter

d1 $ speed "1*2 2*2 4*6" # sound "jungbass:6"

-- pan allows us to create stereo effects - 0 = left, 0.5 = middle, 1 = right

d1 $ sound "numbers:1 numbers:2 numbers:3 numbers:4" # pan "0 0.5 1"

-- shape adds distortion (but be careful - it also makes the sound much louder)

d1 $ sound "kurt:4 kurt:4"

d1 $ sound "kurt:4(3,8)" # shape "0 0.98" # gain "0.7"

Find the full list of effects here: https://tidalcycles.org/index.php/All_effects_and_synths

Next lesson:

8 Likes

Basic question that I couldn't find the answer to quickly: for effects with multiple parameters, like Reverb for instance, what separator should we use the access the additional parameters (like size and dry)? I assumed a comma but I'm getting errors.

Reverb

(parameters: #room, #size, #dry)

Hi @ben, you currently have to send them as separate patterns, e.g.:

d1 $ sound "clap" # room 0.8 # size 0.9
5 Likes

Ah, got it. Thank you.

I didn't hear any difference when i used the squiz effect. Do i have to instal something special for it?

@fabian

1 Like

I accidentally typed rev as a controller, and seem to have stumbled upon a mystery undocumented effect? Sounds like some sort of reverb? But throws and error in SuperCollider if I try to pattern it. Any ideas what is going on here?


d1 $ s "claus" # rev 0.1

d1 $ s "claus" # rev 0.5

d1 $ s "claus" # rev 0.9

d1 $ s "claus" # rev "0.1 0.01 0.5 0.9"

> no synth or sample named '0.9' could be found. module 'sound': instrument not found: nil

If you put a number without a control then it'll default to making it an n pattern. 0.5 and 0.9 are probably rounding up to 1, thereby picking a different pattern. rev here is trying to reverse an n pattern, which shouldn't really do anything..

I keep meaning to disable this defaulting of numbers to n (and s for strings) behaviour. I put it in to make simple patterns in a workshop with 8 year olds.. But it makes it easy to stumble on confusing behaviour like this.

2 Likes

in /Users/fabian/Library/Application Support/SuperCollider/Extensions/SC3plugins i have a lot of folders like ATK, AYUGens etc. ist that correct or should that be somewhere else? Is there a way in Supercollider to test if i have installed the sc3plugin?

When SuperDirt boots, it should complain if the plugins are missing.

They should be either in the location returned by Platform.userExtensionDir or Platform.systemExtensionDir

A common error I've seen is downloading the source code, rather than the binary plugins. The big green 'download' button here is tempting but doesn't get you what you need!
https://github.com/supercollider/sc3-plugins

Instead, scroll down on the https://github.com/supercollider/sc3-plugins page, and follow the instructions which take you to the release page: https://github.com/supercollider/sc3-plugins/releases

You have to select the version that matches your supercollider version. I think you'll probably need the -signed version on the mac, but I'm unclear on that.. Maybe that's only for recent versions of macos?

Is supermandolin also a part of sc3-plugins? (Because that works, gain and vowel also)
I now tried out supercollider 3.11 plus the 3.11 RC2 version of the plugins and 3.10 plus the 3.10 Version of the plugins.

Hm, could it be that your version of superdirt is from a while ago, like a year or so old? Can you share the output of Quarks.installed and also what superdirt outputs when you start it up?

compiling class library...
	Found 836 primitives.
	Compiling directory '/private/var/folders/t6/hwn93hhs2_s7w8d4v5450j000000gn/T/AppTranslocation/C7691B55-FD2A-4996-BDE5-B3BB4212DFBF/d/SuperCollider.app/Contents/Resources/SCClassLibrary'
	Compiling directory '/Users/fabian/Library/Application Support/SuperCollider/Extensions'
	Compiling directory '/Users/fabian/Library/Application Support/SuperCollider/downloaded-quarks/Vowel'
	Compiling directory '/Users/fabian/Library/Application Support/SuperCollider/downloaded-quarks/Dirt-Samples'
	Compiling directory '/Users/fabian/Library/Application Support/SuperCollider/downloaded-quarks/SuperDirt'
	numentries = 1261178 / 19288854 = 0.065
	5751 method selectors, 3354 classes
	method table size 20580656 bytes, big table size 154310832
	Number of Symbols 14779
	Byte Code Size 436169
	compiled 548 files in 0.94 seconds
compile done
localhost : setting clientID to 0.
internal : setting clientID to 0.
Class tree inited in 0.01 seconds


*** Welcome to SuperCollider 3.10.4. *** For help press Cmd-D.
Booting server 'localhost' on address 127.0.0.1:57110.
SCDoc: Indexing help-files...
Found 0 LADSPA plugins
Number of Devices: 3
   0 : "Built-in Microph"
   1 : "Built-in Output"
   2 : "Gerät mit mehreren Ausgäng"

"Built-in Microph" Input Device
   Streams: 1
      0  channels 2

"Built-in Output" Output Device
   Streams: 1
      0  channels 2

SC_AudioDriver: sample rate = 44100.000000, driver's block size = 512
SuperCollider 3 server ready.
SCDoc: Indexed 1914 documents in 1.76 seconds
Requested notification messages from server 'localhost'
localhost: server process's maxLogins (1) matches with my options.
localhost: keeping clientID (0) as confirmed by server process.
Shared memory server interface initialized
loading synthdefs in /Users/fabian/Library/Application Support/SuperCollider/downloaded-quarks/SuperDirt/classes/../synths/core-modules.scd
---- core synth defs loaded ----
loading synthdefs in /Users/fabian/Library/Application Support/SuperCollider/downloaded-quarks/SuperDirt/classes/../synths/core-synths.scd
loading synthdefs in /Users/fabian/Library/Application Support/SuperCollider/downloaded-quarks/SuperDirt/classes/../synths/default-synths.scd
loading synthdefs in /Users/fabian/Library/Application Support/SuperCollider/downloaded-quarks/SuperDirt/classes/../synths/try-load-extra-synths.scd
loading synthdefs in /Users/fabian/Library/Application Support/SuperCollider/downloaded-quarks/SuperDirt/classes/../synths/tutorial-synths.scd

loading 315 sample banks:
808 (6) 808bd (25) 808cy (25) 808hc (5) 808ht (5) 808lc (5) 808lt (5) 808mc (5) 808mt (5) 808oh (5) 808sd (25) 909 (1) ab (12) acid (3) ade (10) ades2 (9) ades3 (7) ades4 (6) airhorn (1) alex (2) alphabet (26) alphabetW (26) amencutup (32) arc (1) armora (7) arp (2) arpy (11) atlast (3) auto (11) baa (7) baa2 (7) bass (4) bass0 (3) bass1 (30) bass2 (5) bass3 (11) bassdm (24) bassfoo (3) battles (2) bd (24) bd8 (25) bd9 (10) bees (6) bend (4) bev (2) big (6) bin (2) birds (10) birds3 (19) bk (96) bks (8) bleep (13) blip (2) blk (20) bls (13) blue (2) bottle (13) break (33) breaks125 (2) breaks152 (1) breaks157 (1) breaks165 (1) breath (1) bsbass (9) bsguitar (19) bshihat (3) bskick (9) bsnoise (22) bsperc (8) bssnare (8) bsvocals (13) bubble (8) can (14) casio (3) cb (1) cb8 (1) cc (6) ch8 (1) chin (4) chink (1) circus (3) cl8 (1) clak (2) clap (8) claus (16) clean (8) click (4) clubkick (5) co (4) coins (1) control (2) cosmicg (15) cp (2) cp8 (1) cp9 (4) cpu1 (23) cpu2 (29) cr (6) cr9 (4) crofton (3) crow (4) d (4) db (13) dhm (1) diphone (38) diphone2 (12) 
WARNING: File reading failed for path: '/Users/fabian/Library/Application Support/SuperCollider/downloaded-quarks/SuperDirt/classes/../../Dirt-Samples/dirty/note-077.wav'


dirty (88) dist (12) donk (1) dork2 (4) dorkbot (2) dr (42) dr2 (6) dr55 (4) dr_few (8) drum (6) drumtraks (13) dsynth (3) e (8) east (9) electro1 (13) em2 (6) erk (1) f (1) feel (7) feelfx (8) fest (1) fire (1) flick (17) fm (17) foley (287) foo (27) funky (8) future (17) gab (10) gabba (4) gabbaloud (4) gabbalouder (4) glasstap (3) glitch (8) glitch2 (8) gretsch (24) gtr (3) h (7) hand (17) hardcore (12) hardkick (6) haw (6) hc (6) hc8 (5) hh (13) hh27 (13) hh9 (4) hit (6) hits (16) hmm (1) ho (6) hoover (6) house (8) ht (16) ht8 (5) ht9 (8) if (5) ifdrums (3) incoming (8) industrial (32) insect (3) invaders (18) jazz (8) jp (8) jungbass (20) jungbleep (1) jungle (13) juno (12) jv (13) jvbass (13) jvgabba (46) jvr (25) 
WARNING: File reading failed for path: '/Users/fabian/Library/Application Support/SuperCollider/downloaded-quarks/SuperDirt/classes/../../Dirt-Samples/jvrave/note-099.wav'



WARNING: File reading failed for path: '/Users/fabian/Library/Application Support/SuperCollider/downloaded-quarks/SuperDirt/classes/../../Dirt-Samples/jvrave/note-100.wav'


jvrave (64) jx (73) kick (21) kicklinn (1) koy (2) kurt (7) latibro (8) lc8 (5) led (1) less (4) lighter (33) linnhats (6) liq (1) lt (16) lt8 (5) lt9 (8) ma8 (1) made (7) made2 (1) mash (2) mash2 (4) mc8 (5) metal (10) micron (17) miniyeah (4) moan (1) monsterb (6) moog (7) mouth (15) mp3 (4) msg (9) mt (16) mt8 (5) mt9 (8) mute (28) narc (2) newnotes (15) noise (1) noise2 (8) notes (15) numbers (9) oc (4) odx (15) off (1) oh8 (5) oh9 (4) onoff (5) os (3) outdoor (6) pad (3) padlong (1) pebbles (1) perc (6) peri (15) pirate (1) pluck (17) popkick (10) print (11) proc (2) procshort (8) psr (30) pulse (61) rash (73) rave (8) rave2 (4) ravebass (13) ravemono (2) rd9 (4) realclaps (4) redflag (1) repeticion (2) repetition (7) reverbkick (1) rim (9) rm (2) rs (1) rs8 (1) rs9 (2) sax (22) sb (3) sclap (25) scream (1) sd (2) sd8 (25) sd9 (15) seawolf (3) sequential (8) sf (18) shackup (1) shakedown (1) sheffield (1) short (5) sid (12) sine (6) sitar (8) skip (4) sl (4) sn (90) snare (90) sold (5) sometimes (1) space (18) speakspell (12) speech (7) speechless (10) speedupdown (9) sqrpad (3) sr (64) stab (23) stabs (19) stomp (10) subroc3d (11) sugar (2) sundance (6) tabla (26) tabla2 (46) tablex (3) tacscan (22) tam (17) tech (13) techno (7) tink (5) tok (4) toys (13) trump (11) ul (10) ulgab (5) uxay (3) v (6) vocobass (13) voodoo (5) wind (10) wobble (1) world (3) xmas (1) xx (89) yeah (31) 
... file reading complete. Required 922 MB of memory.


loading 22 sample banks:

replacing 'break' (33)
break (33) 
replacing 'bsbass' (9)
bsbass (9) 
replacing 'bsguitar' (19)
bsguitar (19) 
replacing 'bshihat' (3)
bshihat (3) 
replacing 'bskick' (9)
bskick (9) 
replacing 'bsnoise' (22)
bsnoise (22) 
replacing 'bsperc' (8)
bsperc (7) 
replacing 'bssnare' (8)
bssnare (8) 
replacing 'bsvocals' (13)
bsvocals (13) 
replacing 'clap' (8)
clap (8) 
replacing 'claus' (16)
claus (16) cpu (23) 
replacing 'cpu2' (29)
cpu2 (29) 
replacing 'dsynth' (3)
dsynth (3) 
replacing 'foley' (287)
foley (287) hi (8) 
replacing 'kick' (21)
kick (21) lo (8) 
replacing 'rash' (73)
rash (73) smmbuzzwave (146) smmtom (40) 
replacing 'snare' (90)
snare (90) 
... file reading complete. Required 295 MB of memory.

SuperDirt: listening to Tidal on port 57120

-> [ Quark: Vowel[472222fc51028abf749f56d89d21bd2fce434d17], Quark: Dirt-Samples[96f5d6bfbeb5be2657bfb3d99d6cb800c15bbd4d], Quark: SuperDirt[6818f0642f6107be45814489c37d10a481d29f17] ]

The two posts are with SuperCollider 3.10.4, i also tried with SuperCollider 3.11.0 should i post the outputs as well?

(BTW. Thanks for the great videos and the help!)

Hm, that version of superdirt is a few years old, before squiz. In SuperCollider if you go to menus > language > quarks you should be able to select 'LATEST' version for superdirt. Then 'recompile class library' (or restart supercollider).

The version of supercollider itself shouldn't matter, and seems your sc3plugins is loading fine.

Thanks! After switching to latest squiz works :slight_smile:

1 Like

Alex, just one small typo: the title of the video on YT says week 1.

With respect to the $ operator, I tend to think about it as an useful way to avoid parentheses.
For instance, d1 $ s "cpu" is equivalent to d1 (s "cpu") as d1 is a function that takes one input argument and s is a function that takes one input argument. Therefore, s "cpu" has to be evaluated first before the result is passed as input argument for d1.
This comes extremely handy when you create a stack of function, e.g.
d1 $ every 3 rev $ brak $ n "0 1 2 3" # s "cpu"
that otherwise would be something like
d1 (every 3 rev (brak ( n "0 1 2 3" # s "cpu")))

1 Like

Thanks, fixed the video title!

Yes the comparison with parenthesis is helpful, but then gets confusing when it comes to trying to use $ for something other than the final parameter..

I've been searching for a good way to explain $ for a while..
https://www.reddit.com/r/haskell/comments/61s5wr/how_to_explain_haskell_syntax_to_nonprogrammers/

I think a lot of people prefer to just get used to it being there, and get a feel for things, before really trying to understand it.

4 Likes

I can see, and yet no consensus after 3 years.

could you please elaborate on this? I think I did not get what you're saying.