module UD where import Drum import Chords import Pitch import Midi import List import Prelude ( (*) ) main, song, mel, drums :: [Event (Channel Message)] ; main = cycle song =:= cycle drums ; en, qn, hn, wn :: Time ; en = 100 ; qn = 2*en ; hn = 2*qn ; wn = 2*hn ; song = concat [ merge part1 mel, part2, part3 ] ; mel = channel 3 ( concat [ note hn (c 4) , note hn (f 4), note hn (e 4), note hn (c 4) ] ) ; part1, part2, part3 :: [Event (Channel Message)] ; part1 = twice ( channel 0 ( concat [ quad ( major qn (c 4) ) , quad ( major qn (c 4) ) , quad ( major qn (c 4) ) , concat [ major qn (c 4) , major qn (g 4) , major qn (g 4) , major qn (g 4) ] ] ) ) ; part2 = twice ( channel 0 ( concat [ twice ( quad ( minor qn (d 4) ) ) , quad ( major qn (f 4) ) , twice ( minor qn (e 4) ) , twice ( minor qn (d 4) ) , quad ( quad ( major qn (c 4) ) ) ] ) ) ; part3 = [] ; twice, quad :: [a] -> [a] ; quad x = concat [ x, x, x, x ] ; twice x = concat [ x, x]; bass, snare :: Time -> [Event Message] ; bass dur = emphasize 36 (drum bassDrum1 dur) ; snare dur = emphasize 16 (drum electricSnare dur) ; drums = drumChannel ( concat [ concat ( concat ( replicate 3 [ bass hn, snare hn ] ) ) , concat [ bass qn, snare hn, snare qn ] ] ) ;