-- | Chaotic functions.
module Sound.SC3.UGen.Chaos where

import Sound.SC3.UGen.Rate
import Sound.SC3.UGen.Type
import Sound.SC3.UGen.UGen

-- | Chaotic noise.
crackle :: Rate -> UGen -> UGen
crackle r chaosParam = mkOsc r "Crackle" [chaosParam] 1

-- | Cusp map chaotic generator (linear interpolation).
cuspL :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen
cuspL r freq a b xi = mkOsc r "CuspL" [freq, a, b, xi] 1

-- | Cusp map chaotic generator (no interpolation).
cuspN :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen
cuspN r freq a b xi = mkOsc r "CuspN" [freq, a, b, xi] 1

-- | Feedback sine with chaotic phase indexing (cubic interpolation).
fbSineC :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen
fbSineC r freq im fb a c xi yi = mkOsc r "FBSineC" [freq, im, fb, a, c, xi, yi] 1

-- | Feedback sine with chaotic phase indexing (linear interpolation).
fbSineL :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen
fbSineL r freq im fb a c xi yi = mkOsc r "FBSineL" [freq, im, fb, a, c, xi, yi] 1

-- | Feedback sine with chaotic phase indexing (no interpolation).
fbSineN :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen
fbSineN r freq im fb a c xi yi = mkOsc r "FBSineN" [freq, im, fb, a, c, xi, yi] 1

-- | Gingerbreadman map chaotic generator
gbmanL :: Rate -> UGen -> UGen -> UGen -> UGen
gbmanL r freq xi yi = mkOscR [AR] r "GbmanL" [freq,xi,yi] 1

-- | Gingerbreadman map chaotic generator
gbmanN :: Rate -> UGen -> UGen -> UGen -> UGen
gbmanN r freq xi yi = mkOscR [AR] r "GbmanN" [freq,xi,yi] 1

-- | Henon map chaotic generator (cubic interpolation).
henonC :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen
henonC r freq a b x0 x1 = mkOsc r "HenonC" [freq, a, b, x0, x1] 1

-- | Henon map chaotic generator (linear interpolation).
henonL :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen
henonL r freq a b x0 x1 = mkOsc r "HenonL" [freq, a, b, x0, x1] 1

-- | Henon map chaotic generator (no interpolation).
henonN :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen
henonN r freq a b x0 x1 = mkOsc r "HenonN" [freq, a, b, x0, x1] 1

-- | Latoocarfian chaotic function (cubic interpolation).
latoocarfianC :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen
latoocarfianC r f a b c d xi yi = mkOsc r "LatoocarfianC" [f, a, b, c, d, xi, yi] 1

-- | Latoocarfian chaotic function (linear interpolation).
latoocarfianL :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen
latoocarfianL r f a b c d xi yi = mkOsc r "LatoocarfianL" [f, a, b, c, d, xi, yi] 1

-- | Latoocarfian chaotic function (no interpolation).
latoocarfianN :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen
latoocarfianN r f a b c d xi yi = mkOsc r "LatoocarfianN" [f, a, b, c, d, xi, yi] 1

-- | Linear congruential chaotic generator (cubic interpolation).
linCongC :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen
linCongC r f a c m xi = mkOsc r "LinCongC" [f, a, c, m, xi] 1

-- | Linear congruential chaotic generator (linear interpolation).
linCongL :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen
linCongL r f a c m xi = mkOsc r "LinCongL" [f, a, c, m, xi] 1

-- | Linear congruential chaotic generator (no interpolation).
linCongN :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen
linCongN r f a c m xi = mkOsc r "LinCongN" [f, a, c, m, xi] 1

-- | The logistic map y = chaosParam * y * (1.0 - y)
logistic :: Rate -> UGen -> UGen -> UGen -> UGen
logistic r cp f i = mkOsc r "Logistic" [cp,f,i] 1

-- | Lorenz chaotic generator (linear interpolation).
lorenzL :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen
lorenzL rate freq s r b h xi yi zi = mkOsc rate "LorenzL" [freq, s, r, b, h, xi, yi, zi] 1

-- | General quadratic map chaotic generator (cubic interpolation).
quadC :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen
quadC r freq a b c xi = mkOsc r "QuadC" [freq, a, b, c, xi] 1

-- | General quadratic map chaotic generator (linear interpolation).
quadL :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen
quadL r freq a b c xi = mkOsc r "QuadL" [freq, a, b, c, xi] 1

-- | General quadratic map chaotic generator (no interpolation).
quadN :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen
quadN r freq a b c xi = mkOsc r "QuadN" [freq, a, b, c, xi] 1

-- Local Variables:
-- truncate-lines:t
-- End: