module Sound.Tidal.Params where

import qualified Data.Map.Strict as Map

import Sound.Tidal.Pattern
import Sound.Tidal.Utils
import Data.Maybe (fromMaybe)
import Data.Word (Word8)

-- | group multiple params into one
grp :: [String -> ControlMap] -> Pattern String -> ControlPattern
grp :: [String -> ControlMap] -> Pattern String -> ControlPattern
grp [] _ = ControlPattern
forall a. Pattern a
empty
grp fs :: [String -> ControlMap]
fs p :: Pattern String
p = String -> ControlMap
splitby (String -> ControlMap) -> Pattern String -> ControlPattern
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Pattern String
p
  where splitby :: String -> ControlMap
splitby name :: String
name = [ControlMap] -> ControlMap
forall (f :: * -> *) k a.
(Foldable f, Ord k) =>
f (Map k a) -> Map k a
Map.unions ([ControlMap] -> ControlMap) -> [ControlMap] -> ControlMap
forall a b. (a -> b) -> a -> b
$ ((String, String -> ControlMap) -> ControlMap)
-> [(String, String -> ControlMap)] -> [ControlMap]
forall a b. (a -> b) -> [a] -> [b]
map (\(v :: String
v, f :: String -> ControlMap
f) -> String -> ControlMap
f String
v) ([(String, String -> ControlMap)] -> [ControlMap])
-> [(String, String -> ControlMap)] -> [ControlMap]
forall a b. (a -> b) -> a -> b
$ [String]
-> [String -> ControlMap] -> [(String, String -> ControlMap)]
forall a b. [a] -> [b] -> [(a, b)]
zip (String -> [String]
split String
name) [String -> ControlMap]
fs
        split :: String -> [String]
        split :: String -> [String]
split = (Char -> Bool) -> String -> [String]
forall a. (a -> Bool) -> [a] -> [[a]]
wordsBy (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==':')

mF :: String -> String -> ControlMap
mF :: String -> String -> ControlMap
mF name :: String
name v :: String
v = ControlMap -> Maybe ControlMap -> ControlMap
forall a. a -> Maybe a -> a
fromMaybe ControlMap
forall k a. Map k a
Map.empty (Maybe ControlMap -> ControlMap) -> Maybe ControlMap -> ControlMap
forall a b. (a -> b) -> a -> b
$ do Double
f <- String -> Maybe Double
forall a. Read a => String -> Maybe a
readMaybe String
v
                                     ControlMap -> Maybe ControlMap
forall (m :: * -> *) a. Monad m => a -> m a
return (ControlMap -> Maybe ControlMap) -> ControlMap -> Maybe ControlMap
forall a b. (a -> b) -> a -> b
$ String -> Value -> ControlMap
forall k a. k -> a -> Map k a
Map.singleton String
name (Double -> Value
VF Double
f)

mI :: String -> String -> ControlMap
mI :: String -> String -> ControlMap
mI name :: String
name v :: String
v = ControlMap -> Maybe ControlMap -> ControlMap
forall a. a -> Maybe a -> a
fromMaybe ControlMap
forall k a. Map k a
Map.empty (Maybe ControlMap -> ControlMap) -> Maybe ControlMap -> ControlMap
forall a b. (a -> b) -> a -> b
$ do Int
i <- String -> Maybe Int
forall a. Read a => String -> Maybe a
readMaybe String
v
                                     ControlMap -> Maybe ControlMap
forall (m :: * -> *) a. Monad m => a -> m a
return (ControlMap -> Maybe ControlMap) -> ControlMap -> Maybe ControlMap
forall a b. (a -> b) -> a -> b
$ String -> Value -> ControlMap
forall k a. k -> a -> Map k a
Map.singleton String
name (Int -> Value
VI Int
i)

mS :: String -> String -> ControlMap
mS :: String -> String -> ControlMap
mS name :: String
name v :: String
v = String -> Value -> ControlMap
forall k a. k -> a -> Map k a
Map.singleton String
name (String -> Value
VS String
v)

-- | Grouped params

sound :: Pattern String -> ControlPattern
sound :: Pattern String -> ControlPattern
sound = [String -> ControlMap] -> Pattern String -> ControlPattern
grp [String -> String -> ControlMap
mS "s", String -> String -> ControlMap
mF "n"]

s :: Pattern String -> ControlPattern
s :: Pattern String -> ControlPattern
s = Pattern String -> ControlPattern
sound

cc :: Pattern String -> ControlPattern
cc :: Pattern String -> ControlPattern
cc = [String -> ControlMap] -> Pattern String -> ControlPattern
grp [String -> String -> ControlMap
mF "ccn", String -> String -> ControlMap
mF "ccv"]

nrpn :: Pattern String -> ControlPattern
nrpn :: Pattern String -> ControlPattern
nrpn = [String -> ControlMap] -> Pattern String -> ControlPattern
grp [String -> String -> ControlMap
mI "nrpn", String -> String -> ControlMap
mI "val"]

-- | Singular params

pF :: String -> Pattern Double -> ControlPattern
pF :: String -> Pattern Double -> ControlPattern
pF name :: String
name = (Double -> ControlMap) -> Pattern Double -> ControlPattern
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String -> Value -> ControlMap
forall k a. k -> a -> Map k a
Map.singleton String
name (Value -> ControlMap) -> (Double -> Value) -> Double -> ControlMap
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Double -> Value
VF)

pI :: String -> Pattern Int -> ControlPattern
pI :: String -> Pattern Int -> ControlPattern
pI name :: String
name = (Int -> ControlMap) -> Pattern Int -> ControlPattern
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String -> Value -> ControlMap
forall k a. k -> a -> Map k a
Map.singleton String
name (Value -> ControlMap) -> (Int -> Value) -> Int -> ControlMap
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Value
VI)

pS :: String -> Pattern String -> ControlPattern
pS :: String -> Pattern String -> ControlPattern
pS name :: String
name = (String -> ControlMap) -> Pattern String -> ControlPattern
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String -> Value -> ControlMap
forall k a. k -> a -> Map k a
Map.singleton String
name (Value -> ControlMap) -> (String -> Value) -> String -> ControlMap
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Value
VS)

pX :: String -> Pattern [Word8] -> ControlPattern
pX :: String -> Pattern [Word8] -> ControlPattern
pX name :: String
name = ([Word8] -> ControlMap) -> Pattern [Word8] -> ControlPattern
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String -> Value -> ControlMap
forall k a. k -> a -> Map k a
Map.singleton String
name (Value -> ControlMap)
-> ([Word8] -> Value) -> [Word8] -> ControlMap
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Word8] -> Value
VX)

-- | patterns for internal sound routing
toArg :: Pattern String -> ControlPattern
toArg :: Pattern String -> ControlPattern
toArg = String -> Pattern String -> ControlPattern
pS "toArg"

from :: Pattern Double -> ControlPattern
from :: Pattern Double -> ControlPattern
from = String -> Pattern Double -> ControlPattern
pF "from"

to :: Pattern Double -> ControlPattern
to :: Pattern Double -> ControlPattern
to = String -> Pattern Double -> ControlPattern
pF "to"

-- | a pattern of numbers that speed up (or slow down) samples while they play.
accelerate :: Pattern Double -> ControlPattern
accelerate :: Pattern Double -> ControlPattern
accelerate       = String -> Pattern Double -> ControlPattern
pF "accelerate"


-- | Amplitude; like @gain@, but linear.
amp :: Pattern Double -> ControlPattern
amp :: Pattern Double -> ControlPattern
amp = String -> Pattern Double -> ControlPattern
pF "amp"

-- | a pattern of numbers to specify the attack time (in seconds) of an envelope applied to each sample. Only takes effect if `release` is also specified.
attack :: Pattern Double -> ControlPattern
attack :: Pattern Double -> ControlPattern
attack = String -> Pattern Double -> ControlPattern
pF "attack"

-- | a pattern of numbers from 0 to 1. Sets the center frequency of the band-pass filter.
bandf :: Pattern Double -> ControlPattern
bandf :: Pattern Double -> ControlPattern
bandf = String -> Pattern Double -> ControlPattern
pF "bandf"

-- | a pattern of numbers from 0 to 1. Sets the q-factor of the band-pass filter.y
bandq :: Pattern Double -> ControlPattern
bandq :: Pattern Double -> ControlPattern
bandq = String -> Pattern Double -> ControlPattern
pF "bandq"

{- | a pattern of numbers from 0 to 1. Skips the beginning of each sample, e.g. `0.25` to cut off the first quarter from each sample.

Using `begin "-1"` combined with `cut "-1"` means that when the sample cuts itself it will begin playback from where the previous one left off, so it will sound like one seamless sample. This allows you to apply a synth param across a long sample in a way similar to `chop`:

@
cps 0.5

d1 $ sound "breaks125*8" # unit "c" # begin "-1" # cut "-1" # coarse "1 2 4 8 16 32 64 128"
@

This will play the `breaks125` sample and apply the changing `coarse` parameter over the sample. Compare to:

@
d1 $ (chop 8 $ sounds "breaks125") # unit "c" # coarse "1 2 4 8 16 32 64 128"
@

which performs a similar effect, but due to differences in implementation sounds different.
-}
begin, legato, clhatdecay, crush :: Pattern Double -> ControlPattern
channel, coarse :: Pattern Int -> ControlPattern
begin :: Pattern Double -> ControlPattern
begin = String -> Pattern Double -> ControlPattern
pF "begin"
-- | choose the physical channel the pattern is sent to, this is super dirt specific
channel :: Pattern Int -> ControlPattern
channel = String -> Pattern Int -> ControlPattern
pI "channel"

--legato controls the amount of overlap between two adjacent synth sounds
legato :: Pattern Double -> ControlPattern
legato = String -> Pattern Double -> ControlPattern
pF "legato"

clhatdecay :: Pattern Double -> ControlPattern
clhatdecay = String -> Pattern Double -> ControlPattern
pF "clhatdecay"
-- | fake-resampling, a pattern of numbers for lowering the sample rate, i.e. 1 for original 2 for half, 3 for a third and so on.
coarse :: Pattern Int -> ControlPattern
coarse = String -> Pattern Int -> ControlPattern
pI "coarse"
-- | bit crushing, a pattern of numbers from 1 (for drastic reduction in bit-depth) to 16 (for barely no reduction).
crush :: Pattern Double -> ControlPattern
crush = String -> Pattern Double -> ControlPattern
pF "crush"
{- |
In the style of classic drum-machines, `cut` will stop a playing sample as soon as another samples with in same cutgroup is to be played.

An example would be an open hi-hat followed by a closed one, essentially muting the open.

@
d1 $ stack [
  sound "bd",
  sound "~ [~ [ho:2 hc/2]]" # cut "1"
  ]
@

This will mute the open hi-hat every second cycle when the closed one is played.

Using `cut` with negative values will only cut the same sample. This is useful to cut very long samples

@
d1 $ sound "[bev, [ho:3](3,8)]" # cut "-1"
@

Using `cut "0"` is effectively _no_ cutgroup.
-}
cut :: Pattern Int -> ControlPattern
cut :: Pattern Int -> ControlPattern
cut = String -> Pattern Int -> ControlPattern
pI "cut"

-- | a pattern of numbers from 0 to 1. Applies the cutoff frequency of the low-pass filter.
cutoff :: Pattern Double -> ControlPattern
cutoff :: Pattern Double -> ControlPattern
cutoff = String -> Pattern Double -> ControlPattern
pF "cutoff"

cutoffegint :: Pattern Double -> ControlPattern
cutoffegint :: Pattern Double -> ControlPattern
cutoffegint = String -> Pattern Double -> ControlPattern
pF "cutoffegint"

decay :: Pattern Double -> ControlPattern
decay :: Pattern Double -> ControlPattern
decay = String -> Pattern Double -> ControlPattern
pF "decay"
-- | a pattern of numbers from 0 to 1. Sets the level of the delay signal.
delay :: Pattern Double -> ControlPattern
delay :: Pattern Double -> ControlPattern
delay = String -> Pattern Double -> ControlPattern
pF "delay"
-- | a pattern of numbers from 0 to 1. Sets the amount of delay feedback.
delayfeedback :: Pattern Double -> ControlPattern
delayfeedback :: Pattern Double -> ControlPattern
delayfeedback = String -> Pattern Double -> ControlPattern
pF "delayfeedback"
-- | a pattern of numbers from 0 to 1. Sets the length of the delay.
delaytime :: Pattern Double -> ControlPattern
delaytime :: Pattern Double -> ControlPattern
delaytime = String -> Pattern Double -> ControlPattern
pF "delaytime"
detune :: Pattern Double -> ControlPattern
detune :: Pattern Double -> ControlPattern
detune = String -> Pattern Double -> ControlPattern
pF "detune"

-- DJ filter
djf :: Pattern Double -> ControlPattern
djf :: Pattern Double -> ControlPattern
djf = String -> Pattern Double -> ControlPattern
pF "djf"

-- | when set to `1` will disable all reverb for this pattern. See `room` and `size` for more information about reverb.
dry :: Pattern Double -> ControlPattern
dry :: Pattern Double -> ControlPattern
dry = String -> Pattern Double -> ControlPattern
pF "dry"
{- the same as `begin`, but cuts the end off samples, shortening them;
 e.g. `0.75` to cut off the last quarter of each sample.
-}
end :: Pattern Double -> ControlPattern
end :: Pattern Double -> ControlPattern
end = String -> Pattern Double -> ControlPattern
pF "end"

freq :: Pattern Double -> ControlPattern
freq :: Pattern Double -> ControlPattern
freq = String -> Pattern Double -> ControlPattern
pF "freq"

-- | a pattern of numbers that specify volume. Values less than 1 make
-- the sound quieter. Values greater than 1 make the sound louder. For
-- the linear equivalent, see @amp@.
gain :: Pattern Double -> ControlPattern
gain :: Pattern Double -> ControlPattern
gain = String -> Pattern Double -> ControlPattern
pF "gain"

gate :: Pattern Double -> ControlPattern
gate :: Pattern Double -> ControlPattern
gate = String -> Pattern Double -> ControlPattern
pF "gate"
hatgrain :: Pattern Double -> ControlPattern
hatgrain :: Pattern Double -> ControlPattern
hatgrain = String -> Pattern Double -> ControlPattern
pF "hatgrain"
-- | a pattern of numbers from 0 to 1. Applies the cutoff frequency of the high-pass filter.
hcutoff :: Pattern Double -> ControlPattern
hcutoff :: Pattern Double -> ControlPattern
hcutoff = String -> Pattern Double -> ControlPattern
pF "hcutoff"
-- | a pattern of numbers to specify the hold time (in seconds) of an envelope applied to each sample. Only takes effect if `attack` and `release` are also specified.
hold :: Pattern Double -> ControlPattern
hold :: Pattern Double -> ControlPattern
hold = String -> Pattern Double -> ControlPattern
pF "hold"
-- | a pattern of numbers from 0 to 1. Applies the resonance of the high-pass filter.
hresonance :: Pattern Double -> ControlPattern
hresonance :: Pattern Double -> ControlPattern
hresonance = String -> Pattern Double -> ControlPattern
pF "hresonance"
kriole :: Pattern Int -> ControlPattern
kriole :: Pattern Int -> ControlPattern
kriole = String -> Pattern Int -> ControlPattern
pI "kriole"
lagogo :: Pattern Double -> ControlPattern
lagogo :: Pattern Double -> ControlPattern
lagogo = String -> Pattern Double -> ControlPattern
pF "lagogo"
lclap :: Pattern Double -> ControlPattern
lclap :: Pattern Double -> ControlPattern
lclap = String -> Pattern Double -> ControlPattern
pF "lclap"
lclaves :: Pattern Double -> ControlPattern
lclaves :: Pattern Double -> ControlPattern
lclaves = String -> Pattern Double -> ControlPattern
pF "lclaves"
lclhat :: Pattern Double -> ControlPattern
lclhat :: Pattern Double -> ControlPattern
lclhat = String -> Pattern Double -> ControlPattern
pF "lclhat"
lcrash :: Pattern Double -> ControlPattern
lcrash :: Pattern Double -> ControlPattern
lcrash = String -> Pattern Double -> ControlPattern
pF "lcrash"
leslie :: Pattern Double -> ControlPattern
leslie :: Pattern Double -> ControlPattern
leslie = String -> Pattern Double -> ControlPattern
pF "leslie"
lrate :: Pattern Double -> ControlPattern
lrate :: Pattern Double -> ControlPattern
lrate = String -> Pattern Double -> ControlPattern
pF "lrate"
lsize :: Pattern Double -> ControlPattern
lsize :: Pattern Double -> ControlPattern
lsize = String -> Pattern Double -> ControlPattern
pF "lsize"
lfo :: Pattern Double -> ControlPattern
lfo :: Pattern Double -> ControlPattern
lfo = String -> Pattern Double -> ControlPattern
pF "lfo"
lfocutoffint :: Pattern Double -> ControlPattern
lfocutoffint :: Pattern Double -> ControlPattern
lfocutoffint = String -> Pattern Double -> ControlPattern
pF "lfocutoffint"
lfodelay :: Pattern Double -> ControlPattern
lfodelay :: Pattern Double -> ControlPattern
lfodelay = String -> Pattern Double -> ControlPattern
pF "lfodelay"
lfoint :: Pattern Double -> ControlPattern
lfoint :: Pattern Double -> ControlPattern
lfoint = String -> Pattern Double -> ControlPattern
pF "lfoint"
lfopitchint :: Pattern Double -> ControlPattern
lfopitchint :: Pattern Double -> ControlPattern
lfopitchint = String -> Pattern Double -> ControlPattern
pF "lfopitchint"
lfoshape :: Pattern Double -> ControlPattern
lfoshape :: Pattern Double -> ControlPattern
lfoshape = String -> Pattern Double -> ControlPattern
pF "lfoshape"
lfosync :: Pattern Double -> ControlPattern
lfosync :: Pattern Double -> ControlPattern
lfosync = String -> Pattern Double -> ControlPattern
pF "lfosync"
lhitom :: Pattern Double -> ControlPattern
lhitom :: Pattern Double -> ControlPattern
lhitom = String -> Pattern Double -> ControlPattern
pF "lhitom"
lkick :: Pattern Double -> ControlPattern
lkick :: Pattern Double -> ControlPattern
lkick = String -> Pattern Double -> ControlPattern
pF "lkick"
llotom :: Pattern Double -> ControlPattern
llotom :: Pattern Double -> ControlPattern
llotom = String -> Pattern Double -> ControlPattern
pF "llotom"
{- | A pattern of numbers. Specifies whether delaytime is calculated relative to cps. When set to 1, delaytime is a direct multiple of a cycle.
-}
lock :: Pattern Double -> ControlPattern
lock :: Pattern Double -> ControlPattern
lock = String -> Pattern Double -> ControlPattern
pF "lock"
-- | loops the sample (from `begin` to `end`) the specified number of times.
loop :: Pattern Double -> ControlPattern
loop :: Pattern Double -> ControlPattern
loop = String -> Pattern Double -> ControlPattern
pF "loop"
lophat :: Pattern Double -> ControlPattern
lophat :: Pattern Double -> ControlPattern
lophat = String -> Pattern Double -> ControlPattern
pF "lophat"
lsnare :: Pattern Double -> ControlPattern
lsnare :: Pattern Double -> ControlPattern
lsnare = String -> Pattern Double -> ControlPattern
pF "lsnare"
-- | specifies the sample or note number to be used
n :: Pattern Double -> ControlPattern
n :: Pattern Double -> ControlPattern
n = String -> Pattern Double -> ControlPattern
pF "n"
note :: Pattern Double -> ControlPattern
note :: Pattern Double -> ControlPattern
note = String -> Pattern Double -> ControlPattern
pF "note"
{- |
Pushes things forward (or backwards within built-in latency) in time. Allows for nice things like _swing_ feeling:

@
d1 $ stack [
 sound "bd bd/4",
 sound "hh(5,8)"
 ] # nudge "[0 0.04]*4"
@

--pitch model -}

degree, mtranspose, ctranspose, harmonic, stepsPerOctave, octaveRatio :: Pattern Double -> ControlPattern
degree :: Pattern Double -> ControlPattern
degree = String -> Pattern Double -> ControlPattern
pF "degree"
mtranspose :: Pattern Double -> ControlPattern
mtranspose = String -> Pattern Double -> ControlPattern
pF "mtranspose"
ctranspose :: Pattern Double -> ControlPattern
ctranspose = String -> Pattern Double -> ControlPattern
pF "ctranspose"
harmonic :: Pattern Double -> ControlPattern
harmonic = String -> Pattern Double -> ControlPattern
pF "ctranspose"
stepsPerOctave :: Pattern Double -> ControlPattern
stepsPerOctave = String -> Pattern Double -> ControlPattern
pF "stepsPerOctave"
octaveRatio :: Pattern Double -> ControlPattern
octaveRatio = String -> Pattern Double -> ControlPattern
pF "octaveRatio"


--Low values will give a more _human_ feeling, high values might result in quite the contrary.

nudge :: Pattern Double -> ControlPattern
nudge :: Pattern Double -> ControlPattern
nudge = String -> Pattern Double -> ControlPattern
pF "nudge"
octave :: Pattern Int -> ControlPattern
octave :: Pattern Int -> ControlPattern
octave = String -> Pattern Int -> ControlPattern
pI "octave"
offset :: Pattern Double -> ControlPattern
offset :: Pattern Double -> ControlPattern
offset = String -> Pattern Double -> ControlPattern
pF "offset"
ophatdecay :: Pattern Double -> ControlPattern
ophatdecay :: Pattern Double -> ControlPattern
ophatdecay = String -> Pattern Double -> ControlPattern
pF "ophatdecay"
{- | a pattern of numbers. An `orbit` is a global parameter context for patterns. Patterns with the same orbit will share hardware output bus offset and global effects, e.g. reverb and delay. The maximum number of orbits is specified in the superdirt startup, numbers higher than maximum will wrap around.
-}
orbit :: Pattern Int -> ControlPattern
orbit :: Pattern Int -> ControlPattern
orbit = String -> Pattern Int -> ControlPattern
pI "orbit"

