{-# LINE 8 "Interlude.lhs" #-}
--  This code was automatically generated by lhs2tex --code, from the file 
--  HSoM/Interlude.lhs.  (See HSoM/MakeCode.bat.)
{-# LINE 94 "Interlude.lhs" #-}
module  Euterpea.Examples.Interlude
        (  childSong6,  --  :: Music Pitch,
           prefix       --  :: [Music a] -> Music a)
        )  where
import Euterpea
{-# LINE 179 "Interlude.lhs" #-}
addDur       :: Dur -> [Dur -> Music a] -> Music a
addDur d ns  =  let f n = n d
                in line (map f ns)
{-# LINE 198 "Interlude.lhs" #-}
graceNote :: Int -> Music Pitch -> Music Pitch
{-# LINE 206 "Interlude.lhs" #-}
graceNote n  (Prim (Note d p))  =
          note (d/8) (trans n p) :+: note (7*d/8) p
graceNote n  _                  = 
          error "Can only add a grace note to a note."
{-# LINE 232 "Interlude.lhs" #-}
b1  = addDur dqn [b 3,   fs 4,  g 4,   fs 4]
b2  = addDur dqn [b 3,   es 4,  fs 4,  es 4]
b3  = addDur dqn [as 3,  fs 4,  g 4,   fs 4]
{-# LINE 241 "Interlude.lhs" #-}
bassLine =  timesM 3 b1 :+: timesM 2 b2 :+: 
            timesM 4 b3 :+: timesM 5 b1
{-# LINE 253 "Interlude.lhs" #-}
mainVoice = timesM 3 v1 :+: v2
{-# LINE 258 "Interlude.lhs" #-}
v1   = v1a :+: graceNote (-1) (d 5 qn) :+: v1b                 --  bars 1-2
v1a  = addDur en [a 5, e 5, d 5, fs 5, cs 5, b 4, e 5, b 4]
v1b  = addDur en [cs 5, b 4]
{-# LINE 266 "Interlude.lhs" #-}
v2 = v2a :+: v2b :+: v2c :+: v2d :+: v2e :+: v2f :+: v2g
{-# LINE 289 "Interlude.lhs" #-}
v2a  =  line [  cs 5 (dhn+dhn), d 5 dhn, 
                f 5 hn, gs 5 qn, fs 5 (hn+en), g 5 en]     --  bars 7-11
v2b  =  addDur en [  fs 5, e 5, cs 5, as 4] :+: a 4 dqn :+:
        addDur en [  as 4, cs 5, fs 5, e 5, fs 5]          --  bars 12-13
v2c  =  line [  g 5 en, as 5 en, cs 6 (hn+en), d 6 en, cs 6 en] :+:
        e 5 en :+: enr :+: 
        line [  as 5 en, a 5 en, g 5 en, d 5 qn, c 5 en, cs 5 en] 
                                                           --  bars 14-16
v2d  =  addDur en [  fs 5, cs 5, e 5, cs 5, 
                     a 4, as 4, d 5, e 5, fs 5]            --  bars 17-18.5
v2e  =  line [  graceNote 2 (e 5 qn), d 5 en, graceNote 2 (d 5 qn), cs 5 en,
                graceNote 1 (cs 5 qn), b 4 (en+hn), cs 5 en, b 4 en ]  
                                                           --  bars 18.5-20
v2f  =  line [  fs 5 en, a 5 en, b 5 (hn+qn), a 5 en, fs 5 en, e 5 qn,
                d 5 en, fs 5 en, e 5 hn, d 5 hn, fs 5 qn]  --  bars 21-23
v2g  =  tempo (3/2) (line [cs 5 en, d 5 en, cs 5 en]) :+: 
        b 4 (3*dhn+hn)                                     --  bars 24-28
{-# LINE 326 "Interlude.lhs" #-}
childSong6 :: Music Pitch
childSong6 =  let t = (dhn/qn)*(69/120)
              in instrument  RhodesPiano 
                             (tempo t (bassLine :=: mainVoice))
{-# LINE 376 "Interlude.lhs" #-}
prefixes         :: [a] -> [[a]]
prefixes []      =  []
prefixes (x:xs)  =  let f pf = x:pf
                    in [x] : map f (prefixes xs)
{-# LINE 394 "Interlude.lhs" #-}
prefix :: [Music a] -> Music a
prefix mel =  let  m1  = line (concat (prefixes mel))
                   m2  = transpose 12 (line (concat (prefixes (reverse mel))))
                   m   = instrument Flute m1 :=: instrument VoiceOohs m2
              in m :+: transpose 5 m :+: m
{-# LINE 404 "Interlude.lhs" #-}
mel1 = [c 5 en, e 5 sn, g 5 en, b 5 sn, a 5 en, f 5 sn, d 5 en, b 4 sn, c 5 en]
mel2 = [c 5 sn, e 5 sn, g 5 sn, b 5 sn, a 5 sn, f 5 sn, d 5 sn, b 4 sn, c 5 sn]