hunk ./Antrag.hs 5 -import List ( (++), concatMap, concat, cycle, take ) -import Prelude ( Int, negate, (-), (+), (*), ($) ) ; +import List ( (++), concatMap, concat, cycle, take, replicate ) +import Prelude ( Int, negate, (-), (+), (*), ($), (.) ) ; hunk ./Antrag.hs 9 -main, once, infinite, music :: +main, infinite, verse :: hunk ./Antrag.hs 11 -main = infinite ; +main = verse ; hunk ./Antrag.hs 13 -infinite = - rest (8*hn) +:+ rhythmTrack - =:= - cycle music ; +infinite = verse ++ infinite ; hunk ./Antrag.hs 15 -once = - rest (8*hn) +:+ takeTime (5*16*hn) rhythmTrack - =:= - music ; - -music = - block melody0 [] [] ++ - block melody1 guitar1 bass1 ++ - block melody2 guitar1 bass2 ++ - block melody3 guitar3 bass3 ++ - block melody4 guitar4 bass4 ++ - block melody5 guitar5 bass5 ++ +verse = + block melody0 [] [] [] ++ + block melody1 guitar1 bass1 rhythm1 ++ + block melody2 guitar1 bass2 rhythm1 ++ + block melody3 guitar3 bass3 rhythm1 ++ + block melody4 guitar4 bass4 rhythm1 ++ + block melody5 guitar5 bass5 rhythm1 ++ hunk ./Antrag.hs 28 + [Event Message] -> hunk ./Antrag.hs 30 -block mel guit bss = +block mel guit bss rhy = hunk ./Antrag.hs 35 + rhythmTrack rhy : hunk ./Antrag.hs 291 - ((lowDrum hn ++ highDrum hn) - =:= - (rest qn ++ hihat (en+dev) ++ hihat (en-dev) ++ - rest qn ++ hihat (en+dev) ++ hihat (en-dev))) - ++ rhythm ; + (lowDrum hn ++ highDrum hn) + =:= + (rest qn ++ hihat (en+dev) ++ hihat (en-dev) ++ + rest qn ++ hihat (en+dev) ++ hihat (en-dev)) ; hunk ./Antrag.hs 299 - snareDrum qn ++ hihat qn ++ - rhythm ; + snareDrum qn ++ hihat qn ; + + +rhythm1 :: [Event Message] ; +rhythm1 = times 8 rhythm ; + +times :: Int -> [a] -> [a] ; +times n = concat . replicate n ; + hunk ./Antrag.hs 346 -rhythmTrack :: [Event (Channel Message)] ; +rhythmTrack, rhythmLoop :: [Event (Channel Message)] ; hunk ./Antrag.hs 352 +rhythmLoop = rhythmTrack ++ rhythmLoop ; + hunk ./Antrag.hs 387 -rhythmTrack :: [Event (Channel Message)] ; -rhythmTrack = +rhythmTrack :: [Event Message] -> [Event (Channel Message)] ; +rhythmTrack rhy = hunk ./Antrag.hs 390 - program 63 ++ - rhythm ; + program 63 ++ rhy ; hunk ./Antrag.hs 9 -main, infinite, verse :: +main, infinite, song, verse0, verse1, verse6 :: hunk ./Antrag.hs 11 -main = verse ; +main = song ; + +infinite = verse0 ++ infinite ; hunk ./Antrag.hs 15 -infinite = verse ++ infinite ; +song = + verse0 ++ + verse1 ++ + verse1 ++ + verse1 ++ + verse1 ++ + verse1 ++ + verse6 ++ + [] ; hunk ./Antrag.hs 25 -verse = +verse0 = hunk ./Antrag.hs 34 +verse1 = + block melody0 [] [] rhythm0 ++ + block melody1 guitar1 bass1 rhythm1 ++ + block melody2 guitar1 bass2 rhythm1 ++ + block melody3 guitar3 bass3 rhythm1 ++ + block melody4 guitar4 bass4 rhythm1 ++ + block melody5 guitar5 bass5 rhythm1 ++ + [] ; + +verse6 = + block melody0 [] [] rhythm0 ++ + block melody1 guitar1 bass1 rhythm1 ++ + block melody2 guitar1 bass2 rhythm1 ++ + block melody3 guitar3 bass3 rhythm1 ++ + (bassTrack bass6 =:= rhythmTrack rhythm6) ++ + block melody4 guitar4 bass4 rhythm1 ++ + block melody5 guitar5 bass5 rhythm1 ++ + block melody0a [] [] rhythm7 ++ + [] ; + hunk ./Antrag.hs 64 - bassTrack bss : + bassTrack (concatMap (note hn) bss) : hunk ./Antrag.hs 69 -melody0, melody1, melody2, melody3, melody4, melody5 :: [[Event Message]] ; -melody0 = +melody0, melody0a, melody1, melody2, melody3, melody4, melody5 + :: [[Event Message]] ; +melody0a = hunk ./Antrag.hs 88 + [] ; + +melody0 = + melody0a ++ hunk ./Antrag.hs 323 +bass6 :: [Event Message] ; +bass6 = times 4 (note dn (c 5)) ; + hunk ./Antrag.hs 340 -rhythm1 :: [Event Message] ; +rhythm0, rhythm1, rhythm6, rhythm7 :: [Event Message] ; +rhythm0 = times 4 rhythm ; hunk ./Antrag.hs 343 +rhythm6 = times 16 (lowDrum hn) ; +rhythm7 = times 3 rhythm ++ lowDrum hn ; hunk ./Antrag.hs 352 -dev, sn, en, den, qn, dqn, hn, ehn, ln :: Midi.Time ; +dev, sn, en, den, qn, dqn, hn, ehn, wn, dn, ln :: Midi.Time ; hunk ./Antrag.hs 359 +wn = 2*hn ; +dn = 2*wn ; hunk ./Antrag.hs 386 - transpose (negate 24) (concatMap (note hn) xs) ; + transpose (negate 24) xs ; hunk ./Antrag.hs 423 -bassTrack :: [Pitch] -> [Event (Channel Message)] ; +bassTrack :: [Event Message] -> [Event (Channel Message)] ; hunk ./Antrag.hs 427 - transpose (negate 36) (concatMap (note hn) xs) ; + transpose (negate 36) xs ; hunk ./Antrag.hs 26 - block melody0 [] [] [] ++ + (block melody0 [] [] [] =:= guitarTrack (concat prelude)) ++ hunk ./Antrag.hs 35 - block melody0 [] [] rhythm0 ++ + (block melody0 [] [] rhythm0 =:= guitarTrack (concat prelude)) ++ hunk ./Antrag.hs 44 - block melody0 [] [] rhythm0 ++ + (block melody0 [] [] rhythm0 =:= guitarTrack (concat prelude)) ++ hunk ./Antrag.hs 51 - block melody0a [] [] rhythm7 ++ + (block [] [] [] rhythm7 =:= guitarTrack (concat prelude)) ++ hunk ./Antrag.hs 62 - melodyTrack mel : - guitarTrack guit : + melodyTrack (concat mel) : + guitarTrack (concatMap (note en) guit) : hunk ./Antrag.hs 69 -melody0, melody0a, melody1, melody2, melody3, melody4, melody5 +prelude, melody0, melody1, melody2, melody3, melody4, melody5 hunk ./Antrag.hs 71 -melody0a = +prelude = hunk ./Antrag.hs 88 + rest hn : hunk ./Antrag.hs 92 - melody0a ++ + rest (4*wn-hn) : hunk ./Antrag.hs 369 -melodyTrack :: [[Event Message]] -> [Event (Channel Message)] ; +melodyTrack :: [Event Message] -> [Event (Channel Message)] ; hunk ./Antrag.hs 373 - transpose (negate 36) (concat xs) ; + transpose (negate 36) xs ; hunk ./Antrag.hs 376 -guitarTrack :: [Pitch] -> [Event (Channel Message)] ; +guitarTrack :: [Event Message] -> [Event (Channel Message)] ; hunk ./Antrag.hs 380 - transpose (negate 36) (concatMap (note en) xs) ; + transpose (negate 36) xs ; hunk ./Antrag.hs 383 -bassTrack :: [Pitch] -> [Event (Channel Message)] ; +bassTrack :: [Event Message] -> [Event (Channel Message)] ; hunk ./Antrag.hs 410 -melodyTrack :: [[Event Message]] -> [Event (Channel Message)] ; +melodyTrack :: [Event Message] -> [Event (Channel Message)] ; hunk ./Antrag.hs 414 - transpose (negate 36) (concat xs) ; + transpose (negate 36) xs ; hunk ./Antrag.hs 417 -guitarTrack :: [Pitch] -> [Event (Channel Message)] ; +guitarTrack :: [Event Message] -> [Event (Channel Message)] ; hunk ./Antrag.hs 421 - transpose (negate 36) (concatMap (note en) xs) ; + transpose (negate 36) xs ; hunk ./Antrag.hs 9 -main, infinite, song, verse0, verse1, verse6 :: +main, infinite, song, verse0, verse1, verse6, refrain, refrainSimple :: hunk ./Antrag.hs 30 - block melody4 guitar4 bass4 rhythm1 ++ - block melody5 guitar5 bass5 rhythm1 ++ + refrain ++ hunk ./Antrag.hs 38 - block melody4 guitar4 bass4 rhythm1 ++ - block melody5 guitar5 bass5 rhythm1 ++ + refrain ++ hunk ./Antrag.hs 47 + refrain ++ + (block [] [] [] rhythm7 =:= guitarTrack (concat prelude)) ++ + [] ; + +refrain = + block melody4 guitar4 bass4 rhythm1 ++ + (block melody5 guitar5a bass5a rhythm8 + =:= + (rest (3*wn) ++ + (guitarTrack (note wn (a 6) ++ guitar5b) + =:= + bassTrack (note wn (f 4) ++ concatMap (note hn) bass5c)))) ++ + [] ; + +refrainSimple = hunk ./Antrag.hs 64 - (block [] [] [] rhythm7 =:= guitarTrack (concat prelude)) ++ hunk ./Antrag.hs 273 -guitar1, guitar3, guitar4, guitar5 :: [Pitch] ; +guitar1, guitar3, guitar4, guitar5, guitar5a :: [Pitch] ; hunk ./Antrag.hs 300 -guitar5 = +guitar5a = hunk ./Antrag.hs 303 + [] ; + +guitar5 = + guitar5a ++ hunk ./Antrag.hs 312 +short :: Time ; +short = 30 ; + +gchord3 :: Time -> Pitch -> Pitch -> Pitch -> [Event Message] ; +gchord3 dur p0 p1 p2 = + note dur p0 + =:= + (rest short ++ note (dur - short) p1) + =:= + (rest (2*short) ++ note (dur - 2*short) p2) ; + +guitar5b :: [Event Message] ; +guitar5b = + gchord3 hn (a 6) (c 7) (f 7) ++ + gchord3 hn (c 7) (f 7) (a 7) ++ + gchord3 hn (g 6) (b 6) (e 7) ++ + gchord3 hn (b 6) (e 7) (g 7) ++ + gchord3 hn (g 6) (b 6) (d 7) ++ + gchord3 hn (b 6) (d 7) (g 7) ++ + gchord3 wn (e 6) (g 6) (c 7) ++ + [] ; + + hunk ./Antrag.hs 359 -bass5 = [ - c 5, g 5, c 5, g 5, d 5, a 4, f 4, c 5, + +bass5a, bass5b, bass5c :: [Pitch] ; +bass5a = [ + c 5, g 5, c 5, g 5, d 5, a 4 ] ; + +bass5b = [ + f 4, c 5 ] ; + +bass5c = [ hunk ./Antrag.hs 370 +bass5 = bass5a ++ bass5b ++ bass5c ; + hunk ./Antrag.hs 389 -rhythm0, rhythm1, rhythm6, rhythm7 :: [Event Message] ; +rhythm0, rhythm1, rhythm6, rhythm7, rhythm8 :: [Event Message] ; hunk ./Antrag.hs 394 +rhythm8 = times 3 rhythm ++ times 8 (lowDrum hn) ++ times 1 rhythm ; hunk ./Antrag.hs 482 - channel 9 $ - program 63 ++ rhy ; + channel 9 rhy ; + + + hunk ./Antrag.hs 463 + controller volumeCC 64 ++ hunk ./Antrag.hs 478 + controller volumeCC 120 ++ hunk ./Antrag.hs 4 +import Chords ; hunk ./Antrag.hs 6 -import List ( (++), concatMap, concat, cycle, take, replicate ) +import List ( (++), map, concatMap, concat, cycle, take, replicate ) hunk ./Antrag.hs 10 -main, infinite, song, verse0, verse1, verse6, refrain, refrainSimple :: +main, infinite, song, refrain, refrainSimple, + verse0, verse1, verse5, verse6 :: hunk ./Antrag.hs 23 - verse1 ++ + verse5 ++ hunk ./Antrag.hs 43 +verse5 = + verse1 + =:= + fluteTrack (rest (4*wn) ++ times 2 (concat flute1) ++ concat flute2) ; + hunk ./Antrag.hs 383 +flute1, flute2 :: [[Event Message]] ; +flute1 = + map (emphasize (negate 20)) $ + chord3 dn (g 3) (c 4) (e 4) : + chord3 dn (a 3) (c 4) (f 4) : + chord3 dn (b 3) (d 4) (g 4) : + chord3 hn (a 3) (c 4) (f 4) : + chord3 hn (b 3) (d 4) (g 4) : + chord3 wn (g 3) (c 4) (e 4) : + [] ; + +flute2 = + note wn (d 4) : note wn (cs 4) : note wn (c 4) : note wn (b 3) : + note wn (c 4) : note wn (e 4) : note wn (fs 4) : note wn (g 4) : + [] ; + + hunk ./Antrag.hs 506 +fluteTrack :: [Event Message] -> [Event (Channel Message)] ; +fluteTrack xs = + channel 3 $ + controller volumeCC 48 ++ + program 71 ++ transpose 12 xs ; + + hunk ./Antrag.hs 11 - verse0, verse1, verse5, verse6 :: + verse0, verse1, verse2, verse5, verse6 :: hunk ./Antrag.hs 20 + verse2 ++ hunk ./Antrag.hs 23 - verse1 ++ hunk ./Antrag.hs 43 +verse2 = + verse1 + =:= + fluteTrack (rest (26*wn-flute3prefetch) ++ concat flute3) ; + hunk ./Antrag.hs 388 -flute1, flute2 :: [[Event Message]] ; +flute1, flute2, flute3 :: [[Event Message]] ; hunk ./Antrag.hs 404 +flute3prefetch :: Time ; +flute3prefetch = 3*sn ; + +flute3 = + note sn (d 4) : note sn (e 4) : note sn (fs 4) : + note en (g 4) : rest en : note qn (fs 4) : + note en (f 4) : note en (fs 4) : note en (f 4) : note en (e 4) : + note en (ds 4) : rest en : note en (d 4) : rest en : + note qn (cs 4) : note qn (d 4) : + [] ; + +