{-# Language FlexibleContexts, LambdaCase #-}

-- | A friendly family of effects. These functions are kindly provided by Iain McCurdy (designed in Csound).
module Csound.Air.Fx.FxBox(
    adele, pongy, tort, fowler, revsy, flan, phasy, crusher, chory, pany, oscPany, triPany, sqrPany, tremy, oscTremy, triTremy, sqrTremy, ringo, EnvelopeModSig,
    magnus,

    -- * Presets
    -- | For all presets we have 5 levels of strength. They are signified by numbers from 1 to 5. Also for some effects (delay and distortion)
    -- we have miscellaneous way to alter preset by suffix b (means bright) and m (means muffled). It alters the tone color of the effect.

    -- ** Analog Delay
    adele1, adele2, adele3, adele4, adele5,
    -- *** Bright
    adele1b, adele2b, adele3b, adele4b, adele5b,
    -- *** Muted
    adele1m, adele2m, adele3m, adele4m, adele5m,

    -- ** Ping Pong Delay
    pongy1, pongy2, pongy3, pongy4, pongy5,

    -- *** Bright
    pongy1b, pongy2b, pongy3b, pongy4b, pongy5b,

    -- *** Muted
    pongy1m, pongy2m, pongy3m, pongy4m, pongy5m,

    -- ** Distortion
    tort1, tort2, tort3, tort4, tort5,

    -- *** Bright
    tort1b, tort2b, tort3b, tort4b, tort5b,

    -- *** Muted
    tort1m, tort2m, tort3m, tort4m, tort5m,

    -- ** Envelope follower
    fowler',
    fowler1, fowler2, fowler3, fowler4, fowler5,

    -- ** Flanger
    flan',
    flan1, flan2, flan3, flan4, flan5,

    -- ** Phaser
    phasy',
    phasy1, phasy2, phasy3, phasy4, phasy5,

    -- ** Chorus
    chory',
    chory1, chory2, chory3, chory4, chory5,

    -- ** Auto Pan
    oscPany',
    oscPany1, oscPany2, oscPany3, oscPany4, oscPany5,

    triPany',
    triPany1, triPany2, triPany3, triPany4, triPany5,

    sqrPany',
    sqrPany1, sqrPany2, sqrPany3, sqrPany4, sqrPany5,

    -- ** Tremolo
    oscTremy',
    oscTremy1, oscTremy2, oscTremy3, oscTremy4, oscTremy5,

    triTremy',
    triTremy1, triTremy2, triTremy3, triTremy4, triTremy5,

    sqrTremy',
    sqrTremy1, sqrTremy2, sqrTremy3, sqrTremy4, sqrTremy5,

    -- ** Ring modulation
    ringo',
    ringo1, ringo2, ringo3, ringo4, ringo5,

    -- * Presets with UIs
    -- | If we use prefix @ui@ we can create an image of our effect that looks like guitar stompbox.
    --
    -- Let's take a distortion fr instance:
    --
    -- > type FxFun = Sig2 -> SE Sig2
    -- >
    -- > uiTort2 :: Source FxFun
    --
    -- We can combine the effects with functions:
    --
    -- > fxHor, fxVer :: [Source FxFun] -> Source FxFun
    -- >
    -- > fxMatrix :: Int -> [Source FxFun] -> Source FxFun
    -- > fxMatrix numberOfColumns fxs = ...
    --
    -- All these functions stack the effects in the list
    -- and align visuals. The visuals can be stacked horizontally, vertically
    -- or placed on a square grid.
    --
    -- Let's create a chain of effects and apply it to the input signal:
    --
    -- > > let pedals ain = lift1 (\f -> f ain) $ fxHor [uiFlan1, uiAdele2 0.25 0.5, uiHall 0.2, uiGain 0.4]
    -- >
    -- > > vdac $ pedals =<< (atMidi $ dryPatch vibraphone)
    --
    -- With @uiGain@ we can change the volume of the output.


    -- ** Reverb

    -- *** Rooms
    uiRoom, uiRoom1, uiRoom2, uiRoom3, uiRoom4, uiRoom5,

    -- ** Chambers
    uiChamber, uiChamber1, uiChamber2, uiChamber3, uiChamber4, uiChamber5,

    -- *** Halls
    uiHall, uiHall1, uiHall2, uiHall3, uiHall4, uiHall5,

    -- *** Caves
    uiCave, uiCave1, uiCave2, uiCave3, uiCave4, uiCave5,

    -- ** Mono Reverb

    -- *** Rooms
    uiMonoRoom, uiRoom1m, uiRoom2m, uiRoom3m, uiRoom4m, uiRoom5m,

    -- ** Chambers
    uiMonoChamber, uiChamber1m, uiChamber2m, uiChamber3m, uiChamber4m, uiChamber5m,

    -- *** Halls
    uiMonoHall, uiHall1m, uiHall2m, uiHall3m, uiHall4m, uiHall5m,

    -- *** Caves
    uiMonoCave, uiCave1m, uiCave2m, uiCave3m, uiCave4m, uiCave5m,

    -- ** Delay
    uiAdele1, uiAdele2, uiAdele3, uiAdele4, uiAdele5,
    uiAdele1b, uiAdele2b, uiAdele3b, uiAdele4b, uiAdele5b,
    uiAdele1m, uiAdele2m, uiAdele3m, uiAdele4m, uiAdele5m,

    -- ** Tape echo
    uiMagnus,

    -- ** Ping Pong Delay
    uiPongy1, uiPongy2, uiPongy3, uiPongy4, uiPongy5,
    uiPongy1b, uiPongy2b, uiPongy3b, uiPongy4b, uiPongy5b,
    uiPongy1m, uiPongy2m, uiPongy3m, uiPongy4m, uiPongy5m,

    -- ** Distortion
    uiTort1, uiTort2, uiTort3, uiTort4, uiTort5,
    uiTort1b, uiTort2b, uiTort3b, uiTort4b, uiTort5b,
    uiTort1m, uiTort2m, uiTort3m, uiTort4m, uiTort5m,

    -- ** Envelope follower
    uiFowler',
    uiFowler1, uiFowler2, uiFowler3, uiFowler4, uiFowler5,

    -- ** Flanger
    uiFlan', uiFlan1, uiFlan2, uiFlan3, uiFlan4, uiFlan5,

    -- ** Phaser
    uiPhasy', uiPhasy1, uiPhasy2, uiPhasy3, uiPhasy4, uiPhasy5,

    -- ** Chorus
    uiChory', uiChory1, uiChory2, uiChory3, uiChory4, uiChory5,

    -- ** Auto Pan
    uiOscPany', uiTriPany', uiSqrPany',
    uiOscPany1, uiOscPany2, uiOscPany3, uiOscPany4, uiOscPany5,
    uiTriPany1, uiTriPany2, uiTriPany3, uiTriPany4, uiTriPany5,
    uiSqrPany1, uiSqrPany2, uiSqrPany3, uiSqrPany4, uiSqrPany5,

    -- ** Tremolo
    uiOscTremy', uiTriTremy', uiSqrTremy',
    uiOscTremy1, uiOscTremy2, uiOscTremy3, uiOscTremy4, uiOscTremy5,
    uiTriTremy1, uiTriTremy2, uiTriTremy3, uiTriTremy4, uiTriTremy5,
    uiSqrTremy1, uiSqrTremy2, uiSqrTremy3, uiSqrTremy4, uiSqrTremy5,

    -- ** Reverse
    uiRevsy,

    -- ** LoFi
    uiCrusher,

    -- ** Ring modulation
    uiRingo', uiRingo1, uiRingo2, uiRingo3, uiRingo4, uiRingo5,

    -- ** Compressor
    -- | TODO


    -- * Misc

    -- ** Ambi guitar
    ambiGuitar
) where

import Data.Default
import Data.Text (Text)

import Csound.Typed
import Csound.Typed.Opcode(scale, expcurve)
import Csound.Typed.Gui hiding (width)

import qualified Csound.Typed.Plugins as P(
    fxAnalogDelay, fxDistortion, fxEnvelopeFollower, fxFlanger, fxLoFi,
    fxPanTrem, fxMonoTrem, fxPhaser, fxReverse, fxRingModulator, fxChorus2)

import Csound.Air.Patch(Fx, Fx1, Fx2)
import Csound.Air.Fx(Balance, DelayTime, Feedback, ToneSig, SensitivitySig,
    BaseCps, Resonance, DepthSig, RateSig, TremWaveSig, FoldoverSig, BitsReductionSig,
    DriveSig, TimeSig, WidthSig,
    rever2, pingPong', PingPongSpec(..),
    EchoGain, RandomSpreadSig,
    tapeEcho)

import Csound.Air.Live(fxBox, fxColor)
import Csound.Air.Wav(toMono)
import Csound.Air.Misc(fromMono, ambiEnv, saturator)

import qualified Data.Colour.SRGB as C


-- | Analog Delay line with low-pass filter in the feedback chain.
-- The filter adds natural decay to the echoes.
--
-- > adele mixRatio delayTime feedback toneRatio ain
--
-- Note that the center frequency of the filter is measured in normalized units (form 0  to 1).
adele :: Sigs a => Balance -> DelayTime -> Feedback -> ToneSig -> a -> a
adele :: forall a. Sigs a => Sig -> Sig -> Sig -> Sig -> a -> a
adele Sig
kmix Sig
kdelay Sig
kfback Sig
ktone = (Sig -> Sig) -> a -> a
forall a. SigSpace a => (Sig -> Sig) -> a -> a
mapSig ((Sig -> Sig) -> a -> a) -> (Sig -> Sig) -> a -> a
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig -> Sig -> Sig
P.fxAnalogDelay Sig
kmix Sig
kdelay Sig
kfback Sig
ktone

size1, size2, size3, size4, size5 :: Fractional a => a

size1 :: forall a. Fractional a => a
size1 = a
0.1
size2 :: forall a. Fractional a => a
size2 = a
0.25
size3 :: forall a. Fractional a => a
size3 = a
0.5
size4 :: forall a. Fractional a => a
size4 = a
0.75
size5 :: forall a. Fractional a => a
size5 = a
0.95

-- | Distortion unit with low-pass filter.
--
-- > tort driveLevel toneRatio ain
--
-- Note that the center frequency of the filter is measured in normalized units (form 0  to 1).
tort :: Sigs a => DriveSig -> ToneSig -> a -> a
tort :: forall a. Sigs a => Sig -> Sig -> a -> a
tort Sig
kdrive Sig
ktone = (Sig -> Sig) -> a -> a
forall a. SigSpace a => (Sig -> Sig) -> a -> a
mapSig ((Sig -> Sig) -> a -> a) -> (Sig -> Sig) -> a -> a
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig -> Sig
P.fxDistortion Sig
1 Sig
kdrive Sig
ktone

-- | Envelope follower.
--
-- > fowler sensitivity baseFrequencyRatio resonance ain
--
-- Arguments:
--
-- * @sensitivity        @ --  sensitivity of the envelope follower (suggested range: 0 to 1)
--
-- * @baseFrequencyRatio @ --  base frequency of the filter before modulation by the input dynamics (range: 0 to 1)
--
-- * @resonance          @ --  resonance of the lowpass filter (suggested range: 0 to 1)
fowler :: Sigs a => SensitivitySig -> BaseCps -> Resonance -> a -> a
fowler :: forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
fowler Sig
ksens Sig
kbaseFreq Sig
kreson = (Sig -> Sig) -> a -> a
forall a. SigSpace a => (Sig -> Sig) -> a -> a
mapSig ((Sig -> Sig) -> a -> a) -> (Sig -> Sig) -> a -> a
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig -> Sig
P.fxEnvelopeFollower Sig
ksens Sig
kbaseFreq (Sig
0.99 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
kreson)

-- | An effect that reverses an audio stream in chunks
--
-- > revsy time
--
-- @time@ -- the size of the chunck in seconds.
revsy :: Sigs a => TimeSig -> a -> a
revsy :: forall a. Sigs a => Sig -> a -> a
revsy Sig
ktime = (Sig -> Sig) -> a -> a
forall a. SigSpace a => (Sig -> Sig) -> a -> a
mapSig ((Sig -> Sig) -> a -> a) -> (Sig -> Sig) -> a -> a
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
P.fxReverse Sig
ktime


-- | A flanger effect following the typical design of a so called 'stomp box'
--
-- >  flan rate depth delayTime feedback ain =
--
-- Arguments
--
-- * @rate      @ --  rate control of the lfo of the effect *NOT IN HERTZ* (range 0 to 1)
--
-- * @depth     @ --  depth of the lfo of the effect (range 0 to 1)
--
-- * @delayTime @ --  static delay offset of the flanging effect (range 0 to 1)
--
-- * @feedback  @ --  feedback and therefore intensity of the effect (range 0 to 1)
--
-- * @ain       @ --  input audio to which the flanging effect will be applied
flan :: Sigs a => RateSig -> DepthSig -> DelayTime -> Feedback -> a -> a
flan :: forall a. Sigs a => Sig -> Sig -> Sig -> Sig -> a -> a
flan Sig
krate Sig
kdepth Sig
kdelay Sig
kfback = (Sig -> Sig) -> a -> a
forall a. SigSpace a => (Sig -> Sig) -> a -> a
mapSig ((Sig -> Sig) -> a -> a) -> (Sig -> Sig) -> a -> a
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig -> Sig -> Sig
P.fxFlanger Sig
krate Sig
kdepth Sig
kdelay Sig
kfback


-- | Phaser
--
-- An phase shifting effect that mimics the design of a so called 'stomp box'
--
-- > phasy rate depth freq fback ain
--
-- Arguments:
--
-- * @rate  @ --  rate of lfo of the effect (range 0 to 1)
--
-- * @depth @ --  depth of lfo of the effect (range 0 to 1)
--
-- * @freq  @ --  centre frequency of the phase shifting effect in octaves (suggested range 0 to 1)
--
-- * @fback @ --  feedback and therefore intensity of the effect (range 0 to 1)
--
-- * @ain   @ --  input audio to be pitch shifted
phasy :: Sigs a => RateSig -> DepthSig -> BaseCps -> Feedback -> a -> a
phasy :: forall a. Sigs a => Sig -> Sig -> Sig -> Sig -> a -> a
phasy Sig
krate Sig
kdepth Sig
cps Sig
kfback = (Sig -> Sig) -> a -> a
forall a. SigSpace a => (Sig -> Sig) -> a -> a
mapSig ((Sig -> Sig) -> a -> a) -> (Sig -> Sig) -> a -> a
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig -> Sig -> Sig
P.fxPhaser Sig
krate Sig
kdepth (Sig
6 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
cps) Sig
kfback

-- | LoFi (Bit Crusher)
--
-- 'Low Fidelity' distorting effects of bit reduction and downsampling (foldover)
--
-- > crusher  bits fold ain = ...
--
-- Arguments
--
-- * @bits  @ --  bit depth reduction (range 0 to 1)
--
-- * @fold  @ --  amount of foldover (range 0 to 1)
--
-- * @ain   @ --  input audio to have low fidelity distortion effects applied
crusher :: Sigs a => BitsReductionSig -> FoldoverSig -> a -> a
crusher :: forall a. Sigs a => Sig -> Sig -> a -> a
crusher Sig
kbits Sig
kfold = (Sig -> Sig) -> a -> a
forall a. SigSpace a => (Sig -> Sig) -> a -> a
mapSig ((Sig -> Sig) -> a -> a) -> (Sig -> Sig) -> a -> a
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig
P.fxLoFi (Sig
0.6 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
kbits) Sig
kfold

-- | Stereo Chorus
--
-- A stereo chorus effect
--
-- > chory rate depth width (ainLeft, ainRight)
--
-- Arguments
--
-- * @rate  @ --  rate control of the lfo of the effect *NOT IN HERTZ* (range 0 to 1)
--
-- * @depth @ --  depth of the lfo of the effect (range 0 to 1)
--
-- * @width @ --  width of stereo widening (range 0 to 1)
--
-- * @ainX  @ --  input stereo signal
chory :: RateSig -> DepthSig -> WidthSig -> Sig2 -> Sig2
chory :: Sig -> Sig -> Sig -> Sig2 -> Sig2
chory Sig
krate Sig
kdepth Sig
kwidth Sig2
ain = Sig -> Sig -> Sig -> Sig2 -> Sig2
P.fxChorus2 Sig
krate Sig
kdepth Sig
kwidth Sig2
ain


-- | Auto pan
--
-- > pany wave rate depth ain
--
-- ; Arguments:
--
-- * @wave  @ --  waveform used by the lfo (0=sine 1=triangle 2=square)
--
-- * @rate  @ --  rate control of the lfo of the effect *NOT IN HERTZ* (range 0 to 1)
--
-- * @depth @ --  depth of the lfo of the effect (range 0 to 1)
--
-- * @ain   @ --  input stereo audio
pany :: TremWaveSig -> DepthSig -> RateSig -> Sig2 -> Sig2
pany :: Sig -> Sig -> Sig -> Sig2 -> Sig2
pany Sig
tremWave Sig
kdepth Sig
krate = Sig -> Sig -> Sig -> Sig -> Sig2 -> Sig2
P.fxPanTrem Sig
kdepth Sig
krate Sig
0 Sig
tremWave

-- | Sine auto pan
--
-- > oscPany = pany 0
oscPany ::DepthSig -> RateSig -> Sig2 -> Sig2
oscPany :: Sig -> Sig -> Sig2 -> Sig2
oscPany = Sig -> Sig -> Sig -> Sig2 -> Sig2
pany Sig
0

-- | Triangle auto pan
--
-- > triPany = pany 1
triPany ::DepthSig -> RateSig -> Sig2 -> Sig2
triPany :: Sig -> Sig -> Sig2 -> Sig2
triPany = Sig -> Sig -> Sig -> Sig2 -> Sig2
pany Sig
1

-- | Square auto pan
--
-- > sqrPany = pany 2
sqrPany ::DepthSig -> RateSig -> Sig2 -> Sig2
sqrPany :: Sig -> Sig -> Sig2 -> Sig2
sqrPany = Sig -> Sig -> Sig -> Sig2 -> Sig2
pany Sig
2


-- | Tremolo
--
-- tremolo effect
--
-- > tremy wave rate depth ain
--
-- ; Arguments:
--
-- * @wave  @ --  waveform used by the lfo (0=sine 1=triangle 2=square)
--
-- * @rate  @ --  rate control of the lfo of the effect *NOT IN HERTZ* (range 0 to 1)
--
-- * @depth @ --  depth of the lfo of the effect (range 0 to 1)
--
-- * @ain   @ --  input stereo audio
tremy :: Sigs a => TremWaveSig -> DepthSig -> RateSig -> a -> a
tremy :: forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
tremy Sig
tremWave Sig
kdepth Sig
krate = (Sig -> Sig) -> a -> a
forall a. SigSpace a => (Sig -> Sig) -> a -> a
mapSig ((Sig -> Sig) -> a -> a) -> (Sig -> Sig) -> a -> a
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig -> Sig
P.fxMonoTrem Sig
kdepth Sig
krate Sig
tremWave

-- | Sine tremolo
--
-- > oscTremy = tremy 0
oscTremy :: Sigs a => DepthSig -> RateSig -> a -> a
oscTremy :: forall a. Sigs a => Sig -> Sig -> a -> a
oscTremy = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
tremy Sig
0

-- | Triangle tremolo
--
-- > triTremy = tremy 1
triTremy :: Sigs a => DepthSig -> RateSig -> a -> a
triTremy :: forall a. Sigs a => Sig -> Sig -> a -> a
triTremy = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
tremy Sig
1

-- | Square tremolo
--
-- > sqrTremy = tremy 2
sqrTremy :: Sigs a => DepthSig -> RateSig -> a -> a
sqrTremy :: forall a. Sigs a => Sig -> Sig -> a -> a
sqrTremy = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
tremy Sig
2

-- ringo

type EnvelopeModSig = Sig

-- | RingModulator
--
-- An ring modulating effect with an envelope follower
--
-- > ringo balance rate envelopeMod ain
--
-- * @balance     @  --  dry / wet mix of the output signal (range 0 to 1)
-- ; @rate        @  --  frequency of thew ring modulator *NOT IN HERTZ* (range 0 to 1)
-- ; @envelopeMod @  --  amount of dynamic envelope following modulation of frequency (range 0 to 1)
-- * @ain         @  --  input audio to be pitch shifted
ringo :: Sigs a => Balance -> RateSig -> EnvelopeModSig -> a -> a
ringo :: forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
ringo Sig
balance Sig
rate Sig
envelopeMod = (Sig -> Sig) -> a -> a
forall a. SigSpace a => (Sig -> Sig) -> a -> a
mapSig ((Sig -> Sig) -> a -> a) -> (Sig -> Sig) -> a -> a
forall a b. (a -> b) -> a -> b
$ \Sig
ain -> Sig -> Sig -> Sig -> Sig -> Sig
P.fxRingModulator Sig
ain Sig
balance Sig
rate Sig
envelopeMod

---------------------------------------------------------------------
-- Presets

-- Analog Delay

adeleBy :: Sigs a => ToneSig -> Feedback -> Balance -> DelayTime -> a -> a
adeleBy :: forall a. Sigs a => Sig -> Sig -> Sig -> Sig -> a -> a
adeleBy Sig
tone Sig
size Sig
balance Sig
delTime = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> Sig -> a -> a
adele Sig
balance Sig
delTime Sig
size Sig
tone

adeleBy_ :: Sigs a => Feedback -> Balance -> DelayTime -> a -> a
adeleBy_ :: forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
adeleBy_ = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> Sig -> a -> a
adeleBy Sig
0.5

adele1, adele2, adele3, adele4, adele5 :: Sigs a => Balance -> DelayTime -> a -> a

adele1 :: forall a. Sigs a => Sig -> Sig -> a -> a
adele1 = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
adeleBy_ Sig
forall a. Fractional a => a
size1
adele2 :: forall a. Sigs a => Sig -> Sig -> a -> a
adele2 = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
adeleBy_ Sig
forall a. Fractional a => a
size2
adele3 :: forall a. Sigs a => Sig -> Sig -> a -> a
adele3 = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
adeleBy_ Sig
forall a. Fractional a => a
size3
adele4 :: forall a. Sigs a => Sig -> Sig -> a -> a
adele4 = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
adeleBy_ Sig
forall a. Fractional a => a
size4
adele5 :: forall a. Sigs a => Sig -> Sig -> a -> a
adele5 = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
adeleBy_ Sig
forall a. Fractional a => a
size5

adeleByB :: Sigs a => Feedback -> Balance -> DelayTime -> a -> a
adeleByB :: forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
adeleByB = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> Sig -> a -> a
adeleBy Sig
0.8

adele1b, adele2b, adele3b, adele4b, adele5b :: Sigs a => Balance -> DelayTime -> a -> a

adele1b :: forall a. Sigs a => Sig -> Sig -> a -> a
adele1b = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
adeleByB Sig
forall a. Fractional a => a
size1
adele2b :: forall a. Sigs a => Sig -> Sig -> a -> a
adele2b = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
adeleByB Sig
forall a. Fractional a => a
size2
adele3b :: forall a. Sigs a => Sig -> Sig -> a -> a
adele3b = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
adeleByB Sig
forall a. Fractional a => a
size3
adele4b :: forall a. Sigs a => Sig -> Sig -> a -> a
adele4b = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
adeleByB Sig
forall a. Fractional a => a
size4
adele5b :: forall a. Sigs a => Sig -> Sig -> a -> a
adele5b = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
adeleByB Sig
forall a. Fractional a => a
size5

adeleByM :: Sigs a => Feedback -> Balance -> DelayTime -> a -> a
adeleByM :: forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
adeleByM = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> Sig -> a -> a
adeleBy Sig
0.2

adele1m, adele2m, adele3m, adele4m, adele5m :: Sigs a => Balance -> DelayTime -> a -> a

adele1m :: forall a. Sigs a => Sig -> Sig -> a -> a
adele1m = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
adeleByM Sig
forall a. Fractional a => a
size1
adele2m :: forall a. Sigs a => Sig -> Sig -> a -> a
adele2m = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
adeleByM Sig
forall a. Fractional a => a
size2
adele3m :: forall a. Sigs a => Sig -> Sig -> a -> a
adele3m = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
adeleByM Sig
forall a. Fractional a => a
size3
adele4m :: forall a. Sigs a => Sig -> Sig -> a -> a
adele4m = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
adeleByM Sig
forall a. Fractional a => a
size4
adele5m :: forall a. Sigs a => Sig -> Sig -> a -> a
adele5m = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
adeleByM Sig
forall a. Fractional a => a
size5

-- | magnus - simulates magnetic tape echo/delay
--
-- > magnus size feedback echoGain tone randomSpread ain
--
-- * size - how many heads in the tape
-- * feedback
-- * echo gain
-- * tone - normalized center frequency of the filter (0  to 1)
-- * randomSpread - quality of the tape (the higher - the worser)
magnus :: Sigs a => D -> DelayTime -> Feedback -> EchoGain -> ToneSig -> RandomSpreadSig -> a -> a
magnus :: forall a. Sigs a => D -> Sig -> Sig -> Sig -> Sig -> Sig -> a -> a
magnus D
size Sig
delt Sig
fb Sig
echoGain Sig
ktone Sig
randomSpread = (Sig -> Sig) -> a -> a
forall a. SigSpace a => (Sig -> Sig) -> a -> a
mapSig (D -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig
tapeEcho D
size Sig
delt Sig
fb Sig
echoGain Sig
ktone Sig
randomSpread)

-- Ping Pong delay

-- | Ping-pong delay
--
-- > pongy kmix delayTime feedback tone ain
pongy ::  Sig2s a => Balance -> DelayTime -> Feedback -> ToneSig -> WidthSig -> a -> a
pongy :: forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> Sig -> a -> a
pongy Sig
balance Sig
delTime Sig
fbk Sig
tone Sig
width = (Sig2 -> Sig2) -> a -> a
forall a. SigSpace2 a => (Sig2 -> Sig2) -> a -> a
mapSig2 (PingPongSpec -> Sig -> Sig -> Sig -> Sig2 -> Sig2
pingPong' (PingPongSpec
forall a. Default a => a
def { pingPongDamp = absTone, pingPongWidth = width }) Sig
delTime Sig
fbk Sig
balance)
    where absTone :: Sig
