module Haskore.Example.Raenzlein where
import Haskore.Melody.Standard as Melody
import Haskore.Music.GeneralMIDI as MidiMusic
import qualified Haskore.Music as Music
import qualified Haskore.Composition.Chord as Chord
import Haskore.Basic.Pitch (Class(..))
import qualified Data.Accessor.Basic as Accessor
vline :: [NoteAttributes -> Melody.T] -> Melody.T
vline = line . map ($ Melody.na)
mel0 :: Melody.T
mel0 = vline
[bf 0 en, d 1 en,
f 1 dqn, f 1 en, f 1 en, f 1 en, g 1 en, a 1 en]
verse, refrain, strings :: Melody.T
verse =
mel0 +:+
vline
[bf 1 hn, f 1 qn, g 1 en, f 1 en,
f 1 dqn, ef 1 en, ef 1 en, g 1 en, f 1 en, ef 1 en,
d 1 hn] +:+
qnr +:+
mel0 +:+
vline
[bf 1 qn, d 2 qn, d 2 qn, bf 1 en, d 2 en,
c 2 dqn, a 1 en, c 2 en, bf 1 en, a 1 en, g 1 en,
f 1 hn] +:+
qnr
refrain =
vline
[f 1 den, g 1 sn, f 1 hn, ef 1 qn,
g 1 den, a 1 sn, g 1 hn, f 1 qn,
f 1 en, f 1 en, g 1 qn, f 1 qn, ef 1 qn, d 1 qn, c 1 hn] +:+
qnr +:+
Music.replicate 2 (vline
[bf 0 en, d 1 en, f 1 dqn, g 1 en, f 1 qn,
bf 1 en, a 1 en, g 1 dqn, a 1 en, g 1 qn,
ef 2 en, ef 2 en, d 2 dqn, bf 1 en,
c 2 den, c 2 sn, c 2 en, a 1 en, bf 1 hn]
+:+ qnr)
melody :: Melody.T
melody = verse +:+ refrain
v :: NoteAttributes
v = Accessor.set Melody.velocity1 0.4 Melody.na
s1, s2 :: [Chord.Generic NoteAttributes]
s1 =
Chord.generic Bf Chord.majorInt hn v :
Chord.generic F Chord.majorInt hn v :
Chord.generic Bf Chord.majorInt wn v :
Chord.generic F Chord.dominantSeventhInt wn v :
Chord.generic Bf Chord.majorInt dwn v :
Chord.generic F Chord.majorInt hn v :
Chord.generic Bf Chord.majorInt wn v :
Chord.generic F Chord.majorInt hn v :
Chord.generic C Chord.dominantSeventhInt hn v :
Chord.generic F Chord.majorInt wn v :
Chord.generic F Chord.dominantSeventhInt wn v :
Chord.generic Bf Chord.majorInt wn v :
Chord.generic Ef Chord.majorInt qn v :
Chord.generic Bf Chord.majorInt qn v :
Chord.generic F Chord.dominantSeventhInt qn v :
Chord.generic Bf Chord.majorInt qn v :
Chord.generic F Chord.majorInt wn v :
[]
s2 =
Chord.generic Bf Chord.majorInt wn v :
Chord.generic Ef Chord.majorInt wn v :
Chord.generic Bf Chord.majorInt hn v :
Chord.generic F Chord.dominantSeventhInt hn v :
Chord.generic Bf Chord.majorInt wn v :
[]
strings = qnr +:+
line (map chord
(Chord.leastVaryingInversions
((1,C),(1,C))
(s1 ++ s2 ++ s2)))
song :: MidiMusic.T
song =
changeTempo (2)
(MidiMusic.fromStdMelody MidiMusic.AcousticGrandPiano (transpose 24 melody) =:=
MidiMusic.fromStdMelody MidiMusic.StringEnsemble1 (transpose 12 strings))