import System.Process (runCommand)
import Music.Prelude.StringQuartet
main = do
-- writeMidi "test.mid" score
-- writeXml "test.xml" $ score^/4
-- openXml score
openLy score
-- playMidiIO "Graphic MIDI" $ score^/10
score = piece
subj1 = ((_p `cresc` mf |> mf `dim` _p)^*(duration subj1' - 2)) `dynamics` subj1'
subj1' :: Score Note
subj1' = (^/2) $
legato (b_ |> c) |> legato (c |> b_^*2)
|> legato (b_ |> c |> d)
|> b_ |> c |> b_^*2
|> legato (e |> d |> b_ |> c) |> b_^*2
|> d |> e |> b_ |> c^*2 |> b_
piece = part1 |> toLydian part2
where
part1 = pres1 |> pres2 |> pres3 |> pres4 |> pres5 |> pres6
part2 = pres1 |> pres2 |> pres3 |> pres4 |> pres5 |> pres6
pres1 = delay 0 (subj1^*(2/2))
pres2 = delay 0 (subj1^*(2/2)) </> delay 2 (subj1^*(3/2))
pres3 = delay 0 (subj1^*(2/2)) </> delay 2 (subj1^*(3/2))
pres4 = delay 0 (subj1^*(2/3)) </> delay 2 (subj1^*(3/2))
pres5 = delay 0 (subj1^*(2/3)) </> delay 4 (subj1^*(2/2))
pres6 = delay 0 (subj1^*(2/3)) </> delay 4 (subj1^*(2/2))
toLydian = modifyPitches (\p -> if p == c then cs else p)
-- (|>) :: Score a -> Score a -> Score a
-- a |> b = mcatMaybes $ fmap Just a ||> fmap Just b