module Haskore.Example.HeilandHimmel where
import Haskore.Melody.Standard as Melody
import Haskore.Music.GeneralMIDI as MidiMusic
noAttr :: [Melody.NoteAttributes -> Melody.T] -> Melody.T
noAttr = line . map ($ na)
melody0, melody1, melody2, melody3,
bass0, bass1, bass2, bass3 :: Melody.T
melody0 =
d 0 qn na +:+
(d 0 hn na =:= f 0 hn na) +:+
(e 0 qn na =:= g 0 qn na) +:+
((f 0 qn na +:+ e 0 qn na) =:= a 0 hn na) +:+
d 0 qn na +:+
(d 0 hn na +:+ cs 0 qn na =:= f 0 qn na +:+ e 0 hn na) +:+
d 0 dhn na
bass0 = noAttr $
[d 1 qn, d 1 qn, c 1 qn, bf 0 qn,
a 0 hn, bf 0 qn, bf 0 qn, g 0 qn, a 0 qn,
d 0 qn, a 0 qn, d 1 qn]
melody1 =
(f 0 qn na =:= a 0 qn na) +:+
(e 0 qn na =:= a 0 qn na) +:+
(d 0 qn na =:= b 0 qn na) +:+
((c 0 qn na +:+ d 0 qn na) =:= c 1 hn na) +:+
f 0 qn na +:+
(f 0 hn na +:+ e 0 qn na =:= a 0 qn na +:+ g 0 hn na) +:+
f 0 dhn na
bass1 = noAttr $
[d 1 qn, c 1 qn, b 0 qn,
a 0 hn, d 1 qn, d 1 qn, bf 0 qn, c 1 qn,
f 0 qn, c 1 qn, f 1 qn]
melody2 =
(g 0 hn na =:= c 1 qn na +:+ c 1 qn na) +:+
(f 0 qn na =:= c 1 qn na) +:+
(e 0 qn na +:+ g 0 qn na =:= c 1 hn na) +:+
a 0 qn na +:+
(a 0 qn na +:+ g 0 qn na =:= d 1 hn na) +:+
(f 0 qn na =:= d 1 qn na) +:+
(f 0 qn na +:+ d 0 qn na +:+ e 0 qn na =:= c 1 qn na)
bass2 = noAttr $
[f 1 qn, e 1 qn, d 1 qn, c 1 qn, e 1 qn, f 1 qn,
bf 0 dhn, c 1 qn, g 0 qn, c 0 qn]
melody3 =
(f 0 qn na =:= a 0 qn na) +:+
(e 0 qn na =:= a 0 qn na) +:+
(d 0 qn na =:= g 0 qn na) +:+
(d 0 qn na +:+ cs 0 qn na =:= a 0 hn na) +:+
(d 0 qn na =:= f 0 qn na) +:+
(d 0 hn na +:+ cs 0 qn na =:= g 0 qn na +:+ e 0 hn na) +:+
d 0 qn na
bass3 = noAttr $
[d 0 hn, e 0 qn, a 0 hn, bf 0 qn,
bf 0 qn, g 0 qn, a 0 qn, d 0 hn]
melody :: Melody.T
melody = melody0 +:+ melody1 +:+ melody2 +:+ melody3
bass :: Melody.T
bass = bass0 +:+ bass1 +:+ bass2 +:+ bass3
song :: MidiMusic.T
song =
changeTempo 1.5 $
MidiMusic.fromStdMelody MidiMusic.PercussiveOrgan (transpose ( 12) melody)
=:=
MidiMusic.fromStdMelody MidiMusic.StringEnsemble1 (transpose (12) bass)