packages feed

music-preludes-1.8: examples/trio.hs

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