{-# LANGUAGE OverloadedStrings #-}
{-
-}
import Music.Prelude
-- A simple subject
subj = times 2 $ scat [c,c,d,b_,e,e]^/16
-- Each voice differ slighly in onset etc
voca v = delay ((4/8)^*v) $ removeRests $ scat $ fmap (\i -> (id $ up (_M2^*i) subj) |> rest^*(15/8))
$ [0..3]
-- The
music = id
$ title "Phrases"
$ composer "Anonymous"
$ timeSignature (3/8)
$ timeSignatureDuring ((14*3/8) <-> 200) (4/8)
$ over (phrases . valuesV) (rotate 1)
-- $ over (phrases.middleV) (octavesAbove 1)
-- $ over phrases fuse
$ rcat
-- $ fadeIn 4
$ map voca [0..3]
main = open $ asScore $ music
rotate :: Int -> [a] -> [a]
rotate n xs = iterate rotate1 xs !! n
where
rotate1 [] = []
rotate1 xs = last xs : init xs