absTone = Sig -> Sig -> Sig -> Sig
scale (Sig -> Sig -> Sig
expcurve Sig
tone Sig
4) Sig
12000 Sig
100

pongyBy :: Sig2s a => ToneSig -> Feedback -> Balance -> DelayTime -> WidthSig -> a -> a
pongyBy :: forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> Sig -> a -> a
pongyBy Sig
tone Sig
size Sig
balance Sig
delTime Sig
width = Sig -> Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> Sig -> a -> a
pongy Sig
balance Sig
delTime Sig
size Sig
tone Sig
width

pongyBy_ :: Sig2s a => Feedback -> Balance -> DelayTime -> WidthSig -> a -> a
pongyBy_ :: forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> a -> a
pongyBy_ = Sig -> Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> Sig -> a -> a
pongyBy Sig
0.5

pongy1, pongy2, pongy3, pongy4, pongy5 :: Sig2s a => Balance -> DelayTime -> WidthSig -> a -> a

pongy1 :: forall a. Sig2s a => Sig -> Sig -> Sig -> a -> a
pongy1 = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> a -> a
pongyBy_ Sig
forall a. Fractional a => a
size1
pongy2 :: forall a. Sig2s a => Sig -> Sig -> Sig -> a -> a
pongy2 = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> a -> a
pongyBy_ Sig
forall a. Fractional a => a
size2
pongy3 :: forall a. Sig2s a => Sig -> Sig -> Sig -> a -> a
pongy3 = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> a -> a
pongyBy_ Sig
forall a. Fractional a => a
size3
pongy4 :: forall a. Sig2s a => Sig -> Sig -> Sig -> a -> a
pongy4 = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> a -> a
pongyBy_ Sig
forall a. Fractional a => a
size4
pongy5 :: forall a. Sig2s a => Sig -> Sig -> Sig -> a -> a
pongy5 = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> a -> a
pongyBy_ Sig
forall a. Fractional a => a
size5

pongyByB :: Sig2s a => Feedback -> Balance -> DelayTime -> WidthSig -> a -> a
pongyByB :: forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> a -> a
pongyByB = Sig -> Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> Sig -> a -> a
pongyBy Sig
0.8

pongy1b, pongy2b, pongy3b, pongy4b, pongy5b :: Sig2s a => Balance -> DelayTime -> WidthSig -> a -> a

