{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE FlexibleContexts #-}
module Synthesizer.Generic.Noise where
import qualified Synthesizer.State.Noise as Noise
import qualified Synthesizer.Generic.Signal as SigG
import qualified Synthesizer.State.Signal as SigS
import qualified Algebra.RealRing as RealRing
import qualified Algebra.Ring as Ring
import System.Random (Random, RandomGen, randomR, mkStdGen, )
import NumericPrelude.Numeric
import NumericPrelude.Base
white ::
(Ring.C y, Random y, SigG.Write sig y) =>
SigG.LazySize -> sig y
white :: forall y (sig :: * -> *).
(C y, Random y, Write sig y) =>
LazySize -> sig y
white LazySize
size =
LazySize -> T y -> sig y
forall (sig :: * -> *) y. Write sig y => LazySize -> T y -> sig y
SigG.fromState LazySize
size (T y -> sig y) -> T y -> sig y
forall a b. (a -> b) -> a -> b
$ T y
forall y. (C y, Random y) => T y
Noise.white
whiteGen ::
(Ring.C y, Random y, RandomGen g, SigG.Write sig y) =>
SigG.LazySize -> g -> sig y
whiteGen :: forall y g (sig :: * -> *).
(C y, Random y, RandomGen g, Write sig y) =>
LazySize -> g -> sig y
whiteGen LazySize
size =
LazySize -> T y -> sig y
forall (sig :: * -> *) y. Write sig y => LazySize -> T y -> sig y
SigG.fromState LazySize
size (T y -> sig y) -> (g -> T y) -> g -> sig y
forall b c a. (b -> c) -> (a -> b) -> a -> c
. g -> T y
forall y g. (C y, Random y, RandomGen g) => g -> T y
Noise.whiteGen
whiteQuadraticBSplineGen ::
(Ring.C y, Random y, RandomGen g, SigG.Write sig y) =>
SigG.LazySize -> g -> sig y
whiteQuadraticBSplineGen :: forall y g (sig :: * -> *).
(C y, Random y, RandomGen g, Write sig y) =>
LazySize -> g -> sig y
whiteQuadraticBSplineGen LazySize
size =
LazySize -> T y -> sig y
forall (sig :: * -> *) y. Write sig y => LazySize -> T y -> sig y
SigG.fromState LazySize
size (T y -> sig y) -> (g -> T y) -> g -> sig y
forall b c a. (b -> c) -> (a -> b) -> a -> c
. g -> T y
forall y g. (C y, Random y, RandomGen g) => g -> T y
Noise.whiteQuadraticBSplineGen
randomPeeks ::
(RealRing.C y, Random y, SigG.Transform sig y, SigG.Transform sig Bool) =>
sig y
-> sig Bool
randomPeeks :: forall y (sig :: * -> *).
(C y, Random y, Transform sig y, Transform sig Bool) =>
sig y -> sig Bool
randomPeeks =
StdGen -> sig y -> sig Bool
forall y g (sig :: * -> *).
(C y, Random y, RandomGen g, Transform sig y,
Transform sig Bool) =>
g -> sig y -> sig Bool
randomPeeksGen (Int -> StdGen
mkStdGen Int
876)
randomPeeksGen ::
(RealRing.C y, Random y, RandomGen g, SigG.Transform sig y, SigG.Transform sig Bool) =>
g
-> sig y
-> sig Bool
randomPeeksGen :: forall y g (sig :: * -> *).
(C y, Random y, RandomGen g, Transform sig y,
Transform sig Bool) =>
g -> sig y -> sig Bool
randomPeeksGen =
(y -> y -> Bool) -> T y -> sig y -> sig Bool
forall (sig :: * -> *) b c a.
(Transform sig b, Transform sig c) =>
(a -> b -> c) -> T a -> sig b -> sig c
SigG.zipWithState y -> y -> Bool
forall a. Ord a => a -> a -> Bool
(<) (T y -> sig y -> sig Bool) -> (g -> T y) -> g -> sig y -> sig Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (g -> Maybe (y, g)) -> g -> T y
forall acc y. (acc -> Maybe (y, acc)) -> acc -> T y
SigS.unfoldR ((y, g) -> Maybe (y, g)
forall a. a -> Maybe a
Just ((y, g) -> Maybe (y, g)) -> (g -> (y, g)) -> g -> Maybe (y, g)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (y, y) -> g -> (y, g)
forall g. RandomGen g => (y, y) -> g -> (y, g)
forall a g. (Random a, RandomGen g) => (a, a) -> g -> (a, g)
randomR (y
0,y
1))