module Synthesizer.State.Noise where
import qualified Synthesizer.State.Signal as Sig
import qualified Algebra.Real as Real
import qualified Algebra.Ring as Ring
import System.Random (Random, RandomGen, randomR, mkStdGen, )
import qualified System.Random as Rnd
import qualified Prelude as P
import PreludeBase
import NumericPrelude
white :: (Ring.C y, Random y) =>
Sig.T y
white = whiteGen (mkStdGen 12354)
whiteGen ::
(Ring.C y, Random y, RandomGen g) =>
g -> Sig.T y
whiteGen = randomRs (1,1)
whiteQuadraticBSplineGen ::
(Ring.C y, Random y, RandomGen g) =>
g -> Sig.T y
whiteQuadraticBSplineGen g =
let (g0,gr) = Rnd.split g
(g1,g2) = Rnd.split gr
in whiteGen g0 `Sig.mix`
whiteGen g1 `Sig.mix`
whiteGen g2
randomPeeks :: (Real.C y, Random y) =>
Sig.T y
-> Sig.T Bool
randomPeeks =
randomPeeksGen (mkStdGen 876)
randomPeeksGen :: (Real.C y, Random y, RandomGen g) =>
g
-> Sig.T y
-> Sig.T Bool
randomPeeksGen =
Sig.zipWith (<) . randomRs (0,1)
randomRs ::
(Ring.C y, Random y, RandomGen g) =>
(y,y) -> g -> Sig.T y
randomRs bnd = Sig.unfoldR (Just . randomR bnd)