module Sound.SC3.UGen.Noise.Monadic where

import Sound.SC3.UGen.Rate
import Sound.SC3.UGen.UGen
import Sound.SC3.UGen.UGen.Lift
import qualified Sound.SC3.UGen.Noise.Base as N
import Sound.SC3.UGen.UId

-- | Brown noise.
brownNoise :: (UId m) => Rate -> m UGen
brownNoise = liftU N.brownNoise

-- | Clip noise.
clipNoise :: (UId m) => Rate -> m UGen
clipNoise = liftU N.clipNoise

-- | Randomly pass or block triggers.
coinGate :: (UId m) => UGen -> UGen -> m UGen
coinGate = liftU2 N.coinGate

-- | Random impulses in (-1, 1).
dust2 :: (UId m) => Rate -> UGen -> m UGen
dust2 = liftU2 N.dust2

-- | Random impulse in (0,1).
dust :: (UId m) => Rate -> UGen -> m UGen
dust = liftU2 N.dust

-- | Random value in exponential distribution.
expRand :: (UId m) => UGen -> UGen -> m UGen
expRand = liftU2 N.expRand

-- | Gray noise.
grayNoise :: (UId m) => Rate -> m UGen
grayNoise = liftU N.grayNoise

-- | Random integer in uniform distribution.
iRand :: (UId m) => UGen -> UGen -> m UGen
iRand = liftU2 N.iRand

-- | Clip noise.
lfClipNoise :: (UId m) => Rate -> UGen -> m UGen
lfClipNoise = liftU2 N.lfClipNoise

-- | Dynamic clip noise.
lfdClipNoise :: (UId m) => Rate -> UGen -> m UGen
lfdClipNoise = liftU2 N.lfdClipNoise

-- | Dynamic step noise.
lfdNoise0 :: (UId m) => Rate -> UGen -> m UGen
lfdNoise0 = liftU2 N.lfdNoise0

-- | Dynamic ramp noise.
lfdNoise1 :: (UId m) => Rate -> UGen -> m UGen
lfdNoise1 = liftU2 N.lfdNoise1

-- | Dynamic quadratic noise
lfdNoise2 :: (UId m) => Rate -> UGen -> m UGen
lfdNoise2 = liftU2 N.lfdNoise2

-- | Dynamic cubic noise
lfdNoise3 :: (UId m) => Rate -> UGen -> m UGen
lfdNoise3 = liftU2 N.lfdNoise3

-- | Step noise.
lfNoise0 :: (UId m) => Rate -> UGen -> m UGen
lfNoise0 = liftU2 N.lfNoise0

-- | Ramp noise.
lfNoise1 :: (UId m) => Rate -> UGen -> m UGen
lfNoise1 = liftU2 N.lfNoise1

-- | Quadratic noise.
lfNoise2 :: (UId m) => Rate -> UGen -> m UGen
lfNoise2 = liftU2 N.lfNoise2

-- | Random value in skewed linear distribution.
linRand :: (UId m) => UGen -> UGen -> UGen -> m UGen
linRand = liftU3 N.linRand

-- | Random value in sum of n linear distribution.
nRand :: (UId m) => UGen -> UGen -> UGen -> m UGen
nRand = liftU3 N.nRand

-- | Pink noise.
pinkNoise :: (UId m) => Rate -> m UGen
pinkNoise = liftU N.pinkNoise

-- | Random value in uniform distribution.
rand :: (UId m) => UGen -> UGen -> m UGen
rand = liftU2 N.rand

-- | Random value in exponential distribution on trigger.
tExpRand :: (UId m) => UGen -> UGen -> UGen -> m UGen
tExpRand = liftU3 N.tExpRand

-- | Random integer in uniform distribution on trigger.
tiRand :: (UId m) => UGen -> UGen -> UGen -> m UGen
tiRand = liftU3 N.tiRand

-- | Random value in uniform distribution on trigger.
tRand :: (UId m) => UGen -> UGen -> UGen -> m UGen
tRand = liftU3 N.tRand

-- | Triggered windex.
twindex :: (UId m) => UGen -> UGen -> UGen -> m UGen
twindex = liftU3 N.twindex

-- | White noise.
whiteNoise :: (UId m) => Rate -> m UGen
whiteNoise = liftU N.whiteNoise