import Music.Prelude
-- |
-- String quartet
--
-- Hommage a Henrik Strindberg
--
tremCanon = compress 4 $
(delay 124 $ set parts' violins1 $ subjs^*1)
<>
(delay 120 $ set parts' violins2 $ subjs^*1)
<>
(delay 4 $ set parts' violas $ subjs^*2)
<>
(delay 0 $ set parts' cellos $ subjs^*2)
where
subjs = scat $ map (\n -> palindrome2 $ rev2 $ subj n) [1..40::Int]
subj n
| n < 8 = a_^*2 |> e^*1 |> a^*1
| n < 16 = a_^*2 |> e^*1 |> a^*1 |> e^*1 |> a^*1
| n < 24 = a_^*2 |> e^*0.5 |> a^*0.5 |> e^*0.5 |> a^*0.5
| otherwise = e^*0.5 |> a^*0.5
mainCanon2 = palindrome2 mainCanon <> celloEntry
celloEntry = set parts' cellos e''^*(25*5/8)
mainCanon = timeSignature (time 6 8) $ asScore $
(set parts' violins1 $ harmonic 2 $ times 50 $ legato $ accentLast $
octavesUp 2 $ scat [a_,e,a,cs',cs',a,e,a_]^/8)
<>
(set parts' violins2 $ harmonic 2 $ times 50 $ legato $ accentLast $
octavesUp 2 $ scat [d,g,b,b,g,d]^/8)^*(3/2)
<>
(set parts' violas $ harmonic 2 $ times 50 $ legato $ accentLast $
octavesUp 2 $ scat [a,d,a,a,d,a]^/8)^*(3*2/2)
<>
set parts' cellos a'^*(25*5/8)
music :: Score StandardNote
music = mainCanon2
openBook :: Score StandardNote -> IO ()
openBook = openLilypond' LyScoreFormat
main :: IO ()
main = openBook music
-- TODO
rev2 = id
palindrome2 = id