pongy1b :: forall a. Sig2s a => Sig -> Sig -> Sig -> a -> a
pongy1b = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> a -> a
pongyByB Sig
forall a. Fractional a => a
size1
pongy2b :: forall a. Sig2s a => Sig -> Sig -> Sig -> a -> a
pongy2b = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> a -> a
pongyByB Sig
forall a. Fractional a => a
size2
pongy3b :: forall a. Sig2s a => Sig -> Sig -> Sig -> a -> a
pongy3b = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> a -> a
pongyByB Sig
forall a. Fractional a => a
size3
pongy4b :: forall a. Sig2s a => Sig -> Sig -> Sig -> a -> a
pongy4b = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> a -> a
pongyByB Sig
forall a. Fractional a => a
size4
pongy5b :: forall a. Sig2s a => Sig -> Sig -> Sig -> a -> a
pongy5b = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> a -> a
pongyByB Sig
forall a. Fractional a => a
size5

pongyByM :: Sig2s a => Feedback -> Balance -> DelayTime -> WidthSig -> a -> a
pongyByM :: forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> a -> a
pongyByM = Sig -> Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> Sig -> a -> a
pongyBy Sig
0.2

pongy1m, pongy2m, pongy3m, pongy4m, pongy5m :: Sig2s a => Balance -> DelayTime -> WidthSig -> a -> a

pongy1m :: forall a. Sig2s a => Sig -> Sig -> Sig -> a -> a
pongy1m = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> a -> a
pongyByM Sig
forall a. Fractional a => a
size1
pongy2m :: forall a. Sig2s a => Sig -> Sig -> Sig -> a -> a
pongy2m = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> a -> a
pongyByM Sig
forall a. Fractional a => a
size2
pongy3m :: forall a. Sig2s a => Sig -> Sig -> Sig -> a -> a
pongy3m = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> a -> a
pongyByM Sig
forall a. Fractional a => a
size3
pongy4m :: forall a. Sig2s a => Sig -> Sig -> Sig -> a -> a
pongy4m = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> a -> a
pongyByM Sig
forall a. Fractional a => a
size4
pongy5m :: forall a. Sig2s a => Sig -> Sig -> Sig -> a -> a
pongy5m = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> a -> a
pongyByM Sig
forall a. Fractional a => a
size5

-- Distortion

tortBy :: Sigs a => ToneSig -> DriveSig -> a -> a
tortBy :: forall a. Sigs a => Sig -> Sig -> a -> a
tortBy Sig
tone Sig
drive = Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> a -> a
tort Sig
drive Sig
tone

tortBy_ :: Sigs a => DriveSig -> a -> a
tortBy_ :: forall a. Sigs a => Sig -> a -> a
tortBy_ = Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> a -> a
tortBy Sig
0.5

tort1, tort2, tort3, tort4, tort5 :: Sigs a => a -> a

tort1 :: forall a. Sigs a => a -> a
tort1 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
tortBy_ Sig
forall a. Fractional a => a
size1
tort2 :: forall a. Sigs a => a -> a
tort2 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
tortBy_ Sig
forall a. Fractional a => a
size2
tort3 :: forall a. Sigs a => a -> a
tort3 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
tortBy_ Sig
forall a. Fractional a => a
size3
tort4 :: forall a. Sigs a => a -> a
tort4 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
tortBy_ Sig
forall a. Fractional a => a
size4
tort5 :: forall a. Sigs a => a -> a
tort5 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
tortBy_ Sig
forall a. Fractional a => a
size5

tortByB :: Sigs a => DriveSig -> a -> a
tortByB :: forall a. Sigs a => Sig -> a -> a
tortByB = Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> a -> a
tortBy Sig
0.85

tort1b, tort2b, tort3b, tort4b, tort5b :: Sigs a => a -> a

tort1b :: forall a. Sigs a => a -> a
tort1b = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
tortByB Sig
forall a. Fractional a => a
size1
tort2b :: forall a. Sigs a => a -> a
tort2b = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
tortByB Sig
forall a. Fractional a => a
size2
tort3b :: forall a. Sigs a => a -> a
tort3b = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
tortByB Sig
forall a. Fractional a => a
size3
tort4b :: forall a. Sigs a => a -> a
tort4b = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
tortByB Sig
forall a. Fractional a => a
size4
tort5b :: forall a. Sigs a => a -> a
tort5b = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
tortByB Sig
forall a. Fractional a => a
size5

tortByM :: Sigs a => DriveSig -> a -> a
tortByM :: forall a. Sigs a => Sig -> a -> a
tortByM = Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> a -> a
tortBy Sig
0.2

tort1m, tort2m, tort3m, tort4m, tort5m :: Sigs a => a -> a

tort1m :: forall a. Sigs a => a -> a
tort1m = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
tortByM Sig
forall a. Fractional a => a
size1
tort2m :: forall a. Sigs a => a -> a
tort2m = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
tortByM Sig
forall a. Fractional a => a
size2
tort3m :: forall a. Sigs a => a -> a
tort3m = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
tortByM Sig
forall a. Fractional a => a
size3
tort4m :: forall a. Sigs a => a -> a
tort4m = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
tortByM Sig
forall a. Fractional a => a
size4
tort5m :: forall a. Sigs a => a -> a
tort5m = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
tortByM Sig
forall a. Fractional a => a
size5

-- Envelope follower

fowler' :: Sigs a => Sig -> a -> a
fowler' :: forall a. Sigs a => Sig -> a -> a
fowler' Sig
size = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
fowler Sig
size Sig
size Sig
size

fowler1, fowler2, fowler3, fowler4, fowler5 :: Sigs a => a -> a

fowler1 :: forall a. Sigs a => a -> a
fowler1 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
fowler' Sig
forall a. Fractional a => a
size1
fowler2 :: forall a. Sigs a => a -> a
fowler2 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
fowler' Sig
forall a. Fractional a => a
size2
fowler3 :: forall a. Sigs a => a -> a
fowler3 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
fowler' Sig
forall a. Fractional a => a
size3
fowler4 :: forall a. Sigs a => a -> a
fowler4 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
fowler' Sig
forall a. Fractional a => a
size4
fowler5 :: forall a. Sigs a => a -> a
fowler5 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
fowler' Sig
forall a. Fractional a => a
size5

-- Flanger

flan' :: Sigs a => Sig -> a -> a
flan' :: forall a. Sigs a => Sig -> a -> a
flan' Sig
size = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> Sig -> a -> a
flan Sig
size Sig
size Sig
size Sig
size

flan1, flan2, flan3, flan4, flan5 :: Sigs a => a -> a

flan1 :: forall a. Sigs a => a -> a
flan1 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
flan' Sig
forall a. Fractional a => a
size1
flan2 :: forall a. Sigs a => a -> a
flan2 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
flan' Sig
forall a. Fractional a => a
size2
flan3 :: forall a. Sigs a => a -> a
flan3 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
flan' Sig
forall a. Fractional a => a
size3
flan4 :: forall a. Sigs a => a -> a
flan4 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
flan' Sig
forall a. Fractional a => a
size4
flan5 :: forall a. Sigs a => a -> a
flan5 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
flan' Sig
forall a. Fractional a => a
size5

-- Phaser

-- phasy :: RateSig -> DepthSig -> BaseCps -> Feedback -> Sig -> Sig

phasy' :: Sigs a => Sig -> a -> a
phasy' :: forall a. Sigs a => Sig -> a -> a
phasy' Sig
size = Sig -> Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> Sig -> a -> a
phasy Sig
size Sig
size Sig
size Sig
size

phasy1, phasy2, phasy3, phasy4, phasy5 :: Sigs a => a -> a

phasy1 :: forall a. Sigs a => a -> a
phasy1 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
phasy' Sig
forall a. Fractional a => a
size1
phasy2 :: forall a. Sigs a => a -> a
phasy2 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
phasy' Sig
forall a. Fractional a => a
size2
phasy3 :: forall a. Sigs a => a -> a
phasy3 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
phasy' Sig
forall a. Fractional a => a
size3
phasy4 :: forall a. Sigs a => a -> a
phasy4 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
phasy' Sig
forall a. Fractional a => a
size4
phasy5 :: forall a. Sigs a => a -> a
phasy5 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
phasy' Sig
forall a. Fractional a => a
size5

-- Chorus

chory' :: Sig2s a => Sig -> a -> a
chory' :: forall a. Sig2s a => Sig -> a -> a
chory' Sig
size = (Sig2 -> Sig2) -> a -> a
forall a. SigSpace2 a => (Sig2 -> Sig2) -> a -> a
mapSig2 (Sig -> Sig -> Sig -> Sig2 -> Sig2
chory Sig
size Sig
size Sig
size)

chory1, chory2, chory3, chory4, chory5 :: Sig2s a => a -> a

chory1 :: forall a. Sig2s a => a -> a
chory1 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
chory' Sig
forall a. Fractional a => a
size1
chory2 :: forall a. Sig2s a => a -> a
chory2 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
chory' Sig
forall a. Fractional a => a
size2
chory3 :: forall a. Sig2s a => a -> a
chory3 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
chory' Sig
forall a. Fractional a => a
size3
chory4 :: forall a. Sig2s a => a -> a
chory4 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
chory' Sig
forall a. Fractional a => a
size4
chory5 :: forall a. Sig2s a => a -> a
chory5 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
chory' Sig
forall a. Fractional a => a
size5

-- Auto Pan

-- pany :: TremWaveSig -> DepthSig -> RateSig -> Sig2 -> Sig2

oscPany' :: Sig2s a => Sig -> a -> a
oscPany' :: forall a. Sig2s a => Sig -> a -> a
oscPany' Sig
size = (Sig2 -> Sig2) -> a -> a
forall a. SigSpace2 a => (Sig2 -> Sig2) -> a -> a
mapSig2 (Sig -> Sig -> Sig2 -> Sig2
oscPany Sig
size Sig
size)

oscPany1, oscPany2, oscPany3, oscPany4, oscPany5 :: Sig2s a => a -> a

oscPany1 :: forall a. Sig2s a => a -> a
oscPany1 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
oscPany' Sig
forall a. Fractional a => a
size1
oscPany2 :: forall a. Sig2s a => a -> a
oscPany2 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
oscPany' Sig
forall a. Fractional a => a
size2
oscPany3 :: forall a. Sig2s a => a -> a
oscPany3 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
oscPany' Sig
forall a. Fractional a => a
size3
oscPany4 :: forall a. Sig2s a => a -> a
oscPany4 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
oscPany' Sig
forall a. Fractional a => a
size4
oscPany5 :: forall a. Sig2s a => a -> a
oscPany5 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
oscPany' Sig
forall a. Fractional a => a
size5

triPany' :: Sig2s a => Sig -> a -> a
triPany' :: forall a. Sig2s a => Sig -> a -> a
triPany' Sig
size = (Sig2 -> Sig2) -> a -> a
forall a. SigSpace2 a => (Sig2 -> Sig2) -> a -> a
mapSig2 (Sig -> Sig -> Sig2 -> Sig2
triPany Sig
size Sig
size)

triPany1, triPany2, triPany3, triPany4, triPany5 :: Sig2s a => a -> a

triPany1 :: forall a. Sig2s a => a -> a
triPany1 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
triPany' Sig
forall a. Fractional a => a
size1
triPany2 :: forall a. Sig2s a => a -> a
triPany2 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
triPany' Sig
forall a. Fractional a => a
size2
triPany3 :: forall a. Sig2s a => a -> a
triPany3 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
triPany' Sig
forall a. Fractional a => a
size3
triPany4 :: forall a. Sig2s a => a -> a
triPany4 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
triPany' Sig
forall a. Fractional a => a
size4
triPany5 :: forall a. Sig2s a => a -> a
triPany5 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
triPany' Sig
forall a. Fractional a => a
size5

sqrPany' :: Sig2s a => Sig -> a -> a
sqrPany' :: forall a. Sig2s a => Sig -> a -> a
sqrPany' Sig
size = (Sig2 -> Sig2) -> a -> a
forall a. SigSpace2 a => (Sig2 -> Sig2) -> a -> a
mapSig2 (Sig -> Sig -> Sig2 -> Sig2
sqrPany Sig
size Sig
size)

sqrPany1, sqrPany2, sqrPany3, sqrPany4, sqrPany5 :: Sig2s a => a -> a

sqrPany1 :: forall a. Sig2s a => a -> a
sqrPany1 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
sqrPany' Sig
forall a. Fractional a => a
size1
sqrPany2 :: forall a. Sig2s a => a -> a
sqrPany2 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
sqrPany' Sig
forall a. Fractional a => a
size2
sqrPany3 :: forall a. Sig2s a => a -> a
sqrPany3 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
sqrPany' Sig
forall a. Fractional a => a
size3
sqrPany4 :: forall a. Sig2s a => a -> a
sqrPany4 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
sqrPany' Sig
forall a. Fractional a => a
size4
sqrPany5 :: forall a. Sig2s a => a -> a
sqrPany5 = Sig -> a -> a
forall a. Sig2s a => Sig -> a -> a
sqrPany' Sig
forall a. Fractional a => a
size5

-- Tremolo

oscTremy' :: Sigs a => Sig -> a -> a
oscTremy' :: forall a. Sigs a => Sig -> a -> a
oscTremy' Sig
size = Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> a -> a
oscTremy Sig
size Sig
size

oscTremy1, oscTremy2, oscTremy3, oscTremy4, oscTremy5 :: Sigs a => a -> a

oscTremy1 :: forall a. Sigs a => a -> a
oscTremy1 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
oscTremy' Sig
forall a. Fractional a => a
size1
oscTremy2 :: forall a. Sigs a => a -> a
oscTremy2 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
oscTremy' Sig
forall a. Fractional a => a
size2
oscTremy3 :: forall a. Sigs a => a -> a
oscTremy3 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
oscTremy' Sig
forall a. Fractional a => a
size3
oscTremy4 :: forall a. Sigs a => a -> a
oscTremy4 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
oscTremy' Sig
forall a. Fractional a => a
size4
oscTremy5 :: forall a. Sigs a => a -> a
oscTremy5 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
oscTremy' Sig
forall a. Fractional a => a
size5

triTremy' :: Sigs a => Sig -> a -> a
triTremy' :: forall a. Sigs a => Sig -> a -> a
triTremy' Sig
size = Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> a -> a
triTremy Sig
size Sig
size

triTremy1, triTremy2, triTremy3, triTremy4, triTremy5 :: Sigs a => a -> a