overgain :: Pattern Double -> ControlPattern
overgain :: Pattern Double -> ControlPattern
overgain = String -> Pattern Double -> ControlPattern
pF "overgain"

overshape :: Pattern Double -> ControlPattern
overshape :: Pattern Double -> ControlPattern
overshape = String -> Pattern Double -> ControlPattern
pF "overshape"

-- | a pattern of numbers between 0 and 1, from left to right (assuming stereo), once round a circle (assuming multichannel)
pan :: Pattern Double -> ControlPattern
pan :: Pattern Double -> ControlPattern
pan = String -> Pattern Double -> ControlPattern
pF "pan"
-- | a pattern of numbers between -inf and inf, which controls how much multichannel output is fanned out (negative is backwards ordering)
panspan :: Pattern Double -> ControlPattern
panspan :: Pattern Double -> ControlPattern
panspan = String -> Pattern Double -> ControlPattern
pF "span"
-- | a pattern of numbers between 0.0 and 1.0, which controls the multichannel spread range (multichannel only)
pansplay :: Pattern Double -> ControlPattern
pansplay :: Pattern Double -> ControlPattern
pansplay = String -> Pattern Double -> ControlPattern
pF "splay"
-- | a pattern of numbers between 0.0 and inf, which controls how much each channel is distributed over neighbours (multichannel only)
panwidth :: Pattern Double -> ControlPattern
panwidth :: Pattern Double -> ControlPattern
panwidth = String -> Pattern Double -> ControlPattern
pF "panwidth"
-- | a pattern of numbers between -1.0 and 1.0, which controls the relative position of the centre pan in a pair of adjacent speakers (multichannel only)
panorient :: Pattern Double -> ControlPattern
panorient :: Pattern Double -> ControlPattern
panorient = String -> Pattern Double -> ControlPattern
pF "orientation"

pitch1 :: Pattern Double -> ControlPattern
pitch1 :: Pattern Double -> ControlPattern
pitch1 = String -> Pattern Double -> ControlPattern
pF "pitch1"
pitch2 :: Pattern Double -> ControlPattern
pitch2 :: Pattern Double -> ControlPattern
pitch2 = String -> Pattern Double -> ControlPattern
pF "pitch2"
pitch3 :: Pattern Double -> ControlPattern
pitch3 :: Pattern Double -> ControlPattern
pitch3 = String -> Pattern Double -> ControlPattern
pF "pitch3"
portamento :: Pattern Double -> ControlPattern
portamento :: Pattern Double -> ControlPattern
portamento = String -> Pattern Double -> ControlPattern
pF "portamento"
-- | used in SuperDirt softsynths as a control rate or "speed"
rate :: Pattern Double -> ControlPattern
rate :: Pattern Double -> ControlPattern
rate = String -> Pattern Double -> ControlPattern
pF "rate"
-- | a pattern of numbers to specify the release time (in seconds) of an envelope applied to each sample. Only takes effect if `attack` is also specified.
release :: Pattern Double -> ControlPattern
release :: Pattern Double -> ControlPattern
release = String -> Pattern Double -> ControlPattern
pF "release"
-- | a pattern of numbers from 0 to 1. Specifies the resonance of the low-pass filter.
resonance :: Pattern Double -> ControlPattern
resonance :: Pattern Double -> ControlPattern
resonance = String -> Pattern Double -> ControlPattern
pF "resonance"
-- | a pattern of numbers from 0 to 1. Sets the level of reverb.
room :: Pattern Double -> ControlPattern
room :: Pattern Double -> ControlPattern
room = String -> Pattern Double -> ControlPattern
pF "room"
sagogo :: Pattern Double -> ControlPattern
sagogo :: Pattern Double -> ControlPattern
sagogo = String -> Pattern Double -> ControlPattern
pF "sagogo"
sclap :: Pattern Double -> ControlPattern
sclap :: Pattern Double -> ControlPattern
sclap = String -> Pattern Double -> ControlPattern
pF "sclap"
sclaves :: Pattern Double -> ControlPattern
sclaves :: Pattern Double -> ControlPattern
sclaves = String -> Pattern Double -> ControlPattern
pF "sclaves"
scrash :: Pattern Double -> ControlPattern
scrash :: Pattern Double -> ControlPattern
scrash = String -> Pattern Double -> ControlPattern
pF "scrash"
semitone :: Pattern Double -> ControlPattern
semitone :: Pattern Double -> ControlPattern
semitone = String -> Pattern Double -> ControlPattern
pF "semitone"
-- | wave shaping distortion, a pattern of numbers from 0 for no distortion up to 1 for loads of distortion.
shape :: Pattern Double -> ControlPattern
shape :: Pattern Double -> ControlPattern
shape = String -> Pattern Double -> ControlPattern
pF "shape"
-- | a pattern of numbers from 0 to 1. Sets the perceptual size (reverb time) of the `room` to be used in reverb.
size :: Pattern Double -> ControlPattern
size :: Pattern Double -> ControlPattern
size = String -> Pattern Double -> ControlPattern
pF "size"
slide :: Pattern Double -> ControlPattern
slide :: Pattern Double -> ControlPattern
slide = String -> Pattern Double -> ControlPattern
pF "slide"
-- | a pattern of numbers which changes the speed of sample playback, i.e. a cheap way of changing pitch. Negative values will play the sample backwards!
speed :: Pattern Double -> ControlPattern
speed :: Pattern Double -> ControlPattern
speed = String -> Pattern Double -> ControlPattern
pF "speed"
squiz :: Pattern Double -> ControlPattern
squiz :: Pattern Double -> ControlPattern
squiz = String -> Pattern Double -> ControlPattern
pF "squiz"
-- | a pattern of strings. Selects the sample to be played.
s' :: Pattern String -> ControlPattern
s' :: Pattern String -> ControlPattern
s' = String -> Pattern String -> ControlPattern
pS "s"
stutterdepth :: Pattern Double -> ControlPattern
stutterdepth :: Pattern Double -> ControlPattern
stutterdepth = String -> Pattern Double -> ControlPattern
pF "stutterdepth"
stuttertime :: Pattern Double -> ControlPattern
stuttertime :: Pattern Double -> ControlPattern
stuttertime = String -> Pattern Double -> ControlPattern
pF "stuttertime"
sustain :: Pattern Double -> ControlPattern
sustain :: Pattern Double -> ControlPattern
sustain = String -> Pattern Double -> ControlPattern
pF "sustain"
tomdecay :: Pattern Double -> ControlPattern
tomdecay :: Pattern Double -> ControlPattern
tomdecay = String -> Pattern Double -> ControlPattern
pF "tomdecay"
{- | used in conjunction with `speed`, accepts values of "r" (rate, default behavior), "c" (cycles), or "s" (seconds).
Using `unit "c"` means `speed` will be interpreted in units of cycles, e.g. `speed "1"` means samples will be stretched to fill a cycle.
Using `unit "s"` means the playback speed will be adjusted so that the duration is the number of seconds specified by `speed`.
-}
unit :: Pattern String -> ControlPattern
unit :: Pattern String -> ControlPattern
unit = String -> Pattern String -> ControlPattern
pS "unit"
velocity :: Pattern Double -> ControlPattern
velocity :: Pattern Double -> ControlPattern
velocity = String -> Pattern Double -> ControlPattern
pF "velocity"
vcfegint :: Pattern Double -> ControlPattern
vcfegint :: Pattern Double -> ControlPattern
vcfegint = String -> Pattern Double -> ControlPattern
pF "vcfegint"
vcoegint :: Pattern Double -> ControlPattern
vcoegint :: Pattern Double -> ControlPattern
vcoegint = String -> Pattern Double -> ControlPattern
pF "vcoegint"
voice :: Pattern Double -> ControlPattern
voice :: Pattern Double -> ControlPattern
voice = String -> Pattern Double -> ControlPattern
pF "voice"
-- | formant filter to make things sound like vowels, a pattern of either `a`, `e`, `i`, `o` or `u`. Use a rest (`~`) for no effect.
vowel :: Pattern String -> ControlPattern
vowel :: Pattern String -> ControlPattern
vowel = String -> Pattern String -> ControlPattern
pS "vowel"
waveloss :: Pattern Double -> ControlPattern
waveloss :: Pattern Double -> ControlPattern
waveloss = String -> Pattern Double -> ControlPattern
pF "waveloss"

