module SilverLake.Chord where

import SilverLake.Utility
import Instrument
import Pitch
import List
import Midi
import Prelude ( Int, (*), (-), (.), ($) )

chordTrack :: Time -> [[Pitch]] -> [Event (Channel Message)] ;
chordTrack dur harmonies =
    channel 3 $ emphasize (0-10) $
        program xylophone ++
        concat (
            map ( foldl merge ( rest dur ) . map ( note dur ) ) $
            zipWith multiIndex
                ( concat $ map ( replicate 8 ) $
                  cycle harmonies )
                chordLoop
        ) ;

chordLoop, chordLoopMute :: [[Int]] ;
chordLoopMute =
    replicate 8 []
    ++
    chordLoopMute ;

--------------------------------
chordLoop =
    [[0,1], [0,1], [0,1], [2,3], [], [2,3], [0,1], []]
    ++
    chordLoop ;
