> module HSoM.Examples.EuterpeaExamples where
> import Euterpea
> import HSoM.Examples.MoreMusic
> import HSoM.Examples.Interlude
> import HSoM.Examples.SelfSimilar
> import HSoM.Examples.SSF
Simple examples of Euterpea in action. Note that this module also imports modules Interlude and SelfSimilar. ----------------------------------------------------------------------------- From the tutorial, try things such as pr12, cMajArp, cMajChd, etc. and try applying inversions, retrogrades, etc. on the same examples. Also try "childSong6" imported from module Interlude. For example:
> t0 = play childSong6
----------------------------------------------------------------------------- C Major scale for use in examples below:
> cMajScale = Modify (Tempo 2)
>             (line [c 4 en, d 4 en, e 4 en, f 4 en, 
>                    g 4 en, a 4 en, b 4 en, c 5 en])
>
> cms' = line [c 4 en, d 4 en, e 4 en, f 4 en, 
>              g 4 en, a 4 en, b 4 en, c 5 en]
>
> cms = cMajScale
Test of various articulations and dynamics:
> t1 = play (Modify (Instrument Percussion)
>        (Modify (Phrase [Art (Staccato (1/10))]) cms :+:
>         cms                             :+:
>         Modify (Phrase [Art (Legato  (11/10))]) cms    ))
>
> temp = Modify (Instrument AcousticGrandPiano) 
>          (Modify (Phrase [Dyn (Crescendo 4)]) (c 4 en))
>
> mu2 = Modify (Instrument Vibraphone)
>        (Modify (Phrase [Dyn (Diminuendo (3/4))]) cms :+:
>          (Modify (Phrase [Dyn (Crescendo 4), Dyn (Loudness 25)]) cms))
> t2 = play mu2
>
> t3 = play (Modify (Instrument Flute) 
>        (Modify (Phrase [Tmp (Accelerando 0.3)]) cms :+:
>         Modify (Phrase [Tmp (Ritardando  0.6)]) cms    ))
----------------------------------------------------------------------------- Example from the SelfSimilar module.
> t10s   = play (rep (offset (dur ttm0)) (Modify (Transpose 4)) 2 ttm0)
----------------------------------------------------------------------------- Example from the Interlude module.
> cs6 = play childSong6
----------------------------------------------------------------------------- Example from the Ssf (Stars and Stripes Forever) module.
> ssf0 = play ssf
----------------------------------------------------------------------------- Midi percussion test. Plays all "notes" in a range. (Requires adding an instrument for percussion to the UserPatchMap.)
> drums a b = Modify (Instrument Percussion)
>                   (line (map (\p-> Prim $ Note sn (pitch p)) [a..b]))
> t11 a b = play (drums a b)
----------------------------------------------------------------------------- Test of cut and shorten.
> t12  = play (cut 4 childSong6)
> t12a = play (cms /=: childSong6)
----------------------------------------------------------------------------- Tests of the trill functions.
> t13note = Prim (Note qn (C,5))
> t13 =  play (trill   1 sn t13note)
> t13a = play (trill'  2 dqn t13note)
> t13b = play (trilln  1 5 t13note)
> t13c = play (trilln' 3 7 t13note)
> t13d = play (roll tn t13note)
> t13e = play (Modify (Tempo (2/3)) 
>               (Modify (Transpose 2) 
>                 (Modify (Instrument AcousticGrandPiano) 
>                   (trilln' 2 7 t13note))))
----------------------------------------------------------------------------- Tests of drum.
> t14 = play (Modify (Instrument Percussion) (perc AcousticSnare qn))
> -- a "funk groove"
> t14b = let p1 = perc LowTom        qn
>            p2 = perc AcousticSnare en
>        in play (Modify (Tempo 3) (Modify (Instrument Percussion) (cut 8 (forever
>                  ((p1 :+: qnr :+: p2 :+: qnr :+: p2 :+:
>                    p1 :+: p1 :+: qnr :+: p2 :+: enr)
>                   :=: roll en (perc ClosedHiHat 2))))))
> -- a "jazz groove"
> t14c = let p1 = perc CrashCymbal2  qn
>            p2 = perc AcousticSnare en
>            p3 = perc LowTom        qn
>        in play (Modify (Tempo 3) (Modify (Instrument Percussion) (cut 4 (forever
>                  ((p1 :+: (Modify (Tempo (3/2)) (p2 :+: enr :+: p2))
>                   :=: (p3 :+: qnr)) )))))
> t14d = let p1 = perc LowTom        en
>            p2 = perc AcousticSnare hn
>        in play (Modify (Instrument Percussion)
>                   (  roll tn p1
>                  :+: p1
>                  :+: p1
>                  :+: Prim (Rest en)
>                  :+: roll tn p1
>                  :+: p1
>                  :+: p1
>                  :+: Prim (Rest qn)
>                  :+: roll tn p2
>                  :+: p1
>                  :+: p1  ))
----------------------------------------------------------------------------- Tests of the MIDI interface.
> loadMidiFile fn = do
>   r <- importFile fn 
>   case r of
>     Left err -> error err
>     Right m  -> return m
Music into a MIDI file.
> tab m = writeMidi m
Music to a Midi datatype and back to Music.
> tad m = fromMidi $ toMidi $ perform m
A MIDI file to a MidiFile datatype and back to a MIDI file.
> tcb file = do
>              x <- loadMidiFile file
>              exportFile "test.mid" x
MIDI file to MidiFile datatype.
> tc file = do
>             x <- loadMidiFile file
>             print x
MIDI file to Music, a UserPatchMap, and a Context.
> tcd file = do
>              x <- loadMidiFile file
>              print $ fromMidi x
A MIDI file to Music and back to a MIDI file.
> tcdab file = do
>              x <- loadMidiFile file
>              exportFile "test.mid" $ toMidi $ perform $ fromMidi x