-- MIDI-specific params

dur :: Pattern Double -> ControlPattern
dur :: Pattern Double -> ControlPattern
dur = String -> Pattern Double -> ControlPattern
pF "dur"
modwheel :: Pattern Double -> ControlPattern
modwheel :: Pattern Double -> ControlPattern
modwheel = String -> Pattern Double -> ControlPattern
pF "modwheel"
expression :: Pattern Double -> ControlPattern
expression :: Pattern Double -> ControlPattern
expression = String -> Pattern Double -> ControlPattern
pF "expression"
sustainpedal :: Pattern Double -> ControlPattern
sustainpedal :: Pattern Double -> ControlPattern
sustainpedal = String -> Pattern Double -> ControlPattern
pF "sustainpedal"

-- Tremolo Audio DSP effect | params are "tremolorate" and "tremolodepth"
tremolorate, tremolodepth :: Pattern Double -> ControlPattern
tremolorate :: Pattern Double -> ControlPattern
tremolorate = String -> Pattern Double -> ControlPattern
pF "tremolorate"
tremolodepth :: Pattern Double -> ControlPattern
tremolodepth = String -> Pattern Double -> ControlPattern
pF "tremolodepth"

-- Phaser Audio DSP effect | params are "phaserrate" and "phaserdepth"
phaserrate, phaserdepth :: Pattern Double -> ControlPattern
phaserrate :: Pattern Double -> ControlPattern
phaserrate = String -> Pattern Double -> ControlPattern
pF "phaserrate"
phaserdepth :: Pattern Double -> ControlPattern
phaserdepth = String -> Pattern Double -> ControlPattern
pF "phaserdepth"

