{-# LANGUAGE NoImplicitPrelude #-}
module Synthesizer.Physical.Noise where

import qualified Synthesizer.SampleRateContext.Noise as NoiseC
-- import qualified Synthesizer.SampleRateContext.Signal as SigC

import qualified Synthesizer.Physical.Signal as SigP

import System.Random (Random)

import qualified Algebra.Algebraic      as Algebraic
import qualified Algebra.Ring           as Ring

-- import PreludeBase
-- import NumericPrelude


{- * Noise -}

white :: (Ring.C yv, Random yv, Algebraic.C q') =>
      q' {-^ sample rate -}
   -> q'  {-^ width of the frequency band -}
   -> q'  {-^ volume caused by the given frequency band -}
   -> SigP.T t q' y q' yv
         {-^ noise -}
white sampleRate bandWidth volume =
   SigP.lift0 (NoiseC.white bandWidth volume) sampleRate