Skip to content

Latest commit

 

History

History
89 lines (68 loc) · 2.09 KB

README.md

File metadata and controls

89 lines (68 loc) · 2.09 KB

clapping

This is an experiment in visualizing Tidal Cycles output. The aim was to convince myself visually that the version of Steve Reich's "Clapping Music" I'd made was correct. The version as performed with an automat, with four repeats of each cycle, about a minute and a half, is

let p = "t t t ~ t t ~ t ~ t t ~"
in d1 $ qtrigger $ seqP [
      (0, 52, struct p $ n "1"),
      (0, 52, repeatCycles 4 $ iter 12 $ struct p $ n "2")
    ] # legato 0.25 # s "dada"

and the text output in clapping.raw, with a single repeat per cycle, was generated by evaluating

let p = "t t t ~ t t ~ t ~ t t ~"
in writeFile "clapping.raw" $ Sound.Tidal.Show.showAll (Arc 0 13) $ qtrigger $ seqP [
      (0, 52, struct p $ n "1"),
      (0, 52, iter 12 $ struct p $ n "2")
    ]

The default action of the program here is to produce a text version of the patterns; after installing Poetry and running poetry install, you can run poetry run transform to get this:

111011010110
111011010110

111011010110
110110101101

111011010110
101101011011

111011010110
011010110111

111011010110
110101101110

111011010110
101011011101

111011010110
010110111011

111011010110
101101110110

111011010110
011011101101

111011010110
110111011010

111011010110
101110110101

111011010110
011101101011

111011010110
111011010110

After installing LilyPond, running poetry run transform --out lilypond produces clapping.ly and then clapping.pdf.

(A couple of days before I got this working, I used the didactic pattern visualizer to show the correctness of the score dynamically.)

This code is not useful as is for generating scores from arbitrary Tidal Cycles patterns, but it could probably be generalized; a better bet would probably be to implement an events-to-LilyPond transformer in Haskell.