-- More SuperDirt effects
-- frequency shifter
fshift, fshiftphase, fshiftnote :: Pattern Double -> ControlPattern
fshift :: Pattern Double -> ControlPattern
fshift = String -> Pattern Double -> ControlPattern
pF "fshift"
fshiftphase :: Pattern Double -> ControlPattern
fshiftphase = String -> Pattern Double -> ControlPattern
pF "fshiftphase"
fshiftnote :: Pattern Double -> ControlPattern
fshiftnote = String -> Pattern Double -> ControlPattern
pF "fshiftnote"
-- triode (tube distortion)
triode :: Pattern Double -> ControlPattern
triode :: Pattern Double -> ControlPattern
triode = String -> Pattern Double -> ControlPattern
pF "triode"
-- krush (like Sonic Pi's shape/bass enhancer)
krush, kcutoff :: Pattern Double -> ControlPattern
krush :: Pattern Double -> ControlPattern
krush = String -> Pattern Double -> ControlPattern
pF "krush"
kcutoff :: Pattern Double -> ControlPattern
kcutoff = String -> Pattern Double -> ControlPattern
pF "kcutoff"
-- octer (like Sonic Pi's octaver effect)
octer, octersub, octersubsub :: Pattern Double -> ControlPattern
octer :: Pattern Double -> ControlPattern
octer = String -> Pattern Double -> ControlPattern
pF "octer"
octersub :: Pattern Double -> ControlPattern
octersub = String -> Pattern Double -> ControlPattern
pF "octersub"
octersubsub :: Pattern Double -> ControlPattern
octersubsub = String -> Pattern Double -> ControlPattern
pF "octersubsub"
-- ring modulation
ring, ringf, ringdf :: Pattern Double -> ControlPattern
ring :: Pattern Double -> ControlPattern
ring = String -> Pattern Double -> ControlPattern
pF "ring"
ringf :: Pattern Double -> ControlPattern
ringf = String -> Pattern Double -> ControlPattern
pF "ringf"
ringdf :: Pattern Double -> ControlPattern
ringdf = String -> Pattern Double -> ControlPattern
pF "ringdf"
-- noisy fuzzy distortion
distort :: Pattern Double -> ControlPattern
distort :: Pattern Double -> ControlPattern
distort = String -> Pattern Double -> ControlPattern
pF "distort"

-- Spectral freeze
freeze :: Pattern Double -> ControlPattern
freeze :: Pattern Double -> ControlPattern
freeze = String -> Pattern Double -> ControlPattern
pF "freeze"

-- Spectral delay
xsdelay :: Pattern Double -> ControlPattern
xsdelay :: Pattern Double -> ControlPattern
xsdelay = String -> Pattern Double -> ControlPattern
pF "xsdelay"

tsdelay :: Pattern Double -> ControlPattern
tsdelay :: Pattern Double -> ControlPattern
tsdelay = String -> Pattern Double -> ControlPattern
pF "tsdelay"

-- Spectral conform
real :: Pattern Double -> ControlPattern
real :: Pattern Double -> ControlPattern
real = String -> Pattern Double -> ControlPattern
pF "real"

imag :: Pattern Double -> ControlPattern
imag :: Pattern Double -> ControlPattern
imag = String -> Pattern Double -> ControlPattern
pF "imag"

-- Spectral enhance
enhance :: Pattern Double -> ControlPattern
enhance :: Pattern Double -> ControlPattern
enhance = String -> Pattern Double -> ControlPattern
pF "enhance"

partials :: Pattern Double -> ControlPattern
partials :: Pattern Double -> ControlPattern
partials = String -> Pattern Double -> ControlPattern
pF "partials"

-- Spectral comb
comb :: Pattern Double -> ControlPattern
comb :: Pattern Double -> ControlPattern
comb = String -> Pattern Double -> ControlPattern
pF "comb"

-- Spectral smear
smear :: Pattern Double -> ControlPattern
smear :: Pattern Double -> ControlPattern
smear = String -> Pattern Double -> ControlPattern
pF "smear"

-- Spectral scramble
scram :: Pattern Double -> ControlPattern
scram :: Pattern Double -> ControlPattern
scram = String -> Pattern Double -> ControlPattern
pF "scram"

-- Spectral binshift
binshift :: Pattern Double -> ControlPattern
binshift :: Pattern Double -> ControlPattern
binshift = String -> Pattern Double -> ControlPattern
pF "binshift"

-- High pass sort of spectral filter
hbrick :: Pattern Double -> ControlPattern
hbrick :: Pattern Double -> ControlPattern
hbrick = String -> Pattern Double -> ControlPattern
pF "hbrick"

-- Low pass sort of spectral filter
lbrick :: Pattern Double -> ControlPattern
lbrick :: Pattern Double -> ControlPattern
lbrick = String -> Pattern Double -> ControlPattern
pF "lbrick"

-- aliases
att, bpf, bpq, chdecay, ctf, ctfg, delayfb, delayt, det, gat, hg, hpf, hpq, lag, lbd, lch, lcl, lcp, lcr, lfoc, lfoi
   , lfop, lht, llt, loh, lpf, lpq, lsn, ohdecay, phasdp, phasr, pit1, pit2, pit3, por, rel, sz, sag, scl, scp
   , scr, sld, std, stt, sus, tdecay, tremdp, tremr, vcf, vco, voi
 :: Pattern Double -> ControlPattern
att :: Pattern Double -> ControlPattern
att = Pattern Double -> ControlPattern
attack
bpf :: Pattern Double -> ControlPattern
bpf = Pattern Double -> ControlPattern
bandf
bpq :: Pattern Double -> ControlPattern
bpq = Pattern Double -> ControlPattern
bandq
chdecay :: Pattern Double -> ControlPattern
chdecay = Pattern Double -> ControlPattern
clhatdecay
ctf :: Pattern Double -> ControlPattern
ctf = Pattern Double -> ControlPattern
cutoff
ctfg :: Pattern Double -> ControlPattern
ctfg = Pattern Double -> ControlPattern
cutoffegint
delayfb :: Pattern Double -> ControlPattern
delayfb = Pattern Double -> ControlPattern
delayfeedback
delayt :: Pattern Double -> ControlPattern
delayt = Pattern Double -> ControlPattern
delaytime
det :: Pattern Double -> ControlPattern
det = Pattern Double -> ControlPattern
detune
gat :: Pattern Double -> ControlPattern
gat = Pattern Double -> ControlPattern
gate
hg :: Pattern Double -> ControlPattern
hg = Pattern Double -> ControlPattern
hatgrain
hpf :: Pattern Double -> ControlPattern
hpf = Pattern Double -> ControlPattern
hcutoff
hpq :: Pattern Double -> ControlPattern
hpq = Pattern Double -> ControlPattern
hresonance
lag :: Pattern Double -> ControlPattern
lag = Pattern Double -> ControlPattern
lagogo
lbd :: Pattern Double -> ControlPattern
lbd = Pattern Double -> ControlPattern
lkick
lch :: Pattern Double -> ControlPattern
lch = Pattern Double -> ControlPattern
lclhat
lcl :: Pattern Double -> ControlPattern
lcl = Pattern Double -> ControlPattern
lclaves
lcp :: Pattern Double -> ControlPattern
lcp = Pattern Double -> ControlPattern
lclap
lcr :: Pattern Double -> ControlPattern
lcr = Pattern Double -> ControlPattern
lcrash
lfoc :: Pattern Double -> ControlPattern
lfoc = Pattern Double -> ControlPattern
lfocutoffint
lfoi :: Pattern Double -> ControlPattern
lfoi = Pattern Double -> ControlPattern
lfoint
lfop :: Pattern Double -> ControlPattern
lfop = Pattern Double -> ControlPattern
lfopitchint
lht :: Pattern Double -> ControlPattern
lht = Pattern Double -> ControlPattern
lhitom
llt :: Pattern Double -> ControlPattern
llt = Pattern Double -> ControlPattern
llotom
loh :: Pattern Double -> ControlPattern
loh = Pattern Double -> ControlPattern
lophat
lpf :: Pattern Double -> ControlPattern
lpf = Pattern Double -> ControlPattern
cutoff
lpq :: Pattern Double -> ControlPattern
lpq = Pattern Double -> ControlPattern
resonance
lsn :: Pattern Double -> ControlPattern
lsn = Pattern Double -> ControlPattern
lsnare
ohdecay :: Pattern Double -> ControlPattern
ohdecay = Pattern Double -> ControlPattern
ophatdecay
phasdp :: Pattern Double -> ControlPattern
phasdp = Pattern Double -> ControlPattern
phaserdepth
phasr :: Pattern Double -> ControlPattern
phasr = Pattern Double -> ControlPattern
phaserrate
pit1 :: Pattern Double -> ControlPattern
pit1 = Pattern Double -> ControlPattern
pitch1
pit2 :: Pattern Double -> ControlPattern
pit2 = Pattern Double -> ControlPattern
pitch2
pit3 :: Pattern Double -> ControlPattern
pit3 = Pattern Double -> ControlPattern
pitch3
por :: Pattern Double -> ControlPattern
por = Pattern Double -> ControlPattern
portamento
rel :: Pattern Double -> ControlPattern
rel = Pattern Double -> ControlPattern
release
sag :: Pattern Double -> ControlPattern
sag = Pattern Double -> ControlPattern
sagogo
scl :: Pattern Double -> ControlPattern
scl = Pattern Double -> ControlPattern
sclaves
scp :: Pattern Double -> ControlPattern
scp = Pattern Double -> ControlPattern
sclap
scr :: Pattern Double -> ControlPattern
scr = Pattern Double -> ControlPattern
scrash
sz :: Pattern Double -> ControlPattern
sz = Pattern Double -> ControlPattern
size
sld :: Pattern Double -> ControlPattern
sld = Pattern Double -> ControlPattern
slide
std :: Pattern Double -> ControlPattern
std = Pattern Double -> ControlPattern
stutterdepth
stt :: Pattern Double -> ControlPattern
stt = Pattern Double -> ControlPattern
stuttertime
sus :: Pattern Double -> ControlPattern
sus = Pattern Double -> ControlPattern
sustain
tdecay :: Pattern Double -> ControlPattern
tdecay = Pattern Double -> ControlPattern
tomdecay
tremdp :: Pattern Double -> ControlPattern
tremdp = Pattern Double -> ControlPattern
tremolodepth
tremr :: Pattern Double -> ControlPattern
tremr = Pattern Double -> ControlPattern
tremolorate
vcf :: Pattern Double -> ControlPattern
vcf = Pattern Double -> ControlPattern
vcfegint
vco :: Pattern Double -> ControlPattern
vco = Pattern Double -> ControlPattern
vcoegint
voi :: Pattern Double -> ControlPattern
voi = Pattern Double -> ControlPattern
voice

midinote :: Pattern Double -> ControlPattern
midinote :: Pattern Double -> ControlPattern
midinote = Pattern Double -> ControlPattern
note (Pattern Double -> ControlPattern)
-> (Pattern Double -> Pattern Double)
-> Pattern Double
-> ControlPattern
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Double -> Double -> Double
forall a. Num a => a -> a -> a
subtract 60 (Double -> Double) -> Pattern Double -> Pattern Double
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>)

drum :: Pattern String -> ControlPattern
drum :: Pattern String -> ControlPattern
drum = Pattern Double -> ControlPattern
n (Pattern Double -> ControlPattern)
-> (Pattern String -> Pattern Double)
-> Pattern String
-> ControlPattern
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Double -> Double -> Double
forall a. Num a => a -> a -> a
subtract 60 (Double -> Double) -> (String -> Double) -> String -> Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Double
forall a. Num a => String -> a
drumN (String -> Double) -> Pattern String -> Pattern Double
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>)

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


-- SuperDirt MIDI Params

array :: Pattern [Word8] -> ControlPattern
array :: Pattern [Word8] -> ControlPattern
array = String -> Pattern [Word8] -> ControlPattern
pX "array"
midichan :: Pattern Double -> ControlPattern
midichan :: Pattern Double -> ControlPattern
midichan = String -> Pattern Double -> ControlPattern
pF "midichan"
control :: Pattern Double -> ControlPattern
control :: Pattern Double -> ControlPattern
control = String -> Pattern Double -> ControlPattern
pF "control"