triTremy1 :: forall a. Sigs a => a -> a
triTremy1 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
triTremy' Sig
forall a. Fractional a => a
size1
triTremy2 :: forall a. Sigs a => a -> a
triTremy2 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
triTremy' Sig
forall a. Fractional a => a
size2
triTremy3 :: forall a. Sigs a => a -> a
triTremy3 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
triTremy' Sig
forall a. Fractional a => a
size3
triTremy4 :: forall a. Sigs a => a -> a
triTremy4 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
triTremy' Sig
forall a. Fractional a => a
size4
triTremy5 :: forall a. Sigs a => a -> a
triTremy5 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
triTremy' Sig
forall a. Fractional a => a
size5


sqrTremy' :: Sigs a => Sig -> a -> a
sqrTremy' :: forall a. Sigs a => Sig -> a -> a
sqrTremy' Sig
size = Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> a -> a
sqrTremy Sig
size Sig
size

sqrTremy1, sqrTremy2, sqrTremy3, sqrTremy4, sqrTremy5 :: Sigs a => a -> a

sqrTremy1 :: forall a. Sigs a => a -> a
sqrTremy1 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
sqrTremy' Sig
forall a. Fractional a => a
size1
sqrTremy2 :: forall a. Sigs a => a -> a
sqrTremy2 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
sqrTremy' Sig
forall a. Fractional a => a
size2
sqrTremy3 :: forall a. Sigs a => a -> a
sqrTremy3 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
sqrTremy' Sig
forall a. Fractional a => a
size3
sqrTremy4 :: forall a. Sigs a => a -> a
sqrTremy4 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
sqrTremy' Sig
forall a. Fractional a => a
size4
sqrTremy5 :: forall a. Sigs a => a -> a
sqrTremy5 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
sqrTremy' Sig
forall a. Fractional a => a
size5

-- Ring modulation

ringo' :: Sigs a => Sig -> a -> a
ringo' :: forall a. Sigs a => Sig -> a -> a
ringo' Sig
size = Sig -> Sig -> Sig -> a -> a
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
ringo Sig
size Sig
size Sig
size

ringo1, ringo2, ringo3, ringo4, ringo5 :: Sigs a => a -> a

ringo1 :: forall a. Sigs a => a -> a
ringo1 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
ringo' Sig
forall a. Fractional a => a
size1
ringo2 :: forall a. Sigs a => a -> a
ringo2 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
ringo' Sig
forall a. Fractional a => a
size2
ringo3 :: forall a. Sigs a => a -> a
ringo3 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
ringo' Sig
forall a. Fractional a => a
size3
ringo4 :: forall a. Sigs a => a -> a
ringo4 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
ringo' Sig
forall a. Fractional a => a
size4
ringo5 :: forall a. Sigs a => a -> a
ringo5 = Sig -> a -> a
forall a. Sigs a => Sig -> a -> a
ringo' Sig
forall a. Fractional a => a
size5

----------------------------------------------------------
-- UI

setAll :: Double -> [Text] -> [(Text, Double)]
setAll :: Double -> [Text] -> [(Text, Double)]
setAll Double
size [Text]
names = (Text -> (Text, Double)) -> [Text] -> [(Text, Double)]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Text
s -> (Text
s, Double
size)) [Text]
names


-- colors
tortColor, fowlerColor, adeleColor, pongColor, flanColor, revsyColor, phasyColor,
  crusherColor, choryColor, panyColor, tremyColor, ringoColor, reverbColor :: String

tortColor :: String
tortColor = String
red
fowlerColor :: String
fowlerColor = String
maroon
adeleColor :: String
adeleColor = String
blue
pongColor :: String
pongColor = String
orange
flanColor :: String
flanColor = String
purple
revsyColor :: String
revsyColor = String
lime
phasyColor :: String
phasyColor = String
yellow
crusherColor :: String
crusherColor = String
fuchsia
choryColor :: String
choryColor = String
navy
panyColor :: String
panyColor = String
aqua
tremyColor :: String
tremyColor = String
green
ringoColor :: String
ringoColor = String
maroon
reverbColor :: String
reverbColor = String
olive

paintTo :: String -> Source a -> Source a
paintTo :: forall a. String -> Source a -> Source a
paintTo = Color -> Source (Input a) -> Source (Input a)
forall a. Color -> Source a -> Source a
fxColor (Color -> Source (Input a) -> Source (Input a))
-> (String -> Color)
-> String
-> Source (Input a)
-> Source (Input a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Color
forall b. (Ord b, Floating b) => String -> Colour b
C.sRGB24read

red, maroon, blue, aqua, navy, lime,  green, yellow, purple, olive, orange, fuchsia :: String

red :: String
red = String
"#FF4136"
maroon :: String
maroon = String
"#85144b"
blue :: String
blue = String
"#0074D9"
aqua :: String
aqua = String
"#7FDBFF"
navy :: String
navy = String
"#001f3f"
lime :: String
lime = String
"#01FF70"
green :: String
green = String
"#2ECC40"
yellow :: String
yellow = String
"#FFDC00"
purple :: String
purple = String
"#B10DC9"
olive :: String
olive = String
"#3D9970"
-- teal = "#39CCCC"
orange :: String
orange = String
"#FF851B"
fuchsia :: String
fuchsia = String
"#F012BE"

-- Analog Delay

uiAdeleBy :: Sigs a => Double -> Double -> Double -> Double -> Source (Fx a)
uiAdeleBy :: forall a.
Sigs a =>
Double -> Double -> Double -> Double -> Source (Fx a)
uiAdeleBy Double
initTone Double
initFeedback Double
initBalance Double
initDelayTime = ((Sig -> SE Sig) -> Input (Fx a))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> Source a -> Source b
mapSource (Sig -> SE Sig) -> Input (Fx a)
forall a. BindSig a => (Sig -> SE Sig) -> a -> SE a
bindSig (Source (Sig -> SE Sig) -> Source (Input (Fx a)))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ String -> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a. String -> Source a -> Source a
paintTo String
adeleColor (Source (Sig -> SE Sig) -> Source (Sig -> SE Sig))
-> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Sig -> SE Sig)
-> Bool
-> [(Text, Double)]
-> Source (Sig -> SE Sig)
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Delay" [Sig] -> Sig -> SE Sig
forall {m :: * -> *} {b}. (Monad m, Sigs b) => [Sig] -> b -> m b
fx Bool
True  [(Text
"balance", Double
initBalance), (Text
"del time", Double
initDelayTime), (Text
"fbk", Double
initFeedback), (Text
"tone", Double
initTone)]
    where
        fx :: [Sig] -> b -> m b
fx [Sig
balance, Sig
delayTime, Sig
feedback, Sig
tone] = b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (b -> m b) -> (b -> b) -> b -> m b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig -> Sig -> b -> b
forall a. Sigs a => Sig -> Sig -> Sig -> Sig -> a -> a
adele Sig
balance Sig
delayTime Sig
feedback Sig
tone
        fx [Sig]
_                                    = b -> m b
forall a. HasCallStack => a
undefined

uiAdeleBy_ :: Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleBy_ :: forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleBy_ = Double -> Double -> Double -> Double -> Source (Fx a)
forall a.
Sigs a =>
Double -> Double -> Double -> Double -> Source (Fx a)
uiAdeleBy Double
0.5

uiAdele1, uiAdele2, uiAdele3, uiAdele4, uiAdele5 :: Sigs a => Double -> Double -> Source (Fx a)

uiAdele1 :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiAdele1 = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleBy_ Double
forall a. Fractional a => a
size1
uiAdele2 :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiAdele2 = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleBy_ Double
forall a. Fractional a => a
size2
uiAdele3 :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiAdele3 = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleBy_ Double
forall a. Fractional a => a
size3
uiAdele4 :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiAdele4 = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleBy_ Double
forall a. Fractional a => a
size4
uiAdele5 :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiAdele5 = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleBy_ Double
forall a. Fractional a => a
size5

uiAdeleByB :: Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleByB :: forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleByB = Double -> Double -> Double -> Double -> Source (Fx a)
forall a.
Sigs a =>
Double -> Double -> Double -> Double -> Source (Fx a)
uiAdeleBy Double
0.8

uiAdele1b, uiAdele2b, uiAdele3b, uiAdele4b, uiAdele5b :: Sigs a => Double -> Double -> Source (Fx a)

uiAdele1b :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiAdele1b = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleByB Double
forall a. Fractional a => a
size1
uiAdele2b :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiAdele2b = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleByB Double
forall a. Fractional a => a
size2
uiAdele3b :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiAdele3b = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleByB Double
forall a. Fractional a => a
size3
uiAdele4b :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiAdele4b = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleByB Double
forall a. Fractional a => a
size4
uiAdele5b :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiAdele5b = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleByB Double
forall a. Fractional a => a
size5

uiAdeleByM :: Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleByM :: forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleByM = Double -> Double -> Double -> Double -> Source (Fx a)
forall a.
Sigs a =>
Double -> Double -> Double -> Double -> Source (Fx a)
uiAdeleBy Double
0.2

uiAdele1m, uiAdele2m, uiAdele3m, uiAdele4m, uiAdele5m :: Sigs a => Double -> Double -> Source (Fx a)

uiAdele1m :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiAdele1m = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleByM Double
forall a. Fractional a => a
size1
uiAdele2m :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiAdele2m = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleByM Double
forall a. Fractional a => a
size2
uiAdele3m :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiAdele3m = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleByM Double
forall a. Fractional a => a
size3
uiAdele4m :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiAdele4m = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleByM Double
forall a. Fractional a => a
size4
uiAdele5m :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiAdele5m = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiAdeleByM Double
forall a. Fractional a => a
size5

-- Tape echo

uiMagnus :: Sigs a => Int -> Double -> Double -> Double -> Double -> Double -> Source (Fx a)
uiMagnus :: forall a.
Sigs a =>
Int
-> Double -> Double -> Double -> Double -> Double -> Source (Fx a)
uiMagnus Int
size Double
initDelayTime Double
initFeedback Double
initEchoGain Double
initTone Double
initSpread  = ((Sig -> SE Sig) -> Input (Fx a))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> Source a -> Source b
mapSource (Sig -> SE Sig) -> Input (Fx a)
forall a. BindSig a => (Sig -> SE Sig) -> a -> SE a
bindSig (Source (Sig -> SE Sig) -> Source (Input (Fx a)))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ String -> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a. String -> Source a -> Source a
paintTo String
adeleColor (Source (Sig -> SE Sig) -> Source (Sig -> SE Sig))
-> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Sig -> SE Sig)
-> Bool
-> [(Text, Double)]
-> Source (Sig -> SE Sig)
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Tape echo" [Sig] -> Sig -> SE Sig
forall {m :: * -> *} {b}. (Monad m, Sigs b) => [Sig] -> b -> m b
fx Bool
True [(Text
"del time", Double
initDelayTime), (Text
"fbk", Double
initFeedback), (Text
"echo gain", Double
initEchoGain), (Text
"tone", Double
initTone), (Text
"tape qty", Double
initSpread)]
    where
        fx :: [Sig] -> b -> m b
fx [Sig
delayTime, Sig
feedback, Sig
echoGain, Sig
tone, Sig
spread] = b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (b -> m b) -> (b -> b) -> b -> m b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> Sig -> Sig -> Sig -> Sig -> Sig -> b -> b
forall a. Sigs a => D -> Sig -> Sig -> Sig -> Sig -> Sig -> a -> a
magnus (Int -> D
int Int
size) Sig
delayTime Sig
feedback Sig
echoGain Sig
tone Sig
spread
        fx [Sig]
_                                             = b -> m b
forall a. HasCallStack => a
undefined

-- Ping-pong delay

uiPongyBy :: Sigs a => Double -> Double -> Double -> Double -> Double -> Source (Fx a)
uiPongyBy :: forall a.
Sigs a =>
Double -> Double -> Double -> Double -> Double -> Source (Fx a)
uiPongyBy Double
initTone Double
initWidth Double
initFeedback Double
initBalance Double
initDelayTime = ((Sig -> SE Sig) -> Input (Fx a))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> Source a -> Source b
mapSource (Sig -> SE Sig) -> Input (Fx a)
forall a. BindSig a => (Sig -> SE Sig) -> a -> SE a
bindSig (Source (Sig -> SE Sig) -> Source (Input (Fx a)))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ String -> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a. String -> Source a -> Source a
paintTo String
pongColor (Source (Sig -> SE Sig) -> Source (Sig -> SE Sig))
-> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Sig -> SE Sig)
-> Bool
-> [(Text, Double)]
-> Source (Sig -> SE Sig)
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Ping-pong" [Sig] -> Sig -> SE Sig
forall {m :: * -> *} {b}. (Monad m, Sig2s b) => [Sig] -> b -> m b
fx Bool
True  [(Text
"balance", Double
initBalance), (Text
"del time", Double
initDelayTime), (Text
"fbk", Double
initFeedback), (Text
"tone", Double
initTone), (Text
"width", Double
initWidth)]
    where
        fx :: [Sig] -> b -> m b
fx [Sig
balance, Sig
delayTime, Sig
feedback, Sig
tone, Sig
width] = b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (b -> m b) -> (b -> b) -> b -> m b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig -> Sig -> Sig -> b -> b
forall a. Sig2s a => Sig -> Sig -> Sig -> Sig -> Sig -> a -> a
pongy Sig
balance Sig
delayTime Sig
feedback Sig
tone Sig
width
        fx [Sig]
_                                           = b -> m b
forall a. HasCallStack => a
undefined

defWidth :: Double
defWidth :: Double
defWidth = Double
0.7

uiPongyBy_ :: Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyBy_ :: forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyBy_ = Double -> Double -> Double -> Double -> Double -> Source (Fx a)
forall a.
Sigs a =>
Double -> Double -> Double -> Double -> Double -> Source (Fx a)
uiPongyBy Double
0.5 Double
defWidth

uiPongy1, uiPongy2, uiPongy3, uiPongy4, uiPongy5 :: Sigs a => Double -> Double -> Source (Fx a)

uiPongy1 :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiPongy1 = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyBy_ Double
forall a. Fractional a => a
size1
uiPongy2 :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiPongy2 = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyBy_ Double
forall a. Fractional a => a
size2
uiPongy3 :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiPongy3 = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyBy_ Double
forall a. Fractional a => a
size3
uiPongy4 :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiPongy4 = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyBy_ Double
forall a. Fractional a => a
size4
uiPongy5 :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiPongy5 = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyBy_ Double
forall a. Fractional a => a
size5

