packages feed

music-preludes-1.3: examples/duo.hs

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