ccn :: Pattern Double -> ControlPattern
ccn :: Pattern Double -> ControlPattern
ccn = String -> Pattern Double -> ControlPattern
pF "ccn"
ccv :: Pattern Double -> ControlPattern
ccv :: Pattern Double -> ControlPattern
ccv = String -> Pattern Double -> ControlPattern
pF "ccv"

polyTouch :: Pattern Double -> ControlPattern
polyTouch :: Pattern Double -> ControlPattern
polyTouch = String -> Pattern Double -> ControlPattern
pF "polyTouch"

midibend :: Pattern Double -> ControlPattern
midibend :: Pattern Double -> ControlPattern
midibend = String -> Pattern Double -> ControlPattern
pF "midibend"

miditouch :: Pattern Double -> ControlPattern
miditouch :: Pattern Double -> ControlPattern
miditouch = String -> Pattern Double -> ControlPattern
pF "miditouch"

nrpnn :: Pattern Int -> ControlPattern
nrpnn :: Pattern Int -> ControlPattern
nrpnn = String -> Pattern Int -> ControlPattern
pI "nrpn"
nrpnv :: Pattern Int -> ControlPattern
nrpnv :: Pattern Int -> ControlPattern
nrpnv = String -> Pattern Int -> ControlPattern
pI "val"

ctlNum :: Pattern Double -> ControlPattern
ctlNum :: Pattern Double -> ControlPattern
ctlNum = String -> Pattern Double -> ControlPattern
pF "ctlNum"

frameRate :: Pattern Double -> ControlPattern
frameRate :: Pattern Double -> ControlPattern
frameRate = String -> Pattern Double -> ControlPattern
pF "frameRate"
frames :: Pattern Double -> ControlPattern
frames :: Pattern Double -> ControlPattern
frames = String -> Pattern Double -> ControlPattern
pF "frames"
hours :: Pattern Double -> ControlPattern
hours :: Pattern Double -> ControlPattern
hours = String -> Pattern Double -> ControlPattern
pF "hours"

midicmd :: Pattern String -> ControlPattern
midicmd :: Pattern String -> ControlPattern
midicmd = String -> Pattern String -> ControlPattern
pS "midicmd"
command :: Pattern String -> ControlPattern
command :: Pattern String -> ControlPattern
command = Pattern String -> ControlPattern
midicmd

minutes :: Pattern Double -> ControlPattern
minutes :: Pattern Double -> ControlPattern
minutes = String -> Pattern Double -> ControlPattern
pF "minutes"
progNum :: Pattern Double -> ControlPattern
progNum :: Pattern Double -> ControlPattern
progNum = String -> Pattern Double -> ControlPattern
pF "progNum"
seconds :: Pattern Double -> ControlPattern
seconds :: Pattern Double -> ControlPattern
seconds = String -> Pattern Double -> ControlPattern
pF "seconds"
songPtr :: Pattern Double -> ControlPattern
songPtr :: Pattern Double -> ControlPattern
songPtr = String -> Pattern Double -> ControlPattern
pF "songPtr"
uid :: Pattern Double -> ControlPattern
uid :: Pattern Double -> ControlPattern
uid = String -> Pattern Double -> ControlPattern
pF "uid"
val :: Pattern Double -> ControlPattern
val :: Pattern Double -> ControlPattern
val = String -> Pattern Double -> ControlPattern
pF "val"

{- | `up` is now an alias of `note`. -}
up :: Pattern Double -> ControlPattern
up :: Pattern Double -> ControlPattern
up = Pattern Double -> ControlPattern
note

cps :: Pattern Double -> ControlPattern
cps :: Pattern Double -> ControlPattern
cps = String -> Pattern Double -> ControlPattern
pF "cps"

-- generic names for mapping to e.g. midi controls
button0 :: Pattern Double -> ControlPattern
button0 :: Pattern Double -> ControlPattern
button0 = String -> Pattern Double -> ControlPattern
pF "button0"
button1 :: Pattern Double -> ControlPattern
button1 :: Pattern Double -> ControlPattern
button1 = String -> Pattern Double -> ControlPattern
pF "button1"
button2 :: Pattern Double -> ControlPattern
button2 :: Pattern Double -> ControlPattern
button2 = String -> Pattern Double -> ControlPattern
pF "button2"
button3 :: Pattern Double -> ControlPattern
button3 :: Pattern Double -> ControlPattern
button3 = String -> Pattern Double -> ControlPattern
pF "button3"
button4 :: Pattern Double -> ControlPattern
button4 :: Pattern Double -> ControlPattern
button4 = String -> Pattern Double -> ControlPattern
pF "button4"
button5 :: Pattern Double -> ControlPattern
button5 :: Pattern Double -> ControlPattern
button5 = String -> Pattern Double -> ControlPattern
pF "button5"
button6 :: Pattern Double -> ControlPattern
button6 :: Pattern Double -> ControlPattern
button6 = String -> Pattern Double -> ControlPattern
pF "button6"
button7 :: Pattern Double -> ControlPattern
button7 :: Pattern Double -> ControlPattern
button7 = String -> Pattern Double -> ControlPattern
pF "button7"
button8 :: Pattern Double -> ControlPattern
button8 :: Pattern Double -> ControlPattern
button8 = String -> Pattern Double -> ControlPattern
pF "button8"
button9 :: Pattern Double -> ControlPattern
button9 :: Pattern Double -> ControlPattern
button9 = String -> Pattern Double -> ControlPattern
pF "button9"
button10 :: Pattern Double -> ControlPattern
button10 :: Pattern Double -> ControlPattern
button10 = String -> Pattern Double -> ControlPattern
pF "button10"
button11 :: Pattern Double -> ControlPattern
button11 :: Pattern Double -> ControlPattern
button11 = String -> Pattern Double -> ControlPattern
pF "button11"
button12 :: Pattern Double -> ControlPattern
button12 :: Pattern Double -> ControlPattern
button12 = String -> Pattern Double -> ControlPattern
pF "button12"
button13 :: Pattern Double -> ControlPattern
button13 :: Pattern Double -> ControlPattern
button13 = String -> Pattern Double -> ControlPattern
pF "button13"
button14 :: Pattern Double -> ControlPattern
button14 :: Pattern Double -> ControlPattern
button14 = String -> Pattern Double -> ControlPattern
pF "button14"
button15 :: Pattern Double -> ControlPattern
button15 :: Pattern Double -> ControlPattern
button15 = String -> Pattern Double -> ControlPattern
pF "button15"
button16 :: Pattern Double -> ControlPattern
button16 :: Pattern Double -> ControlPattern
button16 = String -> Pattern Double -> ControlPattern
pF "button16"
button17 :: Pattern Double -> ControlPattern
button17 :: Pattern Double -> ControlPattern
button17 = String -> Pattern Double -> ControlPattern
pF "button17"
button18 :: Pattern Double -> ControlPattern
button18 :: Pattern Double -> ControlPattern
button18 = String -> Pattern Double -> ControlPattern
pF "button18"
button19 :: Pattern Double -> ControlPattern
button19 :: Pattern Double -> ControlPattern
button19 = String -> Pattern Double -> ControlPattern
pF "button19"
button20 :: Pattern Double -> ControlPattern
button20 :: Pattern Double -> ControlPattern
button20 = String -> Pattern Double -> ControlPattern
pF "button20"
button21 :: Pattern Double -> ControlPattern
button21 :: Pattern Double -> ControlPattern
button21 = String -> Pattern Double -> ControlPattern
pF "button21"
button22 :: Pattern Double -> ControlPattern
button22 :: Pattern Double -> ControlPattern
button22 = String -> Pattern Double -> ControlPattern
pF "button22"
button23 :: Pattern Double -> ControlPattern
button23 :: Pattern Double -> ControlPattern
button23 = String -> Pattern Double -> ControlPattern
pF "button23"
button24 :: Pattern Double -> ControlPattern
button24 :: Pattern Double -> ControlPattern
button24 = String -> Pattern Double -> ControlPattern
pF "button24"
button25 :: Pattern Double -> ControlPattern
button25 :: Pattern Double -> ControlPattern
button25 = String -> Pattern Double -> ControlPattern
pF "button25"
button26 :: Pattern Double -> ControlPattern
button26 :: Pattern Double -> ControlPattern
button26 = String -> Pattern Double -> ControlPattern
pF "button26"
button27 :: Pattern Double -> ControlPattern
button27 :: Pattern Double -> ControlPattern
button27 = String -> Pattern Double -> ControlPattern
pF "button27"
button28 :: Pattern Double -> ControlPattern
button28 :: Pattern Double -> ControlPattern
button28 = String -> Pattern Double -> ControlPattern
pF "button28"
button29 :: Pattern Double -> ControlPattern
button29 :: Pattern Double -> ControlPattern
button29 = String -> Pattern Double -> ControlPattern
pF "button29"
button30 :: Pattern Double -> ControlPattern
button30 :: Pattern Double -> ControlPattern
button30 = String -> Pattern Double -> ControlPattern
pF "button30"
button31 :: Pattern Double -> ControlPattern
button31 :: Pattern Double -> ControlPattern
button31 = String -> Pattern Double -> ControlPattern
pF "button31"

