module Weihnachten where import System (system) import Haskore -- Alle Jahre wieder ajw :: Music ajw = let o = 4 in (g o dqn [] :+: a o en [] :+: g o qn [] :+: f o qn []) :+: (e o hn [] :+: d o hn []) :+: (c o qn [] :+: d o en [] :+: e o en [] :+: f o qn [] :+: e o qn []) :+: d o dhn [] :+: qnr :+: e o qn [] :+: g o qn [] :+: a o qn [] :+: g o qn [] :+: c (o+1) hn [] :+: b o qn [] :+: a o qn [] :+: g o qn [] :+: f o en [] :+: e o en [] :+: f o qn [] :+: g o qn [] :+: e o dhn [] :+: qnr ajw2 :: Music ajw2 = let o = 4 in (e o dqn [] :+: f o en [] :+: e o qn [] :+: d o qn []) :+: (c o hn [] :+: b (o-1) hn []) :+: (c o qn [] :+: b (o-1) en [] :+: c o en [] :+: d o qn [] :+: c o qn []) :+: b (o-1) dhn [] :+: qnr :+: e o hn [] :+: f o qn [] :+: e o qn [] :+: a o hn [] :+: g o qn [] :+: f o qn [] :+: e o qn [] :+: d o en [] :+: c o en [] :+: d o qn [] :+: b (o-1) qn [] :+: c o dhn [] :+: qnr test1 = Tempo 2 $ Instr "flute" ajw test1b = Tempo 2 $ Instr "Violin" ajw :=: Instr "Flute" ajw2 -- test2 = Tempo 2 $ Trans 5 (Instr "Glockenspiel" $ ajw :=: Instr "Helicopter" ajw2) fMaj = [ n 4 qn [] | n <- [f,a] ] ++ [c 5 qn []] gMaj = [ n 4 qn [] | n <- [g,b] ] ++ [d 5 qn []] dMaj = [ n 4 qn [] | n <- [d,fs,a] ] bMaj = [ n 4 qn [] | n <- [f,bf] ] ++ [d 5 qn []] ajw3 :: [Music] ajw3 = let o = 4 in [n (o-1) f [], chord fMaj, n (o-1) c [], chord cMaj, n (o-1) f [], chord fMaj, n (o-1) c [], chord cMaj, chord fMaj, qnr, n (o-1) e [], n (o-1) f [], n (o-1) c [], chord cMaj, chord cMaj, chord cMaj, n (o-1) f [], chord fMaj, qnr, chord fMaj, n (o-1) bs [], chord bMaj, chord bMaj, chord bMaj, n (o-1) f [], chord fMaj, n (o-1) c [], chord cMaj, n (o-1) f [], n (o+1) c [], chord fMaj, qnr] where n o p = p o qn test3 = Tempo 2 ((Trans 5 (Instr "Flute" $ ajw :=: Instr "String Ensemble 1" ajw2)) :=: Instr "Hammond Organ" (line ajw3)) -- mehrere Strophen repeatNM :: Int -> Music -> Music repeatNM 0 m = Rest 0 repeatNM n m = m :+: repeatNM (n-1) m test4 = repeatNM 3 test3 -- rückwärts -- revM :: Music -> Music test5 = revM test3 -- Begleitung begleit = let p1 = perc LowTom qn [] p2 = perc AcousticSnare en [] in Tempo 2 (Instr "percussion" (cut 8 (repeatM ((p1 :+: qnr :+: p2 :+: qnr :+: p2 :+: p1 :+: p1 :+: qnr :+: p2 :+: enr) :=: roll en (perc ClosedHiHat 2 []) ) ))) test6 = test3 :=: begleit myplay music = test music >> system "wmplayer test.mid" -- Weitere Beispiele -- Wende n mal f iterativ auf Musik und g auf akkumulierte Sequenzen an rep :: (Music -> Music) -> (Music -> Music) -> Int -> Music -> Music rep f g 0 m = Rest 0 rep f g n m = m :=: g (rep f g (n-1) (f m)) run = rep (Trans 5) (delay tn) 8 (c 4 tn []) cascade = rep (Trans 4) (delay en) 8 run cascades = rep id (delay sn) 2 cascade waterfall = cascades :+: revM cascades -- stars and stripes ssfMelody = line (m1 ++ m2 ++ m3 ++ m4) m1 = [ trilln 2 5 (bf 6 en []), Phrase [Art staccato] (line [ef 7 en [], ef 6 en [], ef 7 en []])] m2 = [Phrase [Art legato] (line [bf 6 sn [], c 7 sn [], bf 6 sn [], g 6 sn []]), Phrase [Art staccato] (line [ef 6 en [], bf 5 en []])] m3 = [Phrase [Art legato] (line [ef 6 sn [], f 6 sn [], g 6 sn [], af 6 sn []]), Phrase [Art staccato] (line [bf 6 en [], ef 7 en []])] m4 = [ trill 2 tn (bf 6 qn []), bf 6 sn [], denr] ssf = Instr "flute" (Tempo 2 (ssfMelody))