module Sound.Tidal.VolcaBeats where

import Sound.Tidal.Stream (makeI, makeF)

import Sound.Tidal.MIDI.Control
import Control.Applicative

beats :: ControllerShape
beats = ControllerShape { params = [
                            mCC "lKick" 40,
                            mCC "lSnare" 41,
                            mCC "lLoTom" 42,
                            mCC "lHiTom" 43,
                            mCC "lClHat" 44,
                            mCC "lOpHat" 45,
                            mCC "lClap" 46,
                            mCC "lClaves" 47,
                            mCC "lAgogo" 48,
                            mCC "lCrash" 49,
                            mCC "sClap" 50,
                            mCC "sClaves" 51,
                            mCC "sAgogo" 52,
                            mCC "sCrash" 53,
                            mCC "stutterTime" 54,
                            mCC "stutterDepth" 55,
                            mCC "tomDecay" 56,
                            mCC "clHatDecay" 57,
                            mCC "opHatDecay" 58,
                            mCC "hatGrain" 59
                          ],
                         duration = ("dur", 0.05),
                         velocity = ("vel", 0.5),
                         latency = 0.1
                       }

oscBeats = toOscShape beats

drum = (makeI oscBeats "note") . (noteN <$>)

lbd = makeF oscBeats "lKick"
lsn = makeF oscBeats "lSnare"
llt = makeF oscBeats "lLoTom"
lht = makeF oscBeats "lHiTom"
lch = makeF oscBeats "lClHat"
loh = makeF oscBeats "lOpHat"
lcp = makeF oscBeats "lClap"
lcl = makeF oscBeats "lClaves"
lag = makeF oscBeats "lAgogo"
lcr = makeF oscBeats "lCrash"
scp = makeF oscBeats "sClap"
scl = makeF oscBeats "sClaves"
sag = makeF oscBeats "sAgogo"
scr = makeF oscBeats "sCrash"
stt = makeF oscBeats "stutterTime"
std = makeF oscBeats "stutterDepth"
dt = makeF oscBeats "tomDecay"
dch = makeF oscBeats "clHatDecay"
doh = makeF oscBeats "opHatDecay"
dhg = makeF oscBeats "hatGrain"

noteN :: String -> Int
noteN "bd"  = 36
noteN "sn"  = 38
noteN "lt"  = 43
noteN "ht"  = 50
noteN "ch"  = 42
noteN "oh"  = 46
noteN "cp"  = 39
noteN "cl"  = 75
noteN "ag"  = 67
noteN "cr"  = 49
noteN _ = 0