Etudes for tidal

@kit-christopher and I were chatting recently, and decided we are going to try and golf some etudes for tidal to help improve our real time melody composition/syntax/shortcut game.

I think it'd be great to see how other people see these patterns represented in code too, we might be able to develop some new methods/shortcuts etc :slight_smile:

I'm keeping my results here:

2 Likes

Starting simple - First 8 bars of "In May" by Franz Behr:
image

-- In May - Franz Behr   
d1  $ stack [
        arp "down" $
            n "<c6'maj d6 c6'maj d6 [c6 d6 e6] [f6 e6 d6] [e6 d6 c6] d6>" 
        , arp "up" $
            n "<[c5'maj] [b4,f,g]>"
    ] # s "superpiano"

[edit] golfed it a bit, fixed a mistake

3 Likes

yeah. now do a tidal golf version of Oxygene Part 2.

Thankyou! I will - I got all gee'd up to do a few of these then my spare time ran out...

I'll take a look at it this week hopefully :slight_smile:

note (scale "major"
     $ cat [ cat $ walk  8 [3,2, 3,3, 5,5, 2,2, 2,2, 2,1]
           , cat $ walk 11 [3,2, 2,2, 5,5, 2,2, 2,2, 2,3]
           ] )

using a helper function that builds a zig zag path

walk (8 :: Integer) [2,3,4,5]
-- ==> [8, 7,6, 7,8,9, 8,7,6,5, 6,7,8,9,10]

with possible implementation

walk x ws  = scanl (+) x
  $ concat $ zipWith replicate ws (cycle [-1, 1])

using functions https://hackage.haskell.org/package/base-4.21.0.0/docs/Data-List.html#v:scanl etc.

full code (it's not much longer) and rendered audio: https://git.imn.htwk-leipzig.de/waldmann/computer-mu/-/tree/master/tidal/code/ox?ref_type=heads

Next: any Baroque composer (Telemann, Handel, Corelli, ..) e.g., Sonatas for two recorders, by G. P. Telemann (1681โ€“1767) this looks highly formulaic (= Kolmogorov-compressible in a pattern language) but is highly enjoyable, and the master of it all - is J S Bach, of course.

Thanks for that - very interesting, you reminded me to check it out and I decided I'm going to give it a try with existing tidal functions, there's a few that I'd like to understand a bit better which I think may be related. I also want to try and understand the relationship between scale use and note arithmetic better because I have some grey areas ... we'll see how far I get, there's a lot of patterns in that piece, but also a lot of pattern breaking...

J S Bach, Partita 3, BWV 1006 https://imslp.org/wiki/File:PMLP04292-Partita_BWV_1006.PDF

could be used as exercise for nested (slow)cat.

example: measure 20 and 21:

<bf*12 a*12>/12 <f <d*3 c*3 c*3 bf4*3>/3 >

Ugh, it seems that IMSLP does not allow "deep" links (I guess they want/need to show the copyright disclaimer first. Well, then go through https://imslp.org/wiki/6_Violin_Sonatas_and_Partitas,_BWV_1001-1006_(Bach,_Johann_Sebastian) ),

or https://www.mutopiaproject.org/ftp/BachJS/BWV1006/bwv-1006_1/ , they also have a MIDI file (generated from lilypond, I guess) that one could use as input for an automatic pattern compressor ...

And, the long game is this: once you have a compressed representation C of (some piece of music) M, you change one small piece in C, and get back some M' that is somehow similar to M, but also somehow not. (Try with the above, change any note in the pattern.) That's what LLMs do, sort of. (M = training data, C = weights, difference(C',C) = prompt, hand-wavingly)

on the uzu discord, people started with some strudel code golf too, which, in essence is a mini notation golfing, very similar to this thread.

very fun stuff to think about.

1 Like

I kind of didn't follow through with this, in part because I started using strudel in earnest and wasn't sure how to reconcile the function differences (eg with arp) between tidal and strudel ...

Is the discord discussion using mini-notation exclusively, or is there strudel/tidal specific elements?