\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 -> [NoteAttribute] -> m) -> m
> fd dur n = n dur v
>
> vel :: ([NoteAttribute] -> m) -> m
> vel  n   = n   v
>
> v :: [NoteAttribute]
> v        = []
>
> 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.loudness (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}
