module Sound.Tidal.MIDI.Blofeld where

import Sound.Tidal.MIDI.Control
import Sound.Tidal.Params hiding (octave_p, semitone_p)

bloController :: ControllerShape
bloController =
  ControllerShape
  { controls =
      [ mCC portamento_p 5
      , mCC expression_p 11
      , CC lfoshape_p 15 (0, 5) passThru -- 0..5 - sine,triangle,square,saw,random,sample&hold
      , mCC lforate_p 16
      , CC lfosync_p 17 (0, 1) passThru -- 0 off, 1 on
      , mCC lfodelay_p 18
      , CC octave_p 27 (16, 112) passThru -- 16, 28, 40 .. 112 - 128' .. 1/2'
      , CC semitone_p 28 (52, 76) passThru -- 52 .. 76 - -12 - +12 semitones
      , mCC detune_p 29
      , mCC osc1fm_p 30
      , CC osc1shape_p 31 (0, 5) passThru -- 0..5 - pulse, saw, tri, sine, alt 1, alt 2
      , mCC osc1pw_p 33
      , mCC osc1pwm_p 34
      , mCC osc1vol_p 52
      , mCC osc1pan_p 53
      , mCC ringmod_p 54
      , mCC ringpan_p 55
      , mCC noise_p 60
      , mCC noisepan_p 61
      , mCC noisecol_p 62
      , mCC cutoff_p 69
      , mCC attack_p 101
      , mCC decay_p 102
      , mCC sustain_p 103
      , mCC release_p 106
      ]
  , latency = 0.1
  }

blofeld = toShape bloController

(_, octave_p) = pF "octave" (Just 0)

(_, semitone_p) = pF "semitone" (Just 0.5)

(lforate, lforate_p) = pF "lforate" (Just 0)

(osc1fm, osc1fm_p) = pF "osc1fm" (Just 0)

(osc1shape, osc1shape_p) = pF "osc1shape" (Just 0)

(osc1pw, osc1pw_p) = pF "osc1pw" (Just 0)

(osc1pwm, osc1pwm_p) = pF "osc1pwm" (Just 0)

(osc1vol, osc1vol_p) = pF "osc1vol" (Just 0)

(osc1pan, osc1pan_p) = pF "osc1pan" (Just 0)

(ringmod, ringmod_p) = pF "ringmod" (Just 0)

(ringpan, ringpan_p) = pF "ringpan" (Just 0)

(noise, noise_p) = pF "noise" (Just 0)

(noisepan, noisepan_p) = pF "noisepan" (Just 0)

(noisecol, noisecol_p) = pF "noisecol" (Just 0)