module Sound.Tidal.Blofeld where

import Sound.Tidal.Stream (makeI, makeF)

import Sound.Tidal.MIDI.Control

keys :: ControllerShape
keys = ControllerShape {params = [
                          mCC "portamento" 5,
                          mCC "expression" 11,
                          CC "lfoshape" 15 (0, 5) 0 passThru, -- 0..5 - sine,triangle,square,saw,random,sample&hold
                          mCC "lforate" 16,
                          CC "lfosync" 17 (0, 1) 0 passThru, -- 0 off, 1 on
                          mCC "lfodelay" 18,
                          CC "octave" 27 (16, 112) 0 passThru, -- 16, 28, 40 .. 112 - 128' .. 1/2'
                          CC "semitone" 28 (52, 76) 0.5 passThru, -- 52 .. 76 - -12 - +12 semitones
                          mCC "detune" 29,
                          mCC "osc1fm" 30,
                          SysEx "osc1fmsrc" 6 (0, 11) 0 passThru,
                          CC "osc1shape" 31 (0, 5) 0 passThru, -- 0..5 - pulse, saw, tri, sine, alt 1, alt 2
                          mCC "osc1pw" 33,
                          mCC "osc1pwm" 34,
                          SysEx "osc1pwmsrc" 10 (0, 30) 0 passThru,
                          mCC "osc1vol" 52,
                          mCC "osc1pan" 53,
                          mCC "ringmod" 54,
                          mCC "ringpan" 55,
                          mCC "noise" 60,
                          mCC "noisepan" 61,
                          mCC "noisecol" 62,
                          mCC "kcutoff" 69,
                          mCC "attack" 101,
                          mCC "decay" 102,
                          mCC "sustain" 103,
                          mCC "release" 106
                        ],
                        duration = ("dur", 0.05),
                        velocity = ("vel", 0.5),
                        latency = 0.1}

oscKeys = toOscShape keys

note         = makeI oscKeys "note"
dur          = makeF oscKeys "dur"

portamento   = makeF oscKeys "portamento"
expression   = makeF oscKeys "expression"
octave       = makeF oscKeys "octave"
semitone       = makeF oscKeys "semitone"
detune       = makeF oscKeys "detune"

kcutoff      = makeF oscKeys "kcutoff"

lforate      = makeF oscKeys "lforate"
lfoshape     = makeF oscKeys "lfoshape"
lfodelay     = makeF oscKeys "lfodelay"
lfosync     = makeF oscKeys "lfosyn"

attack       = makeF oscKeys "attack"
decay        = makeF oscKeys "decay"
sustain      = makeF oscKeys "sustain"
release      = makeF oscKeys "release"

osc1fm = makeF oscKeys "osc1fm"
osc1fmsrc = makeF oscKeys "osc1fmsrc"
osc1shape = makeF oscKeys "osc1shape"
osc1pw = makeF oscKeys "osc1pw"
osc1pwm = makeF oscKeys "osc1pwm"
osc1pwmsrc = makeF oscKeys "osc1pwmsrc"
osc1vol = makeF oscKeys "osc1vol"
osc1pan = makeF oscKeys "osc1pan"

ringmod = makeF oscKeys "ringmod"
ringpan = makeF oscKeys "ringpan"

noise = makeF oscKeys "noise"
noisepan = makeF oscKeys "noisepan"
noisecol = makeF oscKeys "noisecol"