slider0 :: Pattern Double -> ControlPattern
slider0 :: Pattern Double -> ControlPattern
slider0 = String -> Pattern Double -> ControlPattern
pF "slider0"
slider1 :: Pattern Double -> ControlPattern
slider1 :: Pattern Double -> ControlPattern
slider1 = String -> Pattern Double -> ControlPattern
pF "slider1"
slider2 :: Pattern Double -> ControlPattern
slider2 :: Pattern Double -> ControlPattern
slider2 = String -> Pattern Double -> ControlPattern
pF "slider2"
slider3 :: Pattern Double -> ControlPattern
slider3 :: Pattern Double -> ControlPattern
slider3 = String -> Pattern Double -> ControlPattern
pF "slider3"
slider4 :: Pattern Double -> ControlPattern
slider4 :: Pattern Double -> ControlPattern
slider4 = String -> Pattern Double -> ControlPattern
pF "slider4"
slider5 :: Pattern Double -> ControlPattern
slider5 :: Pattern Double -> ControlPattern
slider5 = String -> Pattern Double -> ControlPattern
pF "slider5"
slider6 :: Pattern Double -> ControlPattern
slider6 :: Pattern Double -> ControlPattern
slider6 = String -> Pattern Double -> ControlPattern
pF "slider6"
slider7 :: Pattern Double -> ControlPattern
slider7 :: Pattern Double -> ControlPattern
slider7 = String -> Pattern Double -> ControlPattern
pF "slider7"
slider8 :: Pattern Double -> ControlPattern
slider8 :: Pattern Double -> ControlPattern
slider8 = String -> Pattern Double -> ControlPattern
pF "slider8"
slider9 :: Pattern Double -> ControlPattern
slider9 :: Pattern Double -> ControlPattern
slider9 = String -> Pattern Double -> ControlPattern
pF "slider9"
slider10 :: Pattern Double -> ControlPattern
slider10 :: Pattern Double -> ControlPattern
slider10 = String -> Pattern Double -> ControlPattern
pF "slider10"
slider11 :: Pattern Double -> ControlPattern
slider11 :: Pattern Double -> ControlPattern
slider11 = String -> Pattern Double -> ControlPattern
pF "slider11"
slider12 :: Pattern Double -> ControlPattern
slider12 :: Pattern Double -> ControlPattern
slider12 = String -> Pattern Double -> ControlPattern
pF "slider12"
slider13 :: Pattern Double -> ControlPattern
slider13 :: Pattern Double -> ControlPattern
slider13 = String -> Pattern Double -> ControlPattern
pF "slider13"
slider14 :: Pattern Double -> ControlPattern
slider14 :: Pattern Double -> ControlPattern
slider14 = String -> Pattern Double -> ControlPattern
pF "slider14"
slider15 :: Pattern Double -> ControlPattern
slider15 :: Pattern Double -> ControlPattern
slider15 = String -> Pattern Double -> ControlPattern
pF "slider15"
slider16 :: Pattern Double -> ControlPattern
slider16 :: Pattern Double -> ControlPattern
slider16 = String -> Pattern Double -> ControlPattern
pF "slider16"
slider17 :: Pattern Double -> ControlPattern
slider17 :: Pattern Double -> ControlPattern
slider17 = String -> Pattern Double -> ControlPattern
pF "slider17"
slider18 :: Pattern Double -> ControlPattern
slider18 :: Pattern Double -> ControlPattern
slider18 = String -> Pattern Double -> ControlPattern
pF "slider18"
slider19 :: Pattern Double -> ControlPattern
slider19 :: Pattern Double -> ControlPattern
slider19 = String -> Pattern Double -> ControlPattern
pF "slider19"
slider20 :: Pattern Double -> ControlPattern
slider20 :: Pattern Double -> ControlPattern
slider20 = String -> Pattern Double -> ControlPattern
pF "slider20"
slider21 :: Pattern Double -> ControlPattern
slider21 :: Pattern Double -> ControlPattern
slider21 = String -> Pattern Double -> ControlPattern
pF "slider21"
slider22 :: Pattern Double -> ControlPattern
slider22 :: Pattern Double -> ControlPattern
slider22 = String -> Pattern Double -> ControlPattern
pF "slider22"
slider23 :: Pattern Double -> ControlPattern
slider23 :: Pattern Double -> ControlPattern
slider23 = String -> Pattern Double -> ControlPattern
pF "slider23"
slider24 :: Pattern Double -> ControlPattern
slider24 :: Pattern Double -> ControlPattern
slider24 = String -> Pattern Double -> ControlPattern
pF "slider24"
slider25 :: Pattern Double -> ControlPattern
slider25 :: Pattern Double -> ControlPattern
slider25 = String -> Pattern Double -> ControlPattern
pF "slider25"
slider26 :: Pattern Double -> ControlPattern
slider26 :: Pattern Double -> ControlPattern
slider26 = String -> Pattern Double -> ControlPattern
pF "slider26"
slider27 :: Pattern Double -> ControlPattern
slider27 :: Pattern Double -> ControlPattern
slider27 = String -> Pattern Double -> ControlPattern
pF "slider27"
slider28 :: Pattern Double -> ControlPattern
slider28 :: Pattern Double -> ControlPattern
slider28 = String -> Pattern Double -> ControlPattern
pF "slider28"
slider29 :: Pattern Double -> ControlPattern
slider29 :: Pattern Double -> ControlPattern
slider29 = String -> Pattern Double -> ControlPattern
pF "slider29"
slider30 :: Pattern Double -> ControlPattern
slider30 :: Pattern Double -> ControlPattern
slider30 = String -> Pattern Double -> ControlPattern
pF "slider30"
slider31 :: Pattern Double -> ControlPattern
slider31 :: Pattern Double -> ControlPattern
slider31 = String -> Pattern Double -> ControlPattern
pF "slider31"