module Synthesizer.Dimensional.Straight.Signal where
import qualified Synthesizer.Dimensional.Abstraction.RateIndependent as Ind
import qualified Synthesizer.Format as Format
import qualified Synthesizer.Dimensional.RatePhantom as RP
import qualified Synthesizer.State.Signal as Sig
import PreludeBase
newtype T seq yv =
Cons {
samples :: seq yv
}
instance Functor seq => Functor (T seq) where
fmap f = Cons . fmap f . samples
instance Format.C seq => Format.C (T seq) where
format p = Format.format p . samples
instance (Format.C seq, Show y) => Show (T seq y) where
showsPrec = Format.format
type R s yv = RP.T s S yv
type S = T Sig.T
type Binary s = R s Bool
replaceSamples :: Sig.T yv1 -> R s yv0 -> R s yv1
replaceSamples ss _ = fromSamples ss
processSamples :: Ind.C w =>
(seq0 yv0 -> seq1 yv1) -> w (T seq0) yv0 -> w (T seq1) yv1
processSamples f =
Ind.processSignal (processSamplesPrivate f)
processSamplesPrivate ::
(seq0 yv0 -> seq1 yv1) -> T seq0 yv0 -> T seq1 yv1
processSamplesPrivate f =
Cons . f . samples
fromSamples :: Sig.T yv -> R s yv
fromSamples = RP.fromSignal . Cons
toSamples :: Ind.C w => w (T seq) yv -> seq yv
toSamples = samples . Ind.toSignal