module Synthesizer.Inference.Reader.Play where

import qualified BinarySample as BinSmp

import qualified Synthesizer.Inference.Reader.Signal  as SigR
import qualified Synthesizer.Inference.Reader.Process as ProcR
import qualified Synthesizer.Physical.Play           as PlayP

import qualified Algebra.OccasionallyScalar as OccScalar
import qualified Algebra.VectorSpace        as VectorSpace
import qualified Algebra.RealField          as RealField
import qualified Algebra.Field              as Field


auto :: (RealField.C t, BinSmp.C yv,
         Field.C t', OccScalar.C t t',
         Field.C y', OccScalar.C y y',
         VectorSpace.C y yv) =>
   t' -> y' -> t' -> ProcR.T t t' (SigR.T y y' yv) -> IO ()
auto freqUnit amp sampleRate proc =
   PlayP.auto freqUnit amp (SigR.run sampleRate proc)