uiPongyByB :: Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyByB :: forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyByB = Double -> Double -> Double -> Double -> Double -> Source (Fx a)
forall a.
Sigs a =>
Double -> Double -> Double -> Double -> Double -> Source (Fx a)
uiPongyBy Double
0.8 Double
defWidth

uiPongy1b, uiPongy2b, uiPongy3b, uiPongy4b, uiPongy5b :: Sigs a => Double -> Double -> Source (Fx a)

uiPongy1b :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiPongy1b = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyByB Double
forall a. Fractional a => a
size1
uiPongy2b :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiPongy2b = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyByB Double
forall a. Fractional a => a
size2
uiPongy3b :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiPongy3b = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyByB Double
forall a. Fractional a => a
size3
uiPongy4b :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiPongy4b = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyByB Double
forall a. Fractional a => a
size4
uiPongy5b :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiPongy5b = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyByB Double
forall a. Fractional a => a
size5

uiPongyByM :: Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyByM :: forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyByM = Double -> Double -> Double -> Double -> Double -> Source (Fx a)
forall a.
Sigs a =>
Double -> Double -> Double -> Double -> Double -> Source (Fx a)
uiPongyBy Double
0.2 Double
defWidth

uiPongy1m, uiPongy2m, uiPongy3m, uiPongy4m, uiPongy5m :: Sigs a => Double -> Double -> Source (Fx a)

uiPongy1m :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiPongy1m = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyByM Double
forall a. Fractional a => a
size1
uiPongy2m :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiPongy2m = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyByM Double
forall a. Fractional a => a
size2
uiPongy3m :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiPongy3m = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyByM Double
forall a. Fractional a => a
size3
uiPongy4m :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiPongy4m = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyByM Double
forall a. Fractional a => a
size4
uiPongy5m :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiPongy5m = Double -> Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Double -> Source (Fx a)
uiPongyByM Double
forall a. Fractional a => a
size5

-- Distortion

uiTortBy :: Sigs a => Double -> Double -> Source (Fx a)
uiTortBy :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiTortBy Double
initTone Double
initDrive = ((Sig -> SE Sig) -> Input (Fx a))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> Source a -> Source b
mapSource (Sig -> SE Sig) -> Input (Fx a)
forall a. BindSig a => (Sig -> SE Sig) -> a -> SE a
bindSig (Source (Sig -> SE Sig) -> Source (Input (Fx a)))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ String -> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a. String -> Source a -> Source a
paintTo String
tortColor (Source (Sig -> SE Sig) -> Source (Sig -> SE Sig))
-> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Sig -> SE Sig)
-> Bool
-> [(Text, Double)]
-> Source (Sig -> SE Sig)
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Distort" [Sig] -> Sig -> SE Sig
forall {m :: * -> *} {b}. (Monad m, Sigs b) => [Sig] -> b -> m b
fx Bool
True [(Text
"drive", Double
initDrive), (Text
"tone", Double
initTone)]
    where
        fx :: [Sig] -> b -> m b
fx [Sig
drive, Sig
tone] = b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (b -> m b) -> (b -> b) -> b -> m b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> b -> b
forall a. Sigs a => Sig -> Sig -> a -> a
tort Sig
drive Sig
tone
        fx [Sig]
_             = b -> m b
forall a. HasCallStack => a
undefined

uiTortBy_ :: Sigs a => Double -> Source (Fx a)
uiTortBy_ :: forall a. Sigs a => Double -> Source (Fx a)
uiTortBy_ = Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Source (Fx a)
uiTortBy Double
0.5

uiTort1, uiTort2, uiTort3, uiTort4, uiTort5 :: Sigs a => Source (Fx a)

uiTort1 :: forall a. Sigs a => Source (Fx a)
uiTort1 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTortBy_ Double
forall a. Fractional a => a
size1
uiTort2 :: forall a. Sigs a => Source (Fx a)
uiTort2 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTortBy_ Double
forall a. Fractional a => a
size2
uiTort3 :: forall a. Sigs a => Source (Fx a)
uiTort3 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTortBy_ Double
forall a. Fractional a => a
size3
uiTort4 :: forall a. Sigs a => Source (Fx a)
uiTort4 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTortBy_ Double
forall a. Fractional a => a
size4
uiTort5 :: forall a. Sigs a => Source (Fx a)
uiTort5 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTortBy_ Double
forall a. Fractional a => a
size5

uiTortByB :: Sigs a => Double -> Source (Fx a)
uiTortByB :: forall a. Sigs a => Double -> Source (Fx a)
uiTortByB = Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Source (Fx a)
uiTortBy Double
0.85

uiTort1b, uiTort2b, uiTort3b, uiTort4b, uiTort5b :: Sigs a => Source (Fx a)

uiTort1b :: forall a. Sigs a => Source (Fx a)
uiTort1b = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTortByB Double
forall a. Fractional a => a
size1
uiTort2b :: forall a. Sigs a => Source (Fx a)
uiTort2b = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTortByB Double
forall a. Fractional a => a
size2
uiTort3b :: forall a. Sigs a => Source (Fx a)
uiTort3b = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTortByB Double
forall a. Fractional a => a
size3
uiTort4b :: forall a. Sigs a => Source (Fx a)
uiTort4b = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTortByB Double
forall a. Fractional a => a
size4
uiTort5b :: forall a. Sigs a => Source (Fx a)
uiTort5b = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTortByB Double
forall a. Fractional a => a
size5

uiTortByM :: Sigs a => Double -> Source (Fx a)
uiTortByM :: forall a. Sigs a => Double -> Source (Fx a)
uiTortByM = Double -> Double -> Source (Fx a)
forall a. Sigs a => Double -> Double -> Source (Fx a)
uiTortBy Double
0.2

uiTort1m, uiTort2m, uiTort3m, uiTort4m, uiTort5m :: Sigs a => Source (Fx a)

uiTort1m :: forall a. Sigs a => Source (Fx a)
uiTort1m = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTortByM Double
forall a. Fractional a => a
size1
uiTort2m :: forall a. Sigs a => Source (Fx a)
uiTort2m = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTortByM Double
forall a. Fractional a => a
size2
uiTort3m :: forall a. Sigs a => Source (Fx a)
uiTort3m = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTortByM Double
forall a. Fractional a => a
size3
uiTort4m :: forall a. Sigs a => Source (Fx a)
uiTort4m = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTortByM Double
forall a. Fractional a => a
size4
uiTort5m :: forall a. Sigs a => Source (Fx a)
uiTort5m = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTortByM Double
forall a. Fractional a => a
size5

-- Envelope follower

uiFowler' :: Sigs a => Source (Fx a)
uiFowler' :: forall a. Sigs a => Source (Fx a)
uiFowler' = ((Sig -> SE Sig) -> Input (Fx a))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> Source a -> Source b
mapSource (Sig -> SE Sig) -> Input (Fx a)
forall a. BindSig a => (Sig -> SE Sig) -> a -> SE a
bindSig (Source (Sig -> SE Sig) -> Source (Input (Fx a)))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ String -> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a. String -> Source a -> Source a
paintTo String
fowlerColor (Source (Sig -> SE Sig) -> Source (Sig -> SE Sig))
-> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Sig -> SE Sig)
-> Bool
-> [(Text, Double)]
-> Source (Sig -> SE Sig)
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Follower" [Sig] -> Sig -> SE Sig
forall {m :: * -> *} {b}. (Monad m, Sigs b) => [Sig] -> b -> m b
fx Bool
True [(Text
"size", Double
forall a. Fractional a => a
size1)]
    where
        fx :: [Sig] -> b -> m b
fx [Sig
size] = b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (b -> m b) -> (b -> b) -> b -> m b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> b -> b
forall a. Sigs a => Sig -> a -> a
fowler' Sig
size
        fx [Sig]
_      = b -> m b
forall a. HasCallStack => a
undefined

uiFowlerBy :: Sigs a => Double -> Source (Fx a)
uiFowlerBy :: forall a. Sigs a => Double -> Source (Fx a)
uiFowlerBy Double
size = ((Sig -> SE Sig) -> Input (Fx a))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> Source a -> Source b
mapSource (Sig -> SE Sig) -> Input (Fx a)
forall a. BindSig a => (Sig -> SE Sig) -> a -> SE a
bindSig (Source (Sig -> SE Sig) -> Source (Input (Fx a)))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ String -> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a. String -> Source a -> Source a
paintTo String
fowlerColor (Source (Sig -> SE Sig) -> Source (Sig -> SE Sig))
-> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Sig -> SE Sig)
-> Bool
-> [(Text, Double)]
-> Source (Sig -> SE Sig)
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Follower" [Sig] -> Sig -> SE Sig
forall {m :: * -> *} {b}. (Monad m, Sigs b) => [Sig] -> b -> m b
fx Bool
True [(Text
"sense", Double
size), (Text
"freq", Double
size), (Text
"reson", Double
size)]
    where
        fx :: [Sig] -> b -> m b
fx [Sig
sense, Sig
freq, Sig
resonance] = b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (b -> m b) -> (b -> b) -> b -> m b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig -> b -> b
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
fowler Sig
sense Sig
freq Sig
resonance
        fx [Sig]
_                        = b -> m b
forall a. HasCallStack => a
undefined

uiFowler1, uiFowler2, uiFowler3, uiFowler4, uiFowler5 :: Sigs a => Source (Fx a)

uiFowler1 :: forall a. Sigs a => Source (Fx a)
uiFowler1 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiFowlerBy Double
forall a. Fractional a => a
size1
uiFowler2 :: forall a. Sigs a => Source (Fx a)
uiFowler2 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiFowlerBy Double
forall a. Fractional a => a
size2
uiFowler3 :: forall a. Sigs a => Source (Fx a)
uiFowler3 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiFowlerBy Double
forall a. Fractional a => a
size3
uiFowler4 :: forall a. Sigs a => Source (Fx a)
uiFowler4 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiFowlerBy Double
forall a. Fractional a => a
size4
uiFowler5 :: forall a. Sigs a => Source (Fx a)
uiFowler5 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiFowlerBy Double
forall a. Fractional a => a
size5

-- Flanger

uiFlan' :: Sigs a => Source (Fx a)
uiFlan' :: forall a. Sigs a => Source (Fx a)
uiFlan' = ((Sig -> SE Sig) -> Input (Fx a))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> Source a -> Source b
mapSource (Sig -> SE Sig) -> Input (Fx a)
forall a. BindSig a => (Sig -> SE Sig) -> a -> SE a
bindSig (Source (Sig -> SE Sig) -> Source (Input (Fx a)))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ String -> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a. String -> Source a -> Source a
paintTo String
flanColor (Source (Sig -> SE Sig) -> Source (Sig -> SE Sig))
-> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Sig -> SE Sig)
-> Bool
-> [(Text, Double)]
-> Source (Sig -> SE Sig)
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Flanger" [Sig] -> Sig -> SE Sig
forall {m :: * -> *} {b}. (Monad m, Sigs b) => [Sig] -> b -> m b
fx Bool
True [(Text
"size", Double
forall a. Fractional a => a
size1)]
    where
        fx :: [Sig] -> b -> m b
fx [Sig
size] = b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (b -> m b) -> (b -> b) -> b -> m b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> b -> b
forall a. Sigs a => Sig -> a -> a
flan' Sig
size
        fx [Sig]
_      = b -> m b
forall a. HasCallStack => a
undefined

uiFlanBy :: Sigs a => Double -> Source (Fx a)
uiFlanBy :: forall a. Sigs a => Double -> Source (Fx a)
uiFlanBy Double
size = ((Sig -> SE Sig) -> Input (Fx a))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> Source a -> Source b
mapSource (Sig -> SE Sig) -> Input (Fx a)
forall a. BindSig a => (Sig -> SE Sig) -> a -> SE a
bindSig (Source (Sig -> SE Sig) -> Source (Input (Fx a)))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ String -> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a. String -> Source a -> Source a
paintTo String
flanColor (Source (Sig -> SE Sig) -> Source (Sig -> SE Sig))
-> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Sig -> SE Sig)
-> Bool
-> [(Text, Double)]
-> Source (Sig -> SE Sig)
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Flanger" [Sig] -> Sig -> SE Sig
forall {m :: * -> *} {b}. (Monad m, Sigs b) => [Sig] -> b -> m b
fx Bool
True ([(Text, Double)] -> Source (Sig -> SE Sig))
-> [(Text, Double)] -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Double -> [Text] -> [(Text, Double)]
setAll Double
size [Text
"rate", Text
"depth", Text
"del time", Text
"fbk"]
    where
        fx :: [Sig] -> b -> m b
fx [Sig
rate, Sig
depth, Sig
delayTime, Sig
fbk] = b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (b -> m b) -> (b -> b) -> b -> m b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig -> Sig -> b -> b
forall a. Sigs a => Sig -> Sig -> Sig -> Sig -> a -> a
flan Sig
rate Sig
depth Sig
delayTime Sig
fbk
        fx [Sig]
_                             = b -> m b
forall a. HasCallStack => a
undefined

uiFlan1, uiFlan2, uiFlan3, uiFlan4, uiFlan5 :: Sigs a => Source (Fx a)

uiFlan1 :: forall a. Sigs a => Source (Fx a)
uiFlan1 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiFlanBy Double
forall a. Fractional a => a
size1
uiFlan2 :: forall a. Sigs a => Source (Fx a)
uiFlan2 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiFlanBy Double
forall a. Fractional a => a
size2
uiFlan3 :: forall a. Sigs a => Source (Fx a)
uiFlan3 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiFlanBy Double
forall a. Fractional a => a
size3
uiFlan4 :: forall a. Sigs a => Source (Fx a)
uiFlan4 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiFlanBy Double
forall a. Fractional a => a
size4
uiFlan5 :: forall a. Sigs a => Source (Fx a)
uiFlan5 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiFlanBy Double
forall a. Fractional a => a
size5

-- Phaser

-- phasy :: RateSig -> DepthSig -> BaseCps -> Feedback -> Sig -> Sig

uiPhasy' :: Sigs a => Source (Fx a)
uiPhasy' :: forall a. Sigs a => Source (Fx a)
uiPhasy' = ((Sig -> SE Sig) -> Input (Fx a))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> Source a -> Source b
mapSource (Sig -> SE Sig) -> Input (Fx a)
forall a. BindSig a => (Sig -> SE Sig) -> a -> SE a
bindSig (Source (Sig -> SE Sig) -> Source (Input (Fx a)))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ String -> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a. String -> Source a -> Source a
paintTo String
phasyColor (Source (Sig -> SE Sig) -> Source (Sig -> SE Sig))
-> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Sig -> SE Sig)
-> Bool
-> [(Text, Double)]
-> Source (Sig -> SE Sig)
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Phaser" [Sig] -> Sig -> SE Sig
forall {m :: * -> *} {b}. (Monad m, Sigs b) => [Sig] -> b -> m b
fx  Bool
True ([(Text, Double)] -> Source (Sig -> SE Sig))
-> [(Text, Double)] -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ [(Text
"size", Double
forall a. Fractional a => a
size1)]
    where
        fx :: [Sig] -> b -> m b
