packages feed

live-sequencer-0.0.1: data/example/BandControlled.hs

module BandControlled where

import Controls
import Drum
import Chords
import Pitch
import Midi
import List
import Bool
import Prelude ( (*), Bool(False, True) )

main, chords, drums :: [Event (Channel Message)] ;
main = merge ( cycle chords ) ( cycle drums ) ;

en, qn, hn :: Time ;
en = slider "tempo" 50 150 100 ;
qn = 2 * en ;
hn = 2 * qn ;

chords =
    channel 0 ( concat
                [ quad ( major qn (c 4) )
                , quad ( minor qn (a 4) )
                , quad ( major qn (f 4) )
                , quad ( major7 qn (g 4) )
                ] ) ;

quad :: [a] -> [a] ;
quad x = concat [x,x,x,x] ;

drums =
    drumChannel ( concat
        [ emphasize 16 ( drum bassDrum1 hn )
        , concat [ optDrum ( checkBox "B5" True  ) acousticSnare en
                 , optDrum ( checkBox "B6" False ) acousticSnare en
                 , optDrum ( checkBox "B7" False ) acousticSnare en
                 , optDrum ( checkBox "B8" True  ) acousticSnare en
                 ]
        ] ) ;

optDrum :: Bool -> Drum -> Time -> [Event Message] ;
optDrum sel drm dur =
    ifThenElse sel ( drum drm dur ) ( rest dur ) ;