module Synthesizer.Dimensional.Rate.Cut (
take, drop,
) where
import qualified Synthesizer.Dimensional.Abstraction.Homogeneous as Hom
import qualified Synthesizer.Dimensional.RatePhantom as RP
import qualified Synthesizer.Dimensional.Process as Proc
import qualified Synthesizer.Dimensional.RateAmplitude.Signal as SigA
import qualified Synthesizer.State.Signal as Sig
import Synthesizer.Dimensional.RateAmplitude.Signal
(toTimeScalar, )
import qualified Number.DimensionTerm as DN
import qualified Algebra.DimensionTerm as Dim
import qualified Algebra.RealField as RealField
import NumericPrelude hiding (negate)
import Prelude hiding (take, drop, )
take :: (Hom.C sig, RealField.C t, Dim.C u) =>
DN.T u t -> Proc.T s u t (RP.T s sig y -> RP.T s sig y)
take t' =
do t <- toTimeScalar t'
return $ Hom.processSamples (Sig.take (RealField.round t))
drop :: (Hom.C sig, RealField.C t, Dim.C u) =>
DN.T u t -> Proc.T s u t (RP.T s sig y -> RP.T s sig y)
drop t' =
do t <- toTimeScalar t'
return $ Hom.processSamples (Sig.drop (RealField.round t))