Week 1 lesson 4 - mini-notation part 2

Hm, perhaps the dirt-samples install got interrupted.
You can download the whole Dirt-Samples file here: https://github.com/musikinformatik/Dirt-Samples/archive/master.zip
You could unzip that over the existing Dirt-Samples folder to be sure they're all there.

Hey all

unless I am mistaken it appears to me that on a regular pattern, if you play a synth, it will behave monophonically (does that word exist ?), i.e the tails, if you have a longer release, are cut when the next pattern step starts (I checked with some Synthdefs of mine, with a longer release, with either adsr style enveloppe or ad style enveloppe). Since polyphony is possible anyway, is there a way to change this behaviour, so it sounds like a polysynth would do, with overlapping between the notes ? Or is there something to do on the Synthdef side ?

thanks !

Yes by default synth notes keep within their 'step'. This is because the default for synths is # legato 1.

You can get the same behaviour from longer samples by adding # legato 1 to those, e.g. d1 $ sound "bev [bev bev]" # legato 1

You can make sounds twice as long by adding # legato 2 but that will still be a factor of step duration.

To express duration in seconds instead, you can use e.g. # sustain 2 for two seconds

Thanks, I wasn't aware of the legato control ! But still this is just setting the duration of the sustain period (including the possibility of extending it over the next step, which is cool) : but it's not the synth release or decay ringing. No way to have that ?

@Leon I've been asking about this in another forum. I think by design, synths in Tidal do not have a release tail, but instead the length of the envelope is scaled to the sustain value. To be honest I think it is a bit of a limitation. See this thread:

https://club.tidalcycles.org/t/adding-a-release-tail-to-a-sample/1197

The 'untested' solution there does not work for me, and I don't have sufficient understanding of the way that SuperDirt deals with envelopes to dig any deeper into this question at the moment.

1 Like

Ok thanks for the information ! We'll learn to do without it then :slight_smile:

Thanks a lot ! This is so cool! And the relation with classical music composing techniques ( Isorhythm in Medieval Music melody-color, talea-rhythm) is amazing they just needed it to make it 10000000x faster. I guess everything goes in the world at its own time. And also thank you for the visualized explanation. It makes everything clearer!

3 Likes

True that! I always thought that * and / acts on doubling or halving the number of events in the step rather than on the step, e.g. bd sd/2 makes sd play only every second pattern, and the pattern is one cycle long.
But the truth seems that bd actually plays every pattern and the pattern is 2 cycles long:
bd sd/2 -> slow 2 $ bd sd bd ~ where you basically have three steps, two of which made of bd and the third made of sd ~.

But then I have to conclude that a pattern can have steps of different length but only one event per step is allowed - right, or I am going completely wrong?

1 Like

Hm, I think you are saying 'bd' when you mean 'sd'?

I talk about 'steps' to explain the mininotation, but really in Tidal time is really flexible and events can happen at any time.

Earlier in this thread, @vin noted that another way of thinking about 'speeding up' is 'increasing density'. I think this is a really good way of thinking about it - actually Tidal's 'fast' function is an alias of 'density'. So if we do "bd [cp sd]*2", we're treating "cp sd" as a repeating structure and increasing its density by a factor of 2, creating the equivalent of "bd [cp sd cp sd]". I've been calling things like [cp sd] a 'subsequence', but they are really cyclic subpatterns.

Often working with computers is about making lists of things, but Tidal isn't linear in that way.. It's more about cyclic behaviour, where everything is oscillating, creating interferance patterns.. This will be come more (or less, in a hopefully good way) clear when we start working more with functions this week.

1 Like

It also seems super related to a lot of Messiaen’s techniques, or the concept of the tala from Hindustani (if I recall correctly, hopefully someone willl correct me if not) music.

1 Like

Is the cascading oscillators/cycles the origin of the name TidalCycles?

The mini-notation is heavily influenced by Bernard Bel's Tabla notation, so tala structures are definitely there!
Tidal was originally called diesel (as an expansion of DSL/domain specific language). Then after a rewrite I called it petrol. Eventually I thought it should have more environmentally friendly energy source as a name, and thought Tidal was a good fit for its cyclic nature.. Then TIDAL the music store came along so went with the expansion TidalCycles, which I'd already had to use on twitter and github as 'tidal' was already taken.. But I still mostly just call it 'Tidal'.

4 Likes

Yes, there was a typo - edited now.

Ok, I do understand. This makes me think of several layers, i.e. several cyclic structures within the pattern which overlap and get in sync at the cycle start.

1 Like

Is the pattern visualiser available for use?

Yes it's here: https://github.com/tidalcycles/tidal-vis

2 Likes

Thanks.

I've just tried updating tidal in an effort to install tidal-vis. After updating the packages, haskell lib and superdirt I get the following error:

`Variable not in scope: d1 :: t0 -> t


• Variable not in scope: sound :: [Char] -> t0
• Perhaps you meant ‘round’ (imported from Prelude)`

Having trouble resolving it

Hm cabal is causing a lot of problems at the moment. Using an older way to install things seems to work better.

When tidal (in particular, ghci) starts up, it should tell you the location of a "package environment" file. If you delete that, and then use this older alternative way to install things, it will hopefully go better:

cabal v1-update
cabal v1-install tidal
cabal v1-install tidal-vis

Thanks for the response! Will lay off the vis until tidal is working again.

Just install 1.4.9 with the instructions you suggested. Although getting the following error now:

Could not load module ‘Sound.Tidal.Context’
    It is a member of the hidden package ‘tidal-1.4.5’.

Hm strange! Ok lets wipe the haskell libraries and start again

mv ~/.ghc /tmp
mv ~/.cabal /tmp
cabal v1-update
cabal v1-install tidal
1 Like

Thanks Alex for saving my afternoon from the mundanity of build failures! Note taken of those fixes