fx [Sig
x] = b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (b -> m b) -> (b -> b) -> b -> m b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> b -> b
forall a. Sigs a => Sig -> a -> a
phasy' Sig
x
        fx [Sig]
_   = b -> m b
forall a. HasCallStack => a
undefined

uiPhasyBy :: Sigs a => Double -> Source (Fx a)
uiPhasyBy :: forall a. Sigs a => Double -> Source (Fx a)
uiPhasyBy Double
size = ((Sig -> SE Sig) -> Input (Fx a))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> Source a -> Source b
mapSource (Sig -> SE Sig) -> Input (Fx a)
forall a. BindSig a => (Sig -> SE Sig) -> a -> SE a
bindSig (Source (Sig -> SE Sig) -> Source (Input (Fx a)))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ String -> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a. String -> Source a -> Source a
paintTo String
phasyColor (Source (Sig -> SE Sig) -> Source (Sig -> SE Sig))
-> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Sig -> SE Sig)
-> Bool
-> [(Text, Double)]
-> Source (Sig -> SE Sig)
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Phaser" [Sig] -> Sig -> SE Sig
forall {m :: * -> *} {b}. (Monad m, Sigs b) => [Sig] -> b -> m b
fx Bool
True ([(Text, Double)] -> Source (Sig -> SE Sig))
-> [(Text, Double)] -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Double -> [Text] -> [(Text, Double)]
setAll Double
size [Text
"rate", Text
"depth", Text
"cps", Text
"fbk"]
    where
        fx :: [Sig] -> b -> m b
fx [Sig
rate, Sig
depth, Sig
cps, Sig
fbk] = b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (b -> m b) -> (b -> b) -> b -> m b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig -> Sig -> b -> b
forall a. Sigs a => Sig -> Sig -> Sig -> Sig -> a -> a
phasy Sig
rate Sig
depth Sig
cps Sig
fbk
        fx [Sig]
_                       = b -> m b
forall a. HasCallStack => a
undefined

uiPhasy1, uiPhasy2, uiPhasy3, uiPhasy4, uiPhasy5 :: Sigs a => Source (Fx a)

uiPhasy1 :: forall a. Sigs a => Source (Fx a)
uiPhasy1 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiPhasyBy Double
forall a. Fractional a => a
size1
uiPhasy2 :: forall a. Sigs a => Source (Fx a)
uiPhasy2 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiPhasyBy Double
forall a. Fractional a => a
size2
uiPhasy3 :: forall a. Sigs a => Source (Fx a)
uiPhasy3 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiPhasyBy Double
forall a. Fractional a => a
size3
uiPhasy4 :: forall a. Sigs a => Source (Fx a)
uiPhasy4 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiPhasyBy Double
forall a. Fractional a => a
size4
uiPhasy5 :: forall a. Sigs a => Source (Fx a)
uiPhasy5 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiPhasyBy Double
forall a. Fractional a => a
size5

-- Chorus

uiChory' :: Sig2s a => Source (Fx a)
uiChory' :: forall a. Sig2s a => Source (Fx a)
uiChory' = String -> Source (Input (Fx a)) -> Source (Input (Fx a))
forall a. String -> Source a -> Source a
paintTo String
choryColor (Source (Input (Fx a)) -> Source (Input (Fx a)))
-> Source (Input (Fx a)) -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Input (Fx a))
-> Bool
-> [(Text, Double)]
-> Source (Input (Fx a))
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Chorus" [Sig] -> Input (Fx a)
forall {m :: * -> *} {b}. (Monad m, Sig2s b) => [Sig] -> b -> m b
fx Bool
True [(Text
"size", Double
forall a. Fractional a => a
size1)]
    where
        fx :: [Sig] -> b -> m b
fx [Sig
size] = b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (b -> m b) -> (b -> b) -> b -> m b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> b -> b
forall a. Sig2s a => Sig -> a -> a
chory' Sig
size
        fx [Sig]
_      = b -> m b
forall a. HasCallStack => a
undefined

uiChoryBy :: Sig2s a => Double -> Source (Fx a)
uiChoryBy :: forall a. Sig2s a => Double -> Source (Fx a)
uiChoryBy Double
size = String -> Source (Input (Fx a)) -> Source (Input (Fx a))
forall a. String -> Source a -> Source a
paintTo String
choryColor (Source (Input (Fx a)) -> Source (Input (Fx a)))
-> Source (Input (Fx a)) -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Input (Fx a))
-> Bool
-> [(Text, Double)]
-> Source (Input (Fx a))
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Chorus" [Sig] -> Input (Fx a)
forall {m :: * -> *} {b}.
(Monad m, SigSpace2 b) =>
[Sig] -> b -> m b
fx Bool
True ([(Text, Double)] -> Source (Input (Fx a)))
-> [(Text, Double)] -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ Double -> [Text] -> [(Text, Double)]
setAll Double
size [Text
"rate", Text
"depth", Text
"width"]
    where
        fx :: [Sig] -> b -> m b
fx [Sig
rate, Sig
depth, Sig
width] = b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (b -> m b) -> (b -> b) -> b -> m b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig2 -> Sig2) -> b -> b
forall a. SigSpace2 a => (Sig2 -> Sig2) -> a -> a
mapSig2 (Sig -> Sig -> Sig -> Sig2 -> Sig2
chory Sig
rate Sig
depth Sig
width)
        fx [Sig]
_                    = b -> m b
forall a. HasCallStack => a
undefined

uiChory1, uiChory2, uiChory3, uiChory4, uiChory5 :: Sig2s a => Source (Fx a)

uiChory1 :: forall a. Sig2s a => Source (Fx a)
uiChory1 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiChoryBy Double
forall a. Fractional a => a
size1
uiChory2 :: forall a. Sig2s a => Source (Fx a)
uiChory2 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiChoryBy Double
forall a. Fractional a => a
size2
uiChory3 :: forall a. Sig2s a => Source (Fx a)
uiChory3 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiChoryBy Double
forall a. Fractional a => a
size3
uiChory4 :: forall a. Sig2s a => Source (Fx a)
uiChory4 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiChoryBy Double
forall a. Fractional a => a
size4
uiChory5 :: forall a. Sig2s a => Source (Fx a)
uiChory5 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiChoryBy Double
forall a. Fractional a => a
size5

-- Auto Pan

-- pany :: TremWaveSig -> DepthSig -> RateSig -> Sig2 -> Sig2

genUiPany' :: (Sig -> Sig2 -> Sig2) -> Source Fx2
genUiPany' :: (Sig -> Sig2 -> Sig2) -> Source Fx2
genUiPany' Sig -> Sig2 -> Sig2
mkPany = String -> Source Fx2 -> Source Fx2
forall a. String -> Source a -> Source a
paintTo String
panyColor (Source Fx2 -> Source Fx2) -> Source Fx2 -> Source Fx2
forall a b. (a -> b) -> a -> b
$ Text -> ([Sig] -> Fx2) -> Bool -> [(Text, Double)] -> Source Fx2
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Pan" [Sig] -> Fx2
forall {m :: * -> *}. Monad m => [Sig] -> Sig2 -> m Sig2
fx Bool
True [(Text
"size", Double
forall a. Fractional a => a
size1)]
    where
        fx :: [Sig] -> Sig2 -> m Sig2
fx [Sig
size] = Sig2 -> m Sig2
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig2 -> m Sig2) -> (Sig2 -> Sig2) -> Sig2 -> m Sig2
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig2 -> Sig2
mkPany Sig
size
        fx [Sig]
_      = Sig2 -> m Sig2
forall a. HasCallStack => a
undefined

uiOscPany', uiTriPany', uiSqrPany' :: Source Fx2

uiOscPany' :: Source Fx2
uiOscPany' = (Sig -> Sig2 -> Sig2) -> Source Fx2
genUiPany' Sig -> Sig2 -> Sig2
forall a. Sig2s a => Sig -> a -> a
oscPany'
uiTriPany' :: Source Fx2
uiTriPany' = (Sig -> Sig2 -> Sig2) -> Source Fx2
genUiPany' Sig -> Sig2 -> Sig2
forall a. Sig2s a => Sig -> a -> a
triPany'
uiSqrPany' :: Source Fx2
uiSqrPany' = (Sig -> Sig2 -> Sig2) -> Source Fx2
genUiPany' Sig -> Sig2 -> Sig2
forall a. Sig2s a => Sig -> a -> a
sqrPany'

genUiPanyBy :: Sig -> Double -> Source Fx2
genUiPanyBy :: Sig -> Double -> Source Fx2
genUiPanyBy Sig
wave Double
size = String -> Source Fx2 -> Source Fx2
forall a. String -> Source a -> Source a
paintTo String
panyColor (Source Fx2 -> Source Fx2) -> Source Fx2 -> Source Fx2
forall a b. (a -> b) -> a -> b
$ Text -> ([Sig] -> Fx2) -> Bool -> [(Text, Double)] -> Source Fx2
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Pan" [Sig] -> Fx2
forall {m :: * -> *}. Monad m => [Sig] -> Sig2 -> m Sig2
fx Bool
True ([(Text, Double)] -> Source Fx2) -> [(Text, Double)] -> Source Fx2
forall a b. (a -> b) -> a -> b
$ Double -> [Text] -> [(Text, Double)]
setAll Double
size [Text
"depth", Text
"rate"]
    where
        fx :: [Sig] -> Sig2 -> m Sig2
fx [Sig
depth, Sig
rate] = Sig2 -> m Sig2
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig2 -> m Sig2) -> (Sig2 -> Sig2) -> Sig2 -> m Sig2
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig -> Sig2 -> Sig2
pany Sig
wave Sig
depth Sig
rate
        fx [Sig]
_             = Sig2 -> m Sig2
forall a. HasCallStack => a
undefined

uiOscPanyBy, uiTriPanyBy, uiSqrPanyBy :: Double -> Source Fx2

uiOscPanyBy :: Double -> Source Fx2
uiOscPanyBy = Sig -> Double -> Source Fx2
genUiPanyBy Sig
0
uiTriPanyBy :: Double -> Source Fx2
uiTriPanyBy = Sig -> Double -> Source Fx2
genUiPanyBy Sig
1
uiSqrPanyBy :: Double -> Source Fx2
uiSqrPanyBy = Sig -> Double -> Source Fx2
genUiPanyBy Sig
2

uiOscPany1, uiOscPany2, uiOscPany3, uiOscPany4, uiOscPany5,
    uiTriPany1, uiTriPany2, uiTriPany3, uiTriPany4, uiTriPany5,
    uiSqrPany1, uiSqrPany2, uiSqrPany3, uiSqrPany4, uiSqrPany5 :: Source Fx2

uiOscPany1 :: Source Fx2
uiOscPany1 = Double -> Source Fx2
uiOscPanyBy Double
forall a. Fractional a => a
size1
uiOscPany2 :: Source Fx2
uiOscPany2 = Double -> Source Fx2
uiOscPanyBy Double
forall a. Fractional a => a
size2
uiOscPany3 :: Source Fx2
uiOscPany3 = Double -> Source Fx2
uiOscPanyBy Double
forall a. Fractional a => a
size3
uiOscPany4 :: Source Fx2
uiOscPany4 = Double -> Source Fx2
uiOscPanyBy Double
forall a. Fractional a => a
size4
uiOscPany5 :: Source Fx2
uiOscPany5 = Double -> Source Fx2
uiOscPanyBy Double
forall a. Fractional a => a
size5

uiTriPany1 :: Source Fx2
uiTriPany1 = Double -> Source Fx2
uiTriPanyBy Double
forall a. Fractional a => a
size1
uiTriPany2 :: Source Fx2
uiTriPany2 = Double -> Source Fx2
uiTriPanyBy Double
forall a. Fractional a => a
size2
uiTriPany3 :: Source Fx2
uiTriPany3 = Double -> Source Fx2
uiTriPanyBy Double
forall a. Fractional a => a
size3
uiTriPany4 :: Source Fx2
uiTriPany4 = Double -> Source Fx2
uiTriPanyBy Double
forall a. Fractional a => a
size4
uiTriPany5 :: Source Fx2
uiTriPany5 = Double -> Source Fx2
uiTriPanyBy Double
forall a. Fractional a => a
size5

uiSqrPany1 :: Source Fx2
uiSqrPany1 = Double -> Source Fx2
uiSqrPanyBy Double
forall a. Fractional a => a
size1
uiSqrPany2 :: Source Fx2
uiSqrPany2 = Double -> Source Fx2
uiSqrPanyBy Double
forall a. Fractional a => a
size2
uiSqrPany3 :: Source Fx2
uiSqrPany3 = Double -> Source Fx2
uiSqrPanyBy Double
forall a. Fractional a => a
size3
uiSqrPany4 :: Source Fx2
uiSqrPany4 = Double -> Source Fx2
uiSqrPanyBy Double
forall a. Fractional a => a
size4
uiSqrPany5 :: Source Fx2
uiSqrPany5 = Double -> Source Fx2
uiSqrPanyBy Double
forall a. Fractional a => a
size5

-- Tremolo

genUiTremy' :: Sigs a => (Sig -> Sig -> Sig) -> Source (Fx a)
genUiTremy' :: forall a. Sigs a => (Sig -> Sig -> Sig) -> Source (Fx a)
genUiTremy' Sig -> Sig -> Sig
mkTremy = ((Sig -> SE Sig) -> Input (Fx a))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> Source a -> Source b
mapSource (Sig -> SE Sig) -> Input (Fx a)
forall a. BindSig a => (Sig -> SE Sig) -> a -> SE a
bindSig (Source (Sig -> SE Sig) -> Source (Input (Fx a)))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ String -> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a. String -> Source a -> Source a
paintTo String
tremyColor (Source (Sig -> SE Sig) -> Source (Sig -> SE Sig))
-> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Sig -> SE Sig)
-> Bool
-> [(Text, Double)]
-> Source (Sig -> SE Sig)
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Tremolo" [Sig] -> Sig -> SE Sig
forall {m :: * -> *}. Monad m => [Sig] -> Sig -> m Sig
fx Bool
True [(Text
"size", Double
forall a. Fractional a => a
size1)]
    where
        fx :: [Sig] -> Sig -> m Sig
fx [Sig
size] = Sig -> m Sig
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig -> m Sig) -> (Sig -> Sig) -> Sig -> m Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig
mkTremy Sig
size
        fx [Sig]
_      = Sig -> m Sig
forall a. HasCallStack => a
undefined

uiOscTremy', uiTriTremy', uiSqrTremy' :: Sigs a => Source (Fx a)

uiOscTremy' :: forall a. Sigs a => Source (Fx a)
uiOscTremy' = (Sig -> Sig -> Sig) -> Source (Fx a)
forall a. Sigs a => (Sig -> Sig -> Sig) -> Source (Fx a)
genUiTremy' Sig -> Sig -> Sig
forall a. Sigs a => Sig -> a -> a
oscTremy'
uiTriTremy' :: forall a. Sigs a => Source (Fx a)
uiTriTremy' = (Sig -> Sig -> Sig) -> Source (Fx a)
forall a. Sigs a => (Sig -> Sig -> Sig) -> Source (Fx a)
genUiTremy' Sig -> Sig -> Sig
forall a. Sigs a => Sig -> a -> a
triTremy'
uiSqrTremy' :: forall a. Sigs a => Source (Fx a)
uiSqrTremy' = (Sig -> Sig -> Sig) -> Source (Fx a)
forall a. Sigs a => (Sig -> Sig -> Sig) -> Source (Fx a)
genUiTremy' Sig -> Sig -> Sig
forall a. Sigs a => Sig -> a -> a
sqrTremy'

genUiTremyBy :: Sigs a => Sig -> Double -> Source (Fx a)
genUiTremyBy :: forall a. Sigs a => Sig -> Double -> Source (Fx a)
genUiTremyBy Sig
wave Double
size = ((Sig -> SE Sig) -> Input (Fx a))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> Source a -> Source b
mapSource (Sig -> SE Sig) -> Input (Fx a)
forall a. BindSig a => (Sig -> SE Sig) -> a -> SE a
bindSig (Source (Sig -> SE Sig) -> Source (Input (Fx a)))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ String -> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a. String -> Source a -> Source a
paintTo String
tremyColor (Source (Sig -> SE Sig) -> Source (Sig -> SE Sig))
-> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Sig -> SE Sig)
-> Bool
-> [(Text, Double)]
-> Source (Sig -> SE Sig)
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Tremolo" [Sig] -> Sig -> SE Sig
forall {m :: * -> *} {b}. (Monad m, Sigs b) => [Sig] -> b -> m b
fx Bool
True ([(Text, Double)] -> Source (Sig -> SE Sig))
-> [(Text, Double)] -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Double -> [Text] -> [(Text, Double)]
setAll Double
size [Text
"depth", Text
"rate"]
    where
        fx :: [Sig] -> b -> m b
fx [Sig
depth, Sig
rate] = b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (b -> m b) -> (b -> b) -> b -> m b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig -> b -> b
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
tremy Sig
wave Sig
depth Sig
rate
        fx [Sig]
_             = b -> m b
forall a. HasCallStack => a
undefined

uiOscTremyBy, uiTriTremyBy, uiSqrTremyBy :: Sigs a => Double -> Source (Fx a)

uiOscTremyBy :: forall a. Sigs a => Double -> Source (Fx a)
uiOscTremyBy = Sig -> Double -> Source (Fx a)
forall a. Sigs a => Sig -> Double -> Source (Fx a)
genUiTremyBy Sig
0
uiTriTremyBy :: forall a. Sigs a => Double -> Source (Fx a)
uiTriTremyBy = Sig -> Double -> Source (Fx a)
forall a. Sigs a => Sig -> Double -> Source (Fx a)
genUiTremyBy Sig
1
uiSqrTremyBy :: forall a. Sigs a => Double -> Source (Fx a)
uiSqrTremyBy = Sig -> Double -> Source (Fx a)
forall a. Sigs a => Sig -> Double -> Source (Fx a)
genUiTremyBy Sig
2

uiOscTremy1, uiOscTremy2, uiOscTremy3, uiOscTremy4, uiOscTremy5,
    uiTriTremy1, uiTriTremy2, uiTriTremy3, uiTriTremy4, uiTriTremy5,
    uiSqrTremy1, uiSqrTremy2, uiSqrTremy3, uiSqrTremy4, uiSqrTremy5 :: Sigs a => Source (Fx a)

uiOscTremy1 :: forall a. Sigs a => Source (Fx a)
uiOscTremy1 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiOscTremyBy Double
forall a. Fractional a => a
size1
uiOscTremy2 :: forall a. Sigs a => Source (Fx a)
uiOscTremy2 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiOscTremyBy Double
forall a. Fractional a => a
size2
uiOscTremy3 :: forall a. Sigs a => Source (Fx a)
uiOscTremy3 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiOscTremyBy Double
forall a. Fractional a => a
size3
uiOscTremy4 :: forall a. Sigs a => Source (Fx a)
uiOscTremy4 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiOscTremyBy Double
forall a. Fractional a => a
size4
uiOscTremy5 :: forall a. Sigs a => Source (Fx a)
uiOscTremy5 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiOscTremyBy Double
forall a. Fractional a => a
size5

uiTriTremy1 :: forall a. Sigs a => Source (Fx a)
uiTriTremy1 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTriTremyBy Double
forall a. Fractional a => a
size1
uiTriTremy2 :: forall a. Sigs a => Source (Fx a)
uiTriTremy2 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTriTremyBy Double
forall a. Fractional a => a
size2
uiTriTremy3 :: forall a. Sigs a => Source (Fx a)
uiTriTremy3 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTriTremyBy Double
forall a. Fractional a => a
size3
uiTriTremy4 :: forall a. Sigs a => Source (Fx a)
uiTriTremy4 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTriTremyBy Double
forall a. Fractional a => a
size4
uiTriTremy5 :: forall a. Sigs a => Source (Fx a)
uiTriTremy5 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiTriTremyBy Double
forall a. Fractional a => a
size5

uiSqrTremy1 :: forall a. Sigs a => Source (Fx a)
uiSqrTremy1 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiSqrTremyBy Double
forall a. Fractional a => a
size1
uiSqrTremy2 :: forall a. Sigs a => Source (Fx a)
uiSqrTremy2 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiSqrTremyBy Double
forall a. Fractional a => a
size2
uiSqrTremy3 :: forall a. Sigs a => Source (Fx a)
uiSqrTremy3 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiSqrTremyBy Double
forall a. Fractional a => a
size3
uiSqrTremy4 :: forall a. Sigs a => Source (Fx a)
uiSqrTremy4 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiSqrTremyBy Double
forall a. Fractional a => a
size4
uiSqrTremy5 :: forall a. Sigs a => Source (Fx a)
uiSqrTremy5 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiSqrTremyBy Double
forall a. Fractional a => a
size5

-- Ring modulation

uiRingo' :: Sigs a => Source (Fx a)
uiRingo' :: forall a. Sigs a => Source (Fx a)
uiRingo' = ((Sig -> SE Sig) -> Input (Fx a))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> Source a -> Source b
mapSource (Sig -> SE Sig) -> Input (Fx a)
forall a. BindSig a => (Sig -> SE Sig) -> a -> SE a
bindSig (Source (Sig -> SE Sig) -> Source (Input (Fx a)))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ String -> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a. String -> Source a -> Source a
paintTo String
ringoColor (Source (Sig -> SE Sig) -> Source (Sig -> SE Sig))
-> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Sig -> SE Sig)
-> Bool
-> [(Text, Double)]
-> Source (Sig -> SE Sig)
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Ringo" [Sig] -> Sig -> SE Sig
forall {m :: * -> *} {b}. (Monad m, Sigs b) => [Sig] -> b -> m b
fx Bool
True [(Text
"size", Double
forall a. Fractional a => a
size1)]
    where
        fx :: [Sig] -> b -> m b
fx [Sig
size] = b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (b -> m b) -> (b -> b) -> b -> m b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> b -> b
forall a. Sigs a => Sig -> a -> a
ringo' Sig
size
        fx [Sig]
_      = b -> m b
forall a. HasCallStack => a
undefined

uiRingoBy :: Sigs a => Double -> Source (Fx a)
uiRingoBy :: forall a. Sigs a => Double -> Source (Fx a)
uiRingoBy Double
size = ((Sig -> SE Sig) -> Input (Fx a))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> Source a -> Source b
mapSource (Sig -> SE Sig) -> Input (Fx a)
forall a. BindSig a => (Sig -> SE Sig) -> a -> SE a
bindSig (Source (Sig -> SE Sig) -> Source (Input (Fx a)))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ String -> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a. String -> Source a -> Source a
paintTo String
ringoColor (Source (Sig -> SE Sig) -> Source (Sig -> SE Sig))
-> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Sig -> SE Sig)
-> Bool
-> [(Text, Double)]
-> Source (Sig -> SE Sig)
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Ring Mod" [Sig] -> Sig -> SE Sig
forall {m :: * -> *} {b}. (Monad m, Sigs b) => [Sig] -> b -> m b
fx Bool
True ([(Text, Double)] -> Source (Sig -> SE Sig))
-> [(Text, Double)] -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Double -> [Text] -> [(Text, Double)]
setAll Double
size [Text
"mix", Text
"rate", Text
"env mod"]
    where
        fx :: [Sig] -> b -> m b
fx [Sig
balance, Sig
rate, Sig
envMod] = b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (b -> m b) -> (b -> b) -> b -> m b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig -> b -> b
forall a. Sigs a => Sig -> Sig -> Sig -> a -> a
ringo Sig
balance Sig
rate Sig
envMod
        fx [Sig]
_                       = b -> m b
forall a. HasCallStack => a
undefined

uiRingo1, uiRingo2, uiRingo3, uiRingo4, uiRingo5 :: Sigs a => Source (Fx a)

uiRingo1 :: forall a. Sigs a => Source (Fx a)
uiRingo1 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiRingoBy Double
forall a. Fractional a => a
size1
uiRingo2 :: forall a. Sigs a => Source (Fx a)
uiRingo2 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiRingoBy Double
forall a. Fractional a => a
size2
uiRingo3 :: forall a. Sigs a => Source (Fx a)
uiRingo3 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiRingoBy Double
forall a. Fractional a => a
size3
uiRingo4 :: forall a. Sigs a => Source (Fx a)
uiRingo4 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiRingoBy Double
forall a. Fractional a => a
size4
uiRingo5 :: forall a. Sigs a => Source (Fx a)
uiRingo5 = Double -> Source (Fx a)
forall a. Sigs a => Double -> Source (Fx a)
uiRingoBy Double
forall a. Fractional a => a
size5

-- Crusher

uiCrusher :: Sigs a => Double -> Double -> Source (Fx a)
uiCrusher :: forall a. Sigs a => Double -> Double -> Source (Fx a)
uiCrusher Double
initReduction Double
initFoldover = ((Sig -> SE Sig) -> Input (Fx a))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> Source a -> Source b
mapSource (Sig -> SE Sig) -> Input (Fx a)
forall a. BindSig a => (Sig -> SE Sig) -> a -> SE a
bindSig (Source (Sig -> SE Sig) -> Source (Input (Fx a)))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ String -> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a. String -> Source a -> Source a
paintTo String
crusherColor (Source (Sig -> SE Sig) -> Source (Sig -> SE Sig))
-> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Sig -> SE Sig)
-> Bool
-> [(Text, Double)]
-> Source (Sig -> SE Sig)
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"LoFi" [Sig] -> Sig -> SE Sig
forall {m :: * -> *} {b}. (Monad m, Sigs b) => [Sig] -> b -> m b
fx Bool
True [(Text
"redux", Double
initReduction), (Text
"foldover", Double
initFoldover)]
    where
        fx :: [Sig] -> b -> m b
fx [Sig
redux, Sig
foldover] = b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (b -> m b) -> (b -> b) -> b -> m b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> b -> b
forall a. Sigs a => Sig -> Sig -> a -> a
crusher Sig
redux Sig
foldover
        fx [Sig]
_                 = b -> m b
forall a. HasCallStack => a
undefined

-- Reverse

uiRevsy :: Sigs a => Double -> Source (Fx a)
uiRevsy :: forall a. Sigs a => Double -> Source (Fx a)
uiRevsy Double
initTime = ((Sig -> SE Sig) -> Input (Fx a))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> Source a -> Source b
mapSource (Sig -> SE Sig) -> Input (Fx a)
forall a. BindSig a => (Sig -> SE Sig) -> a -> SE a
bindSig (Source (Sig -> SE Sig) -> Source (Input (Fx a)))
-> Source (Sig -> SE Sig) -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ String -> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a. String -> Source a -> Source a
paintTo String
revsyColor (Source (Sig -> SE Sig) -> Source (Sig -> SE Sig))
-> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Sig -> SE Sig)
-> Bool
-> [(Text, Double)]
-> Source (Sig -> SE Sig)
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Reverse" [Sig] -> Sig -> SE Sig
forall {m :: * -> *} {b}. (Monad m, Sigs b) => [Sig] -> b -> m b
fx Bool
True [(Text
"time", Double
initTime)]
    where
        fx :: [Sig] -> b -> m b
fx [Sig
time] = b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (b -> m b) -> (b -> b) -> b -> m b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> b -> b
forall a. Sigs a => Sig -> a -> a
revsy Sig
time
        fx [Sig]
_      = b -> m b
forall a. HasCallStack => a
undefined

------------------------------------------------------------
-- Reverbs

uiRevBy :: Sig2s a => Double -> Double -> Source (Fx a)
uiRevBy :: forall a. Sig2s a => Double -> Double -> Source (Fx a)
uiRevBy Double
initFeedback Double
initMix = String -> Source (Input (Fx a)) -> Source (Input (Fx a))
forall a. String -> Source a -> Source a
paintTo String
reverbColor (Source (Input (Fx a)) -> Source (Input (Fx a)))
-> Source (Input (Fx a)) -> Source (Input (Fx a))
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Input (Fx a))
-> Bool
-> [(Text, Double)]
-> Source (Input (Fx a))
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Reverb" [Sig] -> Input (Fx a)
fx Bool
True [(Text
"mix", Double
initMix), (Text
"fbk", Double
initFeedback)]
    where
        fx :: [Sig] -> Input (Fx a)
fx = \case
          [Sig
balance, Sig
feedback] -> \a
asig -> Input (Fx a)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return Input (Fx a) -> Input (Fx a)
forall a b. (a -> b) -> a -> b
$ (Sig2 -> Sig2) -> a -> a
forall a. SigSpace2 a => (Sig2 -> Sig2) -> a -> a
mapSig2 (\Sig2
x -> Sig -> Sig2 -> Sig2
forall a. SigSpace a => Sig -> a -> a
mul (Sig
1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- Sig
balance) Sig2
x Sig2 -> Sig2 -> Sig2
forall a. Num a => a -> a -> a
+ Sig -> Sig2 -> Sig2
forall a. SigSpace a => Sig -> a -> a
mul Sig
balance (Sig -> Sig2 -> Sig2
rever2 Sig
feedback Sig2
x)) a
asig
          [Sig]
_                   -> Input (Fx a)
forall a. HasCallStack => a
undefined

uiRoom :: Sig2s a => Double -> Source (Fx a)
uiRoom :: forall a. Sig2s a => Double -> Source (Fx a)
uiRoom = Double -> Double -> Source (Fx a)
forall a. Sig2s a => Double -> Double -> Source (Fx a)
uiRevBy Double
0.6

uiRoom1, uiRoom2, uiRoom3, uiRoom4, uiRoom5 :: Sig2s a => Source (Fx a)

uiRoom1 :: forall a. Sig2s a => Source (Fx a)
uiRoom1 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiRoom Double
forall a. Fractional a => a
size1
uiRoom2 :: forall a. Sig2s a => Source (Fx a)
uiRoom2 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiRoom Double
forall a. Fractional a => a
size2
uiRoom3 :: forall a. Sig2s a => Source (Fx a)
uiRoom3 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiRoom Double
forall a. Fractional a => a
size3
uiRoom4 :: forall a. Sig2s a => Source (Fx a)
uiRoom4 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiRoom Double
forall a. Fractional a => a
size4
uiRoom5 :: forall a. Sig2s a => Source (Fx a)
uiRoom5 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiRoom Double
forall a. Fractional a => a
size5

uiChamber :: Sig2s a => Double -> Source (Fx a)
uiChamber :: forall a. Sig2s a => Double -> Source (Fx a)
uiChamber = Double -> Double -> Source (Fx a)
forall a. Sig2s a => Double -> Double -> Source (Fx a)
uiRevBy Double
0.8

uiChamber1, uiChamber2, uiChamber3, uiChamber4, uiChamber5 :: Sig2s a => Source (Fx a)

uiChamber1 :: forall a. Sig2s a => Source (Fx a)
uiChamber1 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiChamber Double
forall a. Fractional a => a
size1
uiChamber2 :: forall a. Sig2s a => Source (Fx a)
uiChamber2 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiChamber Double
forall a. Fractional a => a
size2
uiChamber3 :: forall a. Sig2s a => Source (Fx a)
uiChamber3 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiChamber Double
forall a. Fractional a => a
size3
uiChamber4 :: forall a. Sig2s a => Source (Fx a)
uiChamber4 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiChamber Double
forall a. Fractional a => a
size4
uiChamber5 :: forall a. Sig2s a => Source (Fx a)
uiChamber5 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiChamber Double
forall a. Fractional a => a
size5

uiHall :: Sig2s a => Double -> Source (Fx a)
uiHall :: forall a. Sig2s a => Double -> Source (Fx a)
uiHall = Double -> Double -> Source (Fx a)
forall a. Sig2s a => Double -> Double -> Source (Fx a)
uiRevBy Double
0.9

uiHall1, uiHall2, uiHall3, uiHall4, uiHall5 :: Sig2s a => Source (Fx a)

uiHall1 :: forall a. Sig2s a => Source (Fx a)
uiHall1 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiHall Double
forall a. Fractional a => a
size1
uiHall2 :: forall a. Sig2s a => Source (Fx a)
uiHall2 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiHall Double
forall a. Fractional a => a
size2
uiHall3 :: forall a. Sig2s a => Source (Fx a)
uiHall3 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiHall Double
forall a. Fractional a => a
size3
uiHall4 :: forall a. Sig2s a => Source (Fx a)
uiHall4 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiHall Double
forall a. Fractional a => a
size4
uiHall5 :: forall a. Sig2s a => Source (Fx a)
uiHall5 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiHall Double
forall a. Fractional a => a
size5

uiCave :: Sig2s a => Double -> Source (Fx a)
uiCave :: forall a. Sig2s a => Double -> Source (Fx a)
uiCave = Double -> Double -> Source (Fx a)
forall a. Sig2s a => Double -> Double -> Source (Fx a)
uiRevBy Double
0.99

uiCave1, uiCave2, uiCave3, uiCave4, uiCave5 :: Sig2s a => Source (Fx a)

uiCave1 :: forall a. Sig2s a => Source (Fx a)
uiCave1 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiCave Double
forall a. Fractional a => a
size1
uiCave2 :: forall a. Sig2s a => Source (Fx a)
uiCave2 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiCave Double
forall a. Fractional a => a
size2
uiCave3 :: forall a. Sig2s a => Source (Fx a)
uiCave3 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiCave Double
forall a. Fractional a => a
size3
uiCave4 :: forall a. Sig2s a => Source (Fx a)
uiCave4 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiCave Double
forall a. Fractional a => a
size4
uiCave5 :: forall a. Sig2s a => Source (Fx a)
uiCave5 = Double -> Source (Fx a)
forall a. Sig2s a => Double -> Source (Fx a)
uiCave Double
forall a. Fractional a => a
size5

------------------------------------------------------------
-- Mono Reverbs

rever1 :: Sig -> Sig -> Sig
rever1 :: Sig -> Sig -> Sig
rever1 Sig
fbk = Sig2 -> Sig
toMono (Sig2 -> Sig) -> (Sig -> Sig2) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig2 -> Sig2
rever2 Sig
fbk (Sig2 -> Sig2) -> (Sig -> Sig2) -> Sig -> Sig2
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig2
fromMono

uiMonoRevBy :: Double -> Double -> Source Fx1
uiMonoRevBy :: Double -> Double -> Source (Sig -> SE Sig)
uiMonoRevBy Double
initFeedback Double
initMix = String -> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a. String -> Source a -> Source a
paintTo String
reverbColor (Source (Sig -> SE Sig) -> Source (Sig -> SE Sig))
-> Source (Sig -> SE Sig) -> Source (Sig -> SE Sig)
forall a b. (a -> b) -> a -> b
$ Text
-> ([Sig] -> Sig -> SE Sig)
-> Bool
-> [(Text, Double)]
-> Source (Sig -> SE Sig)
forall a.
Sigs a =>
Text
-> ([Sig] -> Fx a) -> Bool -> [(Text, Double)] -> Source (Fx a)
fxBox Text
"Reverb" [Sig] -> Sig -> SE Sig
fx Bool
True [(Text
"mix", Double
initMix), (Text
"fbk", Double
initFeedback)]
    where
        fx :: [Sig] -> Sig -> SE Sig
fx = \case
          [Sig
balance, Sig
feedback] -> \Sig
asig -> Sig -> SE Sig
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig -> SE Sig) -> Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> (Sig -> Sig) -> Sig -> AtOut Sig Sig Sig
forall a b c. MixAt a b c => Sig -> (a -> b) -> c -> AtOut a b c
mixAt Sig
balance (Sig -> Sig -> Sig
rever1 Sig
feedback) Sig
asig
          [Sig]
_                   -> Sig -> SE Sig
forall a. HasCallStack => a
undefined

uiMonoRoom :: Double -> Source Fx1
uiMonoRoom :: Double -> Source (Sig -> SE Sig)
uiMonoRoom = Double -> Double -> Source (Sig -> SE Sig)
uiMonoRevBy Double
0.6

uiRoom1m, uiRoom2m, uiRoom3m, uiRoom4m, uiRoom5m :: Source Fx1

uiRoom1m :: Source (Sig -> SE Sig)
uiRoom1m = Double -> Source (Sig -> SE Sig)
uiMonoRoom Double
forall a. Fractional a => a
size1
uiRoom2m :: Source (Sig -> SE Sig)
uiRoom2m = Double -> Source (Sig -> SE Sig)
uiMonoRoom Double
forall a. Fractional a => a
size2
uiRoom3m :: Source (Sig -> SE Sig)
uiRoom3m = Double -> Source (Sig -> SE Sig)
uiMonoRoom Double
forall a. Fractional a => a
size3
uiRoom4m :: Source (Sig -> SE Sig)
uiRoom4m = Double -> Source (Sig -> SE Sig)
uiMonoRoom Double
forall a. Fractional a => a
size4
uiRoom5m :: Source (Sig -> SE Sig)
uiRoom5m = Double -> Source (Sig -> SE Sig)
uiMonoRoom Double
forall a. Fractional a => a
size5

uiMonoChamber :: Double -> Source Fx1
uiMonoChamber :: Double -> Source (Sig -> SE Sig)
uiMonoChamber = Double -> Double -> Source (Sig -> SE Sig)
uiMonoRevBy Double
0.8

uiChamber1m, uiChamber2m, uiChamber3m, uiChamber4m, uiChamber5m :: Source Fx1

uiChamber1m :: Source (Sig -> SE Sig)
uiChamber1m = Double -> Source (Sig -> SE Sig)
uiMonoChamber Double
forall a. Fractional a => a
size1
uiChamber2m :: Source (Sig -> SE Sig)
uiChamber2m = Double -> Source (Sig -> SE Sig)
uiMonoChamber Double
forall a. Fractional a => a
size2
uiChamber3m :: Source (Sig -> SE Sig)
uiChamber3m = Double -> Source (Sig -> SE Sig)
uiMonoChamber Double
forall a. Fractional a => a
size3
uiChamber4m :: Source (Sig -> SE Sig)
uiChamber4m = Double -> Source (Sig -> SE Sig)
uiMonoChamber Double
forall a. Fractional a => a
size4
uiChamber5m :: Source (Sig -> SE Sig)
uiChamber5m = Double -> Source (Sig -> SE Sig)
uiMonoChamber Double
forall a. Fractional a => a
size5

uiMonoHall :: Double -> Source Fx1
uiMonoHall :: Double -> Source (Sig -> SE Sig)
uiMonoHall = Double -> Double -> Source (Sig -> SE Sig)
uiMonoRevBy Double
0.9

uiHall1m, uiHall2m, uiHall3m, uiHall4m, uiHall5m :: Source Fx1

uiHall1m :: Source (Sig -> SE Sig)
uiHall1m = Double -> Source (Sig -> SE Sig)
uiMonoHall Double
forall a. Fractional a => a
size1
uiHall2m :: Source (Sig -> SE Sig)
uiHall2m = Double -> Source (Sig -> SE Sig)
uiMonoHall Double
forall a. Fractional a => a
size2
uiHall3m :: Source (Sig -> SE Sig)
uiHall3m = Double -> Source (Sig -> SE Sig)
uiMonoHall Double
forall a. Fractional a => a
size3
uiHall4m :: Source (Sig -> SE Sig)
uiHall4m = Double -> Source (Sig -> SE Sig)
uiMonoHall Double
forall a. Fractional a => a
size4
uiHall5m :: Source (Sig -> SE Sig)
uiHall5m = Double -> Source (Sig -> SE Sig)
uiMonoHall Double
forall a. Fractional a => a
size5

uiMonoCave :: Double -> Source Fx1
uiMonoCave :: Double -> Source (Sig -> SE Sig)
uiMonoCave = Double -> Double -> Source (Sig -> SE Sig)
uiMonoRevBy Double
0.99

uiCave1m, uiCave2m, uiCave3m, uiCave4m, uiCave5m :: Source Fx1

uiCave1m :: Source (Sig -> SE Sig)
uiCave1m = Double -> Source (Sig -> SE Sig)
uiMonoCave Double
forall a. Fractional a => a
size1
uiCave2m :: Source (Sig -> SE Sig)
uiCave2m = Double -> Source (Sig -> SE Sig)
uiMonoCave Double
forall a. Fractional a => a
size2
uiCave3m :: Source (Sig -> SE Sig)
uiCave3m = Double -> Source (Sig -> SE Sig)
uiMonoCave Double
forall a. Fractional a => a
size3
uiCave4m :: Source (Sig -> SE Sig)
uiCave4m = Double -> Source (Sig -> SE Sig)
uiMonoCave Double
forall a. Fractional a => a
size4
uiCave5m :: Source (Sig -> SE Sig)
uiCave5m = Double -> Source (Sig -> SE Sig)
uiMonoCave Double
forall a. Fractional a => a
size5

type ThreshSig = Sig

-------------------------------------
-- ambient guitar

-- | Ambient guitar patch. It uses @ambiEnv@ with stack of delays and a bit of compression and distortion.
-- No reverb is added. The reverb is for user to add.
--
-- > ambiGuitar thresh delayTime feedback tone driveLevel sig
--
-- For thresh try out values like 0.01, 0.02
--
-- Example, we read guitar input from soundcard first input,
-- apply ambient guitar effect and a bit of reverb:
--
-- > main = dac proc
-- >
-- > proc :: Sig2 -> SE Sig2
-- > proc (x, _) = hall 0.25 $ ambiGuitar 0.02 1 0.7 0.4 0.1 x
ambiGuitar :: ThreshSig -> DelayTime -> Feedback -> ToneSig -> DriveSig -> Sig -> SE Sig
ambiGuitar :: Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> SE Sig
ambiGuitar Sig
thresh Sig
dt Sig
fbk Sig
toneSig Sig
drv Sig
ain = do
    Sig
envSig <- Sig -> Sig -> SE Sig
ambiEnv Sig
thresh Sig
ain
    Sig -> SE Sig
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig -> SE Sig) -> Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ ( Sig -> Sig -> Sig -> Sig -> Sig -> Sig
forall a. Sigs a => Sig -> Sig -> Sig -> Sig -> a -> a
adele Sig
0.35 Sig
dt Sig
fbk Sig
toneSig (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig -> Sig -> Sig -> Sig
forall a. Sigs a => Sig -> Sig -> Sig -> Sig -> a -> a
adele Sig
0.5 (Sig
dt Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
4) (Sig
fbk Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
1.25) Sig
toneSig (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
              Sig -> Sig -> Sig
saturator Sig
0.3  (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig -> Sig
forall a. Sigs a => Sig -> Sig -> a -> a
tort Sig
drv Sig
0.25) Sig
envSig