\subsection{Children's Song No. 6} \seclabel{chick} This is a partial encoding of Chick Corea's ``Children's Song No. 6''. \begin{haskelllisting} > module Haskore.Example.ChildSong6 where > import Haskore.Melody.Standard as Melody > import Haskore.Music.GeneralMIDI as MidiMusic > import qualified Haskore.Music as Music \end{haskelllisting} note updaters for mappings \begin{haskelllisting} > fd :: t -> (t -> NoteAttributes -> m) -> m > fd dur n = n dur v > > vel :: (NoteAttributes -> m) -> m > vel n = n v > > v :: NoteAttributes > v = Melody.na > > lmap :: (a -> Melody.T) -> [a] -> Melody.T > lmap func l = line (map func l) > > > bassLine, mainVoice :: Melody.T > song :: MidiMusic.T \end{haskelllisting} Baseline: \begin{haskelllisting} > b1, b2, b3 :: Melody.T > b1 = lmap (fd dqn) [b 3, fs 4, g 4, fs 4] > b2 = lmap (fd dqn) [b 3, es 4, fs 4, es 4] > b3 = lmap (fd dqn) [as 3, fs 4, g 4, fs 4] > > bassLine = > Music.loudness1 (10/13) > (line [Music.replicate 3 b1, Music.replicate 2 b2, > Music.replicate 4 b3, Music.replicate 5 b1]) \end{haskelllisting} Main Voice: \begin{haskelllisting} > v1, v1a, v1b :: Melody.T > v1 = v1a +:+ v1b > v1a = lmap (fd en) [a 5, e 5, d 5, fs 5, cs 5, b 4, e 5, b 4] > v1b = lmap vel [cs 5 tn, d 5 (qn-tn), cs 5 en, b 4 en] > > v2, v2a, v2b, v2c, v2d, v2e, v2f :: Melody.T > v2 = line [v2a, v2b, v2c, v2d, v2e, v2f] > v2a = lmap vel [cs 5 (dhn+dhn), d 5 dhn, > f 5 hn, gs 5 qn, fs 5 (hn+en), g 5 en] > v2b = lmap (fd en) [fs 5, e 5, cs 5, as 4] +:+ a 4 dqn v +:+ > lmap (fd en) [as 4, cs 5, fs 5, e 5, fs 5, g 5, as 5] > v2c = lmap vel [cs 6 (hn+en), d 6 en, cs 6 en, e 5 en] +:+ enr +:+ > lmap vel [as 5 en, a 5 en, g 5 en, d 5 qn, c 5 en, cs 5 en] > v2d = lmap (fd en) [fs 5, cs 5, e 5, cs 5, a 4, as 4, d 5, e 5, fs 5] +:+ > lmap vel [fs 5 tn, e 5 (qn-tn), d 5 en, e 5 tn, d 5 (qn-tn), > cs 5 en, d 5 tn, cs 5 (qn-tn), b 4 (en+hn)] > v2e = lmap vel [cs 5 en, b 4 en, fs 5 en, a 5 en, b 5 (hn+qn), a 5 en, > fs 5 en, e 5 qn, d 5 en, fs 5 en, e 5 hn, d 5 hn, fs 5 qn] > v2f = changeTempo (3/2) (lmap vel [cs 5 en, d 5 en, cs 5 en]) +:+ b 4 (3*dhn+hn) v > > mainVoice = Music.replicate 3 v1 +:+ v2 \end{haskelllisting} Putting it all together: \begin{haskelllisting} > song = MidiMusic.fromStdMelody MidiMusic.AcousticGrandPiano > (transpose (-48) (changeTempo 3 > (bassLine =:= mainVoice))) \end{haskelllisting}