packages feed

synthesizer-dimensional 0.8.1.1 → 0.9

raw patch · 21 files changed

+348/−251 lines, 21 filesdep ~randomdep ~semigroupsdep ~storablevectorPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: random, semigroups, storablevector, synthesizer-core, utility-ht

API changes (from Hackage documentation)

- Synthesizer.Dimensional.Process: intFromTime :: (C t, C u) => String -> T u t -> T s u t Int
- Synthesizer.Dimensional.Process: intFromTime98 :: (C t, RealFrac t, C u) => String -> T u t -> T s u t Int
- Synthesizer.Dimensional.Rate.Dirac: instance Synthesizer.Generic.Cut.Read (sig GHC.Types.Bool) => Synthesizer.Generic.Cut.Read (Synthesizer.Dimensional.Rate.Dirac.T s sig)
+ Synthesizer.Dimensional.Duration: Cons :: i -> T s i
+ Synthesizer.Dimensional.Duration: fromTime :: (C u, C i, C t) => T u t -> T s u t (T s i)
+ Synthesizer.Dimensional.Duration: newtype T s i
+ Synthesizer.Dimensional.Duration: toTime :: (C u, C i, C t) => T s u t (T s i -> T u t)
+ Synthesizer.Dimensional.Rate.Dirac: instance Synthesizer.Generic.Cut.Consume (sig GHC.Types.Bool) => Synthesizer.Generic.Cut.Consume (Synthesizer.Dimensional.Rate.Dirac.T s sig)
+ Synthesizer.Dimensional.Rate.Filter: delayStorable :: (C yv, C t, C u, Storable yv) => T s u t (T s Int -> T (Phantom s) amp (T yv) -> T (Phantom s) amp (T yv))
+ Synthesizer.Dimensional.RateAmplitude.Cut: arrangeStorableTypedVolume :: (C t, C u, RealFrac t, C y, C v, C y yv, Storable yv, Size size) => T v y -> T u t -> T s u t (T (T t) (T (Phantom s) (Dimensional v y) (Vector size yv)) -> T (Phantom s) (Dimensional v y) (Vector size yv))
+ Synthesizer.Dimensional.Signal: storeTyped :: (Size size, C t, C u, Storable yv) => T s u t (T (Phantom s) amp (T yv) -> T (Phantom s) amp (Vector size yv))
+ Synthesizer.Dimensional.Signal.Private: lazyFromDefaultTypedVector :: Storable yv => T rate amp (DefaultVector yv) -> T rate amp (T yv)
+ Synthesizer.Dimensional.Signal.Private: storeTyped :: (Size size, C t, C u, Storable yv) => T s u t (T (Phantom s) amp (T yv) -> T (Phantom s) amp (Vector size yv))
- Synthesizer.Dimensional.Amplitude: type Dimensional v y = Numeric (T v y)
+ Synthesizer.Dimensional.Amplitude: type Dimensional v y = Numeric T v y
- Synthesizer.Dimensional.Amplitude.Control: piecewiseConstantGeneric :: Write sig y => T rate amp (T y) -> T rate amp (sig y)
+ Synthesizer.Dimensional.Amplitude.Control: piecewiseConstantGeneric :: Produce sig y => T rate amp (T y) -> T rate amp (sig y)
- Synthesizer.Dimensional.Amplitude.Cut: selectBool :: (Ord y, C y, C u, C y yv, Read sig yv, Transform sig Bool, Transform sig yv) => Signal s u y sig yv -> Signal s u y sig yv -> T (Phantom s) Abstract (sig Bool) -> Signal s u y sig yv
+ Synthesizer.Dimensional.Amplitude.Cut: selectBool :: (Ord y, C y, C u, C y yv, Consume sig yv, Transform sig Bool, Transform sig yv) => Signal s u y sig yv -> Signal s u y sig yv -> T (Phantom s) Abstract (sig Bool) -> Signal s u y sig yv
- Synthesizer.Dimensional.Amplitude.Cut: zip :: (Ord y, C y, C u, C y yv0, C y yv1, Read sig yv0, Transform sig yv1, Transform sig (yv0, yv1)) => Signal s u y sig yv0 -> Signal s u y sig yv1 -> Signal s u y sig (yv0, yv1)
+ Synthesizer.Dimensional.Amplitude.Cut: zip :: (Ord y, C y, C u, C y yv0, C y yv1, Consume sig yv0, Transform sig yv1, Transform sig (yv0, yv1)) => Signal s u y sig yv0 -> Signal s u y sig yv1 -> Signal s u y sig (yv0, yv1)
- Synthesizer.Dimensional.Amplitude.Cut: zip3 :: (Ord y, C y, C u, C y yv0, C y yv1, C y yv2, Read sig yv0, Read sig yv1, Transform sig yv2, Transform sig (yv0, yv1, yv2)) => Signal s u y sig yv0 -> Signal s u y sig yv1 -> Signal s u y sig yv2 -> Signal s u y sig (yv0, yv1, yv2)
+ Synthesizer.Dimensional.Amplitude.Cut: zip3 :: (Ord y, C y, C u, C y yv0, C y yv1, C y yv2, Consume sig yv0, Consume sig yv1, Transform sig yv2, Transform sig (yv0, yv1, yv2)) => Signal s u y sig yv0 -> Signal s u y sig yv1 -> Signal s u y sig yv2 -> Signal s u y sig (yv0, yv1, yv2)
- Synthesizer.Dimensional.Amplitude.Cut: zip3Volume :: (C y, C u, C y yv0, C y yv1, C y yv2, Read sig yv0, Read sig yv1, Transform sig yv2, Transform sig (yv0, yv1, yv2)) => T u y -> Signal s u y sig yv0 -> Signal s u y sig yv1 -> Signal s u y sig yv2 -> Signal s u y sig (yv0, yv1, yv2)
+ Synthesizer.Dimensional.Amplitude.Cut: zip3Volume :: (C y, C u, C y yv0, C y yv1, C y yv2, Consume sig yv0, Consume sig yv1, Transform sig yv2, Transform sig (yv0, yv1, yv2)) => T u y -> Signal s u y sig yv0 -> Signal s u y sig yv1 -> Signal s u y sig yv2 -> Signal s u y sig (yv0, yv1, yv2)
- Synthesizer.Dimensional.Amplitude.Cut: zipVolume :: (C y, C u, C y yv0, C y yv1, Read sig yv0, Transform sig yv1, Transform sig (yv0, yv1)) => T u y -> Signal s u y sig yv0 -> Signal s u y sig yv1 -> Signal s u y sig (yv0, yv1)
+ Synthesizer.Dimensional.Amplitude.Cut: zipVolume :: (C y, C u, C y yv0, C y yv1, Consume sig yv0, Transform sig yv1, Transform sig (yv0, yv1)) => T u y -> Signal s u y sig yv0 -> Signal s u y sig yv1 -> Signal s u y sig (yv0, yv1)
- Synthesizer.Dimensional.Arrow: ($/-) :: (C amp1, Functor f, C y0, C arrow) => f (Single arrow (Numeric amp0) amp1 y0 yv1) -> amp0 -> f (T (Phantom s) amp1 (T yv1))
+ Synthesizer.Dimensional.Arrow: ($/-) :: forall amp1 f y0 (arrow :: Type -> Type -> Type) amp0 yv1 s. (C amp1, Functor f, C y0, C arrow) => f (Single arrow (Numeric amp0) amp1 y0 yv1) -> amp0 -> f (T (Phantom s) amp1 (T yv1))
- Synthesizer.Dimensional.Arrow: ($/:) :: (Applicative f, Transform sig yv0, Transform sig yv1, Applicable arrow rate) => f (Single arrow amp0 amp1 yv0 yv1) -> f (T rate amp0 (sig yv0)) -> f (T rate amp1 (sig yv1))
+ Synthesizer.Dimensional.Arrow: ($/:) :: forall f sig yv0 yv1 (arrow :: Type -> Type -> Type) rate amp0 amp1. (Applicative f, Transform sig yv0, Transform sig yv1, Applicable arrow rate) => f (Single arrow amp0 amp1 yv0 yv1) -> f (T rate amp0 (sig yv0)) -> f (T rate amp1 (sig yv1))
- Synthesizer.Dimensional.Arrow: Cons :: (Amplitude sample0 -> (arrow (Displacement sample0) (Displacement sample1), Amplitude sample1)) -> T arrow sample0 sample1
+ Synthesizer.Dimensional.Arrow: Cons :: (Amplitude sample0 -> (arrow (Displacement sample0) (Displacement sample1), Amplitude sample1)) -> T (arrow :: Type -> Type -> Type) sample0 sample1
- Synthesizer.Dimensional.Arrow: apply :: (Transform sig (Displacement sample0), Transform sig (Displacement sample1), Applicable arrow rate) => T arrow sample0 sample1 -> T rate (Amplitude sample0) (sig (Displacement sample0)) -> T rate (Amplitude sample1) (sig (Displacement sample1))
+ Synthesizer.Dimensional.Arrow: apply :: forall sig sample0 sample1 (arrow :: Type -> Type -> Type) rate. (Transform sig (Displacement sample0), Transform sig (Displacement sample1), Applicable arrow rate) => T arrow sample0 sample1 -> T rate (Amplitude sample0) (sig (Displacement sample0)) -> T rate (Amplitude sample1) (sig (Displacement sample1))
- Synthesizer.Dimensional.Arrow: applyConst :: (C amp1, C y0, C arrow) => Single arrow (Numeric amp0) amp1 y0 yv1 -> amp0 -> T (Phantom s) amp1 (T yv1)
+ Synthesizer.Dimensional.Arrow: applyConst :: forall amp1 y0 (arrow :: Type -> Type -> Type) amp0 yv1 s. (C amp1, C y0, C arrow) => Single arrow (Numeric amp0) amp1 y0 yv1 -> amp0 -> T (Phantom s) amp1 (T yv1)
- Synthesizer.Dimensional.Arrow: applyFlat :: (C yv0 amp0, Transform sig yv0, Transform sig yv1, Applicable arrow rate) => Single arrow (Flat yv0) amp1 yv0 yv1 -> T rate amp0 (sig yv0) -> T rate amp1 (sig yv1)
+ Synthesizer.Dimensional.Arrow: applyFlat :: forall yv0 amp0 sig yv1 (arrow :: Type -> Type -> Type) rate amp1. (C yv0 amp0, Transform sig yv0, Transform sig yv1, Applicable arrow rate) => Single arrow (Flat yv0) amp1 yv0 yv1 -> T rate amp0 (sig yv0) -> T rate amp1 (sig yv1)
- Synthesizer.Dimensional.Arrow: arr :: (Arrow arrow, Build sample0, Inspect sample1) => (sample0 -> sample1) -> T arrow sample0 sample1
+ Synthesizer.Dimensional.Arrow: arr :: forall (arrow :: Type -> Type -> Type) sample0 sample1. (Arrow arrow, Build sample0, Inspect sample1) => (sample0 -> sample1) -> T arrow sample0 sample1
- Synthesizer.Dimensional.Arrow: canonicalizeFlat :: (C y flat, Arrow arrow) => Single arrow flat (Flat y) y y
+ Synthesizer.Dimensional.Arrow: canonicalizeFlat :: forall y flat (arrow :: Type -> Type -> Type). (C y flat, Arrow arrow) => Single arrow flat (Flat y) y y
- Synthesizer.Dimensional.Arrow: class C arrow => Applicable arrow rate
+ Synthesizer.Dimensional.Arrow: class C arrow => Applicable (arrow :: Type -> Type -> Type) rate
- Synthesizer.Dimensional.Arrow: compose :: Category arrow => T arrow sample0 sample1 -> T arrow sample1 sample2 -> T arrow sample0 sample2
+ Synthesizer.Dimensional.Arrow: compose :: forall (arrow :: Type -> Type -> Type) sample0 sample1 sample2. Category arrow => T arrow sample0 sample1 -> T arrow sample1 sample2 -> T arrow sample0 sample2
- Synthesizer.Dimensional.Arrow: double :: Arrow arrow => T arrow sample (sample, sample)
+ Synthesizer.Dimensional.Arrow: double :: forall (arrow :: Type -> Type -> Type) sample. Arrow arrow => T arrow sample (sample, sample)
- Synthesizer.Dimensional.Arrow: fanout :: Arrow arrow => T arrow sample sample0 -> T arrow sample sample1 -> T arrow sample (sample0, sample1)
+ Synthesizer.Dimensional.Arrow: fanout :: forall (arrow :: Type -> Type -> Type) sample sample0 sample1. Arrow arrow => T arrow sample sample0 -> T arrow sample sample1 -> T arrow sample (sample0, sample1)
- Synthesizer.Dimensional.Arrow: first :: Arrow arrow => T arrow sample0 sample1 -> T arrow (sample0, sample) (sample1, sample)
+ Synthesizer.Dimensional.Arrow: first :: forall (arrow :: Type -> Type -> Type) sample0 sample1 sample. Arrow arrow => T arrow sample0 sample1 -> T arrow (sample0, sample) (sample1, sample)
- Synthesizer.Dimensional.Arrow: forceDimensionalAmplitude :: (C v, C y, C y yv, Arrow arrow) => T v y -> Single arrow (Dimensional v y) (Dimensional v y) yv yv
+ Synthesizer.Dimensional.Arrow: forceDimensionalAmplitude :: forall v y yv (arrow :: Type -> Type -> Type). (C v, C y, C y yv, Arrow arrow) => T v y -> Single arrow (Dimensional v y) (Dimensional v y) yv yv
- Synthesizer.Dimensional.Arrow: id :: Category arrow => T arrow sample sample
+ Synthesizer.Dimensional.Arrow: id :: forall (arrow :: Type -> Type -> Type) sample. Category arrow => T arrow sample sample
- Synthesizer.Dimensional.Arrow: independentMap :: Arrow arrow => (Amplitude sample0 -> Amplitude sample1) -> (Displacement sample0 -> Displacement sample1) -> T arrow sample0 sample1
+ Synthesizer.Dimensional.Arrow: independentMap :: forall (arrow :: Type -> Type -> Type) sample0 sample1. Arrow arrow => (Amplitude sample0 -> Amplitude sample1) -> (Displacement sample0 -> Displacement sample1) -> T arrow sample0 sample1
- Synthesizer.Dimensional.Arrow: loop :: ArrowLoop arrow => T arrow (restSampleIn, sample) (restSampleOut, sample) -> T arrow restSampleIn restSampleOut
+ Synthesizer.Dimensional.Arrow: loop :: forall (arrow :: Type -> Type -> Type) restSampleIn sample restSampleOut. ArrowLoop arrow => T arrow (restSampleIn, sample) (restSampleOut, sample) -> T arrow restSampleIn restSampleOut
- Synthesizer.Dimensional.Arrow: loop2Volume :: (C y0, C y0 yv0, C v0, C y1, C y1 yv1, C v1, ArrowLoop arrow) => (T v0 y0, T v1 y1) -> T arrow (restSampleIn, (T (Dimensional v0 y0) yv0, T (Dimensional v1 y1) yv1)) (restSampleOut, (T (Dimensional v0 y0) yv0, T (Dimensional v1 y1) yv1)) -> T arrow restSampleIn restSampleOut
+ Synthesizer.Dimensional.Arrow: loop2Volume :: forall y0 yv0 v0 y1 yv1 v1 (arrow :: Type -> Type -> Type) restSampleIn restSampleOut. (C y0, C y0 yv0, C v0, C y1, C y1 yv1, C v1, ArrowLoop arrow) => (T v0 y0, T v1 y1) -> T arrow (restSampleIn, (T (Dimensional v0 y0) yv0, T (Dimensional v1 y1) yv1)) (restSampleOut, (T (Dimensional v0 y0) yv0, T (Dimensional v1 y1) yv1)) -> T arrow restSampleIn restSampleOut
- Synthesizer.Dimensional.Arrow: loopVolume :: (C y, C y yv, C v, ArrowLoop arrow) => T v y -> T arrow (restSampleIn, T (Dimensional v y) yv) (restSampleOut, T (Dimensional v y) yv) -> T arrow restSampleIn restSampleOut
+ Synthesizer.Dimensional.Arrow: loopVolume :: forall y yv v (arrow :: Type -> Type -> Type) restSampleIn restSampleOut. (C y, C y yv, C v, ArrowLoop arrow) => T v y -> T arrow (restSampleIn, T (Dimensional v y) yv) (restSampleOut, T (Dimensional v y) yv) -> T arrow restSampleIn restSampleOut
- Synthesizer.Dimensional.Arrow: newtype T arrow sample0 sample1
+ Synthesizer.Dimensional.Arrow: newtype T (arrow :: Type -> Type -> Type) sample0 sample1
- Synthesizer.Dimensional.Arrow: second :: Arrow arrow => T arrow sample0 sample1 -> T arrow (sample, sample0) (sample, sample1)
+ Synthesizer.Dimensional.Arrow: second :: forall (arrow :: Type -> Type -> Type) sample0 sample1 sample. Arrow arrow => T arrow sample0 sample1 -> T arrow (sample, sample0) (sample, sample1)
- Synthesizer.Dimensional.Arrow: split :: Arrow arrow => T arrow sample0 sample1 -> T arrow sample2 sample3 -> T arrow (sample0, sample2) (sample1, sample3)
+ Synthesizer.Dimensional.Arrow: split :: forall (arrow :: Type -> Type -> Type) sample0 sample1 sample2 sample3. Arrow arrow => T arrow sample0 sample1 -> T arrow sample2 sample3 -> T arrow (sample0, sample2) (sample1, sample3)
- Synthesizer.Dimensional.Arrow: type Single arrow amp0 amp1 yv0 yv1 = T arrow (T amp0 yv0) (T amp1 yv1)
+ Synthesizer.Dimensional.Arrow: type Single (arrow :: Type -> Type -> Type) amp0 amp1 yv0 yv1 = T arrow T amp0 yv0 T amp1 yv1
- Synthesizer.Dimensional.Causal.ControlledProcess: processAsynchronous1 :: (C global ic sampleIn sampleOut, C ecAmp, C u, C t) => T t (RateDep s ic) -> T s u t (T (T ecAmp ec) (T global (RateDep s ic))) -> T (Recip u) t -> (forall r. T r u t (Signal r ecAmp ec)) -> T s u t (T s sampleIn sampleOut)
+ Synthesizer.Dimensional.Causal.ControlledProcess: processAsynchronous1 :: (C global ic sampleIn sampleOut, C ecAmp, C u, C t) => T t (RateDep s ic) -> T s u t (T (T ecAmp ec) (T global (RateDep s ic))) -> T (Recip u) t -> (forall r. () => T r u t (Signal r ecAmp ec)) -> T s u t (T s sampleIn sampleOut)
- Synthesizer.Dimensional.Causal.ControlledProcess: processAsynchronous2 :: (C global ic sampleIn sampleOut, C ecAmp0, C ecAmp1, C u, C t) => T t (RateDep s ic) -> T s u t (T (T ecAmp0 ec0, T ecAmp1 ec1) (T global (RateDep s ic))) -> T (Recip u) t -> (forall r. T r u t (Signal r ecAmp0 ec0)) -> (forall r. T r u t (Signal r ecAmp1 ec1)) -> T s u t (T s sampleIn sampleOut)
+ Synthesizer.Dimensional.Causal.ControlledProcess: processAsynchronous2 :: (C global ic sampleIn sampleOut, C ecAmp0, C ecAmp1, C u, C t) => T t (RateDep s ic) -> T s u t (T (T ecAmp0 ec0, T ecAmp1 ec1) (T global (RateDep s ic))) -> T (Recip u) t -> (forall r. () => T r u t (Signal r ecAmp0 ec0)) -> (forall r. () => T r u t (Signal r ecAmp1 ec1)) -> T s u t (T s sampleIn sampleOut)
- Synthesizer.Dimensional.Causal.ControlledProcess: processAsynchronousBuffered2 :: (C global ic sampleIn sampleOut, C ecAmp0, C ecAmp1, C u, C t) => T t (RateDep s ic) -> T s u t (T (T ecAmp0 ec0, T ecAmp1 ec1) (T global (RateDep s ic))) -> T (Recip u) t -> (forall r. T r u t (Signal r ecAmp0 ec0)) -> (forall r. T r u t (Signal r ecAmp1 ec1)) -> T s u t (T s sampleIn sampleOut)
+ Synthesizer.Dimensional.Causal.ControlledProcess: processAsynchronousBuffered2 :: (C global ic sampleIn sampleOut, C ecAmp0, C ecAmp1, C u, C t) => T t (RateDep s ic) -> T s u t (T (T ecAmp0 ec0, T ecAmp1 ec1) (T global (RateDep s ic))) -> T (Recip u) t -> (forall r. () => T r u t (Signal r ecAmp0 ec0)) -> (forall r. () => T r u t (Signal r ecAmp1 ec1)) -> T s u t (T s sampleIn sampleOut)
- Synthesizer.Dimensional.Causal.FilterParameter: allpassCascade :: (C u, C q, Arrow arrow) => Int -> q -> T s u q (T arrow (Dimensional (Recip u) q q) (T AllpassCascadeGlobal (RateDep s (Parameter q))))
+ Synthesizer.Dimensional.Causal.FilterParameter: allpassCascade :: forall u q (arrow :: Type -> Type -> Type) s. (C u, C q, Arrow arrow) => Int -> q -> T s u q (T arrow (Dimensional (Recip u) q q) (T AllpassCascadeGlobal (RateDep s (Parameter q))))
- Synthesizer.Dimensional.Causal.FilterParameter: allpassPhaser :: (C u, C q, Arrow arrow) => Int -> T s u q (T arrow (Dimensional Scalar q q, Dimensional (Recip u) q q) (T AllpassPhaserGlobal (RateDep s (q, Parameter q))))
+ Synthesizer.Dimensional.Causal.FilterParameter: allpassPhaser :: forall u q (arrow :: Type -> Type -> Type) s. (C u, C q, Arrow arrow) => Int -> T s u q (T arrow (Dimensional Scalar q q, Dimensional (Recip u) q q) (T AllpassPhaserGlobal (RateDep s (q, Parameter q))))
- Synthesizer.Dimensional.Causal.FilterParameter: butterworthHighpass :: (Arrow arrow, C q, Storable q, C u) => Int -> SecondOrderCascade s u q arrow
+ Synthesizer.Dimensional.Causal.FilterParameter: butterworthHighpass :: forall (arrow :: Type -> Type -> Type) q u s. (Arrow arrow, C q, Storable q, C u) => Int -> SecondOrderCascade s u q arrow
- Synthesizer.Dimensional.Causal.FilterParameter: butterworthLowpass :: (Arrow arrow, C q, Storable q, C u) => Int -> SecondOrderCascade s u q arrow
+ Synthesizer.Dimensional.Causal.FilterParameter: butterworthLowpass :: forall (arrow :: Type -> Type -> Type) q u s. (Arrow arrow, C q, Storable q, C u) => Int -> SecondOrderCascade s u q arrow
- Synthesizer.Dimensional.Causal.FilterParameter: chebyshevAHighpass :: (Arrow arrow, C q, Storable q, C u) => Int -> SecondOrderCascade s u q arrow
+ Synthesizer.Dimensional.Causal.FilterParameter: chebyshevAHighpass :: forall (arrow :: Type -> Type -> Type) q u s. (Arrow arrow, C q, Storable q, C u) => Int -> SecondOrderCascade s u q arrow
- Synthesizer.Dimensional.Causal.FilterParameter: chebyshevALowpass :: (Arrow arrow, C q, Storable q, C u) => Int -> SecondOrderCascade s u q arrow
+ Synthesizer.Dimensional.Causal.FilterParameter: chebyshevALowpass :: forall (arrow :: Type -> Type -> Type) q u s. (Arrow arrow, C q, Storable q, C u) => Int -> SecondOrderCascade s u q arrow
- Synthesizer.Dimensional.Causal.FilterParameter: chebyshevBHighpass :: (Arrow arrow, C q, Storable q, C u) => Int -> SecondOrderCascade s u q arrow
+ Synthesizer.Dimensional.Causal.FilterParameter: chebyshevBHighpass :: forall (arrow :: Type -> Type -> Type) q u s. (Arrow arrow, C q, Storable q, C u) => Int -> SecondOrderCascade s u q arrow
- Synthesizer.Dimensional.Causal.FilterParameter: chebyshevBLowpass :: (Arrow arrow, C q, Storable q, C u) => Int -> SecondOrderCascade s u q arrow
+ Synthesizer.Dimensional.Causal.FilterParameter: chebyshevBLowpass :: forall (arrow :: Type -> Type -> Type) q u s. (Arrow arrow, C q, Storable q, C u) => Int -> SecondOrderCascade s u q arrow
- Synthesizer.Dimensional.Causal.FilterParameter: firstOrder :: (C u, C q, Arrow arrow) => T s u q (T arrow (Dimensional (Recip u) q q) (T FirstOrderGlobal (RateDep s (Parameter q))))
+ Synthesizer.Dimensional.Causal.FilterParameter: firstOrder :: forall u q (arrow :: Type -> Type -> Type) s. (C u, C q, Arrow arrow) => T s u q (T arrow (Dimensional (Recip u) q q) (T FirstOrderGlobal (RateDep s (Parameter q))))
- Synthesizer.Dimensional.Causal.FilterParameter: moogLowpass :: (C u, C q, Arrow arrow) => Int -> T s u q (T arrow (Dimensional Scalar q q, Dimensional (Recip u) q q) (T MoogLowpassGlobal (RateDep s (Parameter q))))
+ Synthesizer.Dimensional.Causal.FilterParameter: moogLowpass :: forall u q (arrow :: Type -> Type -> Type) s. (C u, C q, Arrow arrow) => Int -> T s u q (T arrow (Dimensional Scalar q q, Dimensional (Recip u) q q) (T MoogLowpassGlobal (RateDep s (Parameter q))))
- Synthesizer.Dimensional.Causal.FilterParameter: universal :: (C u, C q, Arrow arrow) => T s u q (T arrow (Dimensional Scalar q q, Dimensional (Recip u) q q) (T UniversalGlobal (RateDep s (Parameter q))))
+ Synthesizer.Dimensional.Causal.FilterParameter: universal :: forall u q (arrow :: Type -> Type -> Type) s. (C u, C q, Arrow arrow) => T s u q (T arrow (Dimensional Scalar q q, Dimensional (Recip u) q q) (T UniversalGlobal (RateDep s (Parameter q))))
- Synthesizer.Dimensional.Causal.Oscillator.Core: type Frequency u t = Numeric (T (Recip u) t)
+ Synthesizer.Dimensional.Causal.Oscillator.Core: type Frequency u t = Numeric T Recip u t
- Synthesizer.Dimensional.Causal.Oscillator.Core: type SampleFrequency u t = T (Frequency u t) t
+ Synthesizer.Dimensional.Causal.Oscillator.Core: type SampleFrequency u t = T Frequency u t t
- Synthesizer.Dimensional.Causal.Process: applyFlatFst :: (C yv amp, Read sig yv) => T s (T (Flat yv) yv, restSampleIn) restSampleOut -> T (Phantom s) amp (sig yv) -> T s restSampleIn restSampleOut
+ Synthesizer.Dimensional.Causal.Process: applyFlatFst :: (C yv amp, Consume sig yv) => T s (T (Flat yv) yv, restSampleIn) restSampleOut -> T (Phantom s) amp (sig yv) -> T s restSampleIn restSampleOut
- Synthesizer.Dimensional.Causal.Process: applyFst :: Read sig yv => T s (T amp yv, restSampleIn) restSampleOut -> T (Phantom s) amp (sig yv) -> T s restSampleIn restSampleOut
+ Synthesizer.Dimensional.Causal.Process: applyFst :: Consume sig yv => T s (T amp yv, restSampleIn) restSampleOut -> T (Phantom s) amp (sig yv) -> T s restSampleIn restSampleOut
- Synthesizer.Dimensional.Causal.Process: applySnd :: Read sig yv => T s (restSampleIn, T amp yv) restSampleOut -> T (Phantom s) amp (sig yv) -> T s restSampleIn restSampleOut
+ Synthesizer.Dimensional.Causal.Process: applySnd :: Consume sig yv => T s (restSampleIn, T amp yv) restSampleOut -> T (Phantom s) amp (sig yv) -> T s restSampleIn restSampleOut
- Synthesizer.Dimensional.Causal.Process: compose :: Category arrow => T arrow sample0 sample1 -> T arrow sample1 sample2 -> T arrow sample0 sample2
+ Synthesizer.Dimensional.Causal.Process: compose :: forall (arrow :: Type -> Type -> Type) sample0 sample1 sample2. Category arrow => T arrow sample0 sample1 -> T arrow sample1 sample2 -> T arrow sample0 sample2
- Synthesizer.Dimensional.Causal.Process: fanout :: Arrow arrow => T arrow sample sample0 -> T arrow sample sample1 -> T arrow sample (sample0, sample1)
+ Synthesizer.Dimensional.Causal.Process: fanout :: forall (arrow :: Type -> Type -> Type) sample sample0 sample1. Arrow arrow => T arrow sample sample0 -> T arrow sample sample1 -> T arrow sample (sample0, sample1)
- Synthesizer.Dimensional.Causal.Process: feedFst :: Read sig yv => T (Phantom s) amp (sig yv) -> T s restSample (T amp yv, restSample)
+ Synthesizer.Dimensional.Causal.Process: feedFst :: Consume sig yv => T (Phantom s) amp (sig yv) -> T s restSample (T amp yv, restSample)
- Synthesizer.Dimensional.Causal.Process: feedSnd :: Read sig yv => T (Phantom s) amp (sig yv) -> T s restSample (restSample, T amp yv)
+ Synthesizer.Dimensional.Causal.Process: feedSnd :: Consume sig yv => T (Phantom s) amp (sig yv) -> T s restSample (restSample, T amp yv)
- Synthesizer.Dimensional.Causal.Process: first :: Arrow arrow => T arrow sample0 sample1 -> T arrow (sample0, sample) (sample1, sample)
+ Synthesizer.Dimensional.Causal.Process: first :: forall (arrow :: Type -> Type -> Type) sample0 sample1 sample. Arrow arrow => T arrow sample0 sample1 -> T arrow (sample0, sample) (sample1, sample)
- Synthesizer.Dimensional.Causal.Process: loop :: ArrowLoop arrow => T arrow (restSampleIn, sample) (restSampleOut, sample) -> T arrow restSampleIn restSampleOut
+ Synthesizer.Dimensional.Causal.Process: loop :: forall (arrow :: Type -> Type -> Type) restSampleIn sample restSampleOut. ArrowLoop arrow => T arrow (restSampleIn, sample) (restSampleOut, sample) -> T arrow restSampleIn restSampleOut
- Synthesizer.Dimensional.Causal.Process: loopVolume :: (C y, C y yv, C v, ArrowLoop arrow) => T v y -> T arrow (restSampleIn, T (Dimensional v y) yv) (restSampleOut, T (Dimensional v y) yv) -> T arrow restSampleIn restSampleOut
+ Synthesizer.Dimensional.Causal.Process: loopVolume :: forall y yv v (arrow :: Type -> Type -> Type) restSampleIn restSampleOut. (C y, C y yv, C v, ArrowLoop arrow) => T v y -> T arrow (restSampleIn, T (Dimensional v y) yv) (restSampleOut, T (Dimensional v y) yv) -> T arrow restSampleIn restSampleOut
- Synthesizer.Dimensional.Causal.Process: second :: Arrow arrow => T arrow sample0 sample1 -> T arrow (sample, sample0) (sample, sample1)
+ Synthesizer.Dimensional.Causal.Process: second :: forall (arrow :: Type -> Type -> Type) sample0 sample1 sample. Arrow arrow => T arrow sample0 sample1 -> T arrow (sample, sample0) (sample, sample1)
- Synthesizer.Dimensional.Causal.Process: split :: Arrow arrow => T arrow sample0 sample1 -> T arrow sample2 sample3 -> T arrow (sample0, sample2) (sample1, sample3)
+ Synthesizer.Dimensional.Causal.Process: split :: forall (arrow :: Type -> Type -> Type) sample0 sample1 sample2 sample3. Arrow arrow => T arrow sample0 sample1 -> T arrow sample2 sample3 -> T arrow (sample0, sample2) (sample1, sample3)
- Synthesizer.Dimensional.Causal.Process: type Single s amp0 amp1 yv0 yv1 = Single (Core s) amp0 amp1 yv0 yv1
+ Synthesizer.Dimensional.Causal.Process: type Single s amp0 amp1 yv0 yv1 = Single Core s amp0 amp1 yv0 yv1
- Synthesizer.Dimensional.Causal.Process: type T s sample0 sample1 = T (Core s) sample0 sample1
+ Synthesizer.Dimensional.Causal.Process: type T s sample0 sample1 = T Core s sample0 sample1
- Synthesizer.Dimensional.ChunkySize.Signal: length :: Read sig => Signal s amp sig -> Size s
+ Synthesizer.Dimensional.ChunkySize.Signal: length :: Consume sig => Signal s amp sig -> Size s
- Synthesizer.Dimensional.ChunkySize.Signal: store :: Write sig yv => Size s -> Signal s amp (T yv) -> Signal s amp (sig yv)
+ Synthesizer.Dimensional.ChunkySize.Signal: store :: Produce sig yv => Size s -> Signal s amp (T yv) -> Signal s amp (sig yv)
- Synthesizer.Dimensional.Cyclic.Signal: fromSignal :: (C yv, Write sig yv) => Int -> sig yv -> T (sig yv)
+ Synthesizer.Dimensional.Cyclic.Signal: fromSignal :: (C yv, Produce sig yv) => Int -> sig yv -> T (sig yv)
- Synthesizer.Dimensional.Map: balanceLeft :: Arrow arrow => T arrow (sample0, (sample1, sample2)) ((sample0, sample1), sample2)
+ Synthesizer.Dimensional.Map: balanceLeft :: forall (arrow :: Type -> Type -> Type) sample0 sample1 sample2. Arrow arrow => T arrow (sample0, (sample1, sample2)) ((sample0, sample1), sample2)
- Synthesizer.Dimensional.Map: balanceRight :: Arrow arrow => T arrow ((sample0, sample1), sample2) (sample0, (sample1, sample2))
+ Synthesizer.Dimensional.Map: balanceRight :: forall (arrow :: Type -> Type -> Type) sample0 sample1 sample2. Arrow arrow => T arrow ((sample0, sample1), sample2) (sample0, (sample1, sample2))
- Synthesizer.Dimensional.Map: double :: Arrow arrow => T arrow sample (sample, sample)
+ Synthesizer.Dimensional.Map: double :: forall (arrow :: Type -> Type -> Type) sample. Arrow arrow => T arrow sample (sample, sample)
- Synthesizer.Dimensional.Map: forceDimensionalAmplitude :: (C v, C y, C y yv, Arrow arrow) => T v y -> Single arrow (Dimensional v y) (Dimensional v y) yv yv
+ Synthesizer.Dimensional.Map: forceDimensionalAmplitude :: forall v y yv (arrow :: Type -> Type -> Type). (C v, C y, C y yv, Arrow arrow) => T v y -> Single arrow (Dimensional v y) (Dimensional v y) yv yv
- Synthesizer.Dimensional.Map: forcePrimitiveAmplitude :: (Primitive amp, Arrow arrow) => Single arrow amp amp yv yv
+ Synthesizer.Dimensional.Map: forcePrimitiveAmplitude :: forall amp (arrow :: Type -> Type -> Type) yv. (Primitive amp, Arrow arrow) => Single arrow amp amp yv yv
- Synthesizer.Dimensional.Map: fst :: Arrow arrow => T arrow (sample0, sample1) sample0
+ Synthesizer.Dimensional.Map: fst :: forall (arrow :: Type -> Type -> Type) sample0 sample1. Arrow arrow => T arrow (sample0, sample1) sample0
- Synthesizer.Dimensional.Map: id :: Category arrow => T arrow sample sample
+ Synthesizer.Dimensional.Map: id :: forall (arrow :: Type -> Type -> Type) sample. Category arrow => T arrow sample sample
- Synthesizer.Dimensional.Map: independent :: Arrow arrow => (Amplitude sample0 -> Amplitude sample1) -> (Displacement sample0 -> Displacement sample1) -> T arrow sample0 sample1
+ Synthesizer.Dimensional.Map: independent :: forall (arrow :: Type -> Type -> Type) sample0 sample1. Arrow arrow => (Amplitude sample0 -> Amplitude sample1) -> (Displacement sample0 -> Displacement sample1) -> T arrow sample0 sample1
- Synthesizer.Dimensional.Map: mapAmplitude :: (C amp0, C amp1, Arrow arrow) => (amp0 -> amp1) -> Single arrow amp0 amp1 yv yv
+ Synthesizer.Dimensional.Map: mapAmplitude :: forall amp0 amp1 (arrow :: Type -> Type -> Type) yv. (C amp0, C amp1, Arrow arrow) => (amp0 -> amp1) -> Single arrow amp0 amp1 yv yv
- Synthesizer.Dimensional.Map: mapAmplitudeSameType :: Arrow arrow => (Amplitude sample -> Amplitude sample) -> T arrow sample sample
+ Synthesizer.Dimensional.Map: mapAmplitudeSameType :: forall (arrow :: Type -> Type -> Type) sample. Arrow arrow => (Amplitude sample -> Amplitude sample) -> T arrow sample sample
- Synthesizer.Dimensional.Map: packTriple :: Arrow arrow => T arrow (sample0, (sample1, sample2)) (sample0, sample1, sample2)
+ Synthesizer.Dimensional.Map: packTriple :: forall (arrow :: Type -> Type -> Type) sample0 sample1 sample2. Arrow arrow => T arrow (sample0, (sample1, sample2)) (sample0, sample1, sample2)
- Synthesizer.Dimensional.Map: snd :: Arrow arrow => T arrow (sample0, sample1) sample1
+ Synthesizer.Dimensional.Map: snd :: forall (arrow :: Type -> Type -> Type) sample0 sample1. Arrow arrow => T arrow (sample0, sample1) sample1
- Synthesizer.Dimensional.Map: swap :: Arrow arrow => T arrow (sample0, sample1) (sample1, sample0)
+ Synthesizer.Dimensional.Map: swap :: forall (arrow :: Type -> Type -> Type) sample0 sample1. Arrow arrow => T arrow (sample0, sample1) (sample1, sample0)
- Synthesizer.Dimensional.Map: unpackTriple :: Arrow arrow => T arrow (sample0, sample1, sample2) (sample0, (sample1, sample2))
+ Synthesizer.Dimensional.Map: unpackTriple :: forall (arrow :: Type -> Type -> Type) sample0 sample1 sample2. Arrow arrow => T arrow (sample0, sample1, sample2) (sample0, (sample1, sample2))
- Synthesizer.Dimensional.Map.Displacement: distort :: (C y, C y yv, C v, Arrow arrow) => (yv -> yv) -> T arrow (DNS v y y, DNS v y yv) (DNS v y yv)
+ Synthesizer.Dimensional.Map.Displacement: distort :: forall y yv v (arrow :: Type -> Type -> Type). (C y, C y yv, C v, Arrow arrow) => (yv -> yv) -> T arrow (DNS v y y, DNS v y yv) (DNS v y yv)
- Synthesizer.Dimensional.Map.Displacement: fanoutAndMixMulti :: (C y, C y yv, C v, Arrow arrow) => [T arrow sample (DNS v y yv)] -> T arrow sample (DNS v y yv)
+ Synthesizer.Dimensional.Map.Displacement: fanoutAndMixMulti :: forall y yv v (arrow :: Type -> Type -> Type) sample. (C y, C y yv, C v, Arrow arrow) => [T arrow sample (DNS v y yv)] -> T arrow sample (DNS v y yv)
- Synthesizer.Dimensional.Map.Displacement: fanoutAndMixMultiVolume :: (C y, C y yv, C v, Arrow arrow) => T v y -> [T arrow sample (DNS v y yv)] -> T arrow sample (DNS v y yv)
+ Synthesizer.Dimensional.Map.Displacement: fanoutAndMixMultiVolume :: forall y yv v (arrow :: Type -> Type -> Type) sample. (C y, C y yv, C v, Arrow arrow) => T v y -> [T arrow sample (DNS v y yv)] -> T arrow sample (DNS v y yv)
- Synthesizer.Dimensional.Map.Displacement: mapExponential :: (C y flat, C y, C u, Arrow arrow) => y -> T u q -> T arrow (T flat y) (DNS u q y)
+ Synthesizer.Dimensional.Map.Displacement: mapExponential :: forall y flat u (arrow :: Type -> Type -> Type) q. (C y flat, C y, C u, Arrow arrow) => y -> T u q -> T arrow (T flat y) (DNS u q y)
- Synthesizer.Dimensional.Map.Displacement: mapLinear :: (C y flat, C y, C u, Arrow arrow) => y -> T u y -> T arrow (T flat y) (DNS u y y)
+ Synthesizer.Dimensional.Map.Displacement: mapLinear :: forall y flat u (arrow :: Type -> Type -> Type). (C y flat, C y, C u, Arrow arrow) => y -> T u y -> T arrow (T flat y) (DNS u y y)
- Synthesizer.Dimensional.Map.Displacement: mapLinearDimension :: (C y, C y, C u, C v, Arrow arrow) => T v y -> T (Mul v u) y -> T arrow (DNS u y y) (DNS (Mul v u) y y)
+ Synthesizer.Dimensional.Map.Displacement: mapLinearDimension :: forall y u v (arrow :: Type -> Type -> Type). (C y, C y, C u, C v, Arrow arrow) => T v y -> T (Mul v u) y -> T arrow (DNS u y y) (DNS (Mul v u) y y)
- Synthesizer.Dimensional.Map.Displacement: mix :: (C y, C y, C y yv, C v, Arrow arrow) => T arrow (DNS v y yv, DNS v y yv) (DNS v y yv)
+ Synthesizer.Dimensional.Map.Displacement: mix :: forall y yv v (arrow :: Type -> Type -> Type). (C y, C y, C y yv, C v, Arrow arrow) => T arrow (DNS v y yv, DNS v y yv) (DNS v y yv)
- Synthesizer.Dimensional.Map.Displacement: mixVolume :: (C y, C y yv, C v, Arrow arrow) => T v y -> T arrow (DNS v y yv, DNS v y yv) (DNS v y yv)
+ Synthesizer.Dimensional.Map.Displacement: mixVolume :: forall y yv v (arrow :: Type -> Type -> Type). (C y, C y yv, C v, Arrow arrow) => T v y -> T arrow (DNS v y yv, DNS v y yv) (DNS v y yv)
- Synthesizer.Dimensional.Map.Displacement: raise :: (C y, C y yv, C v, Arrow arrow) => T v y -> yv -> T arrow (DNS v y yv) (DNS v y yv)
+ Synthesizer.Dimensional.Map.Displacement: raise :: forall y yv v (arrow :: Type -> Type -> Type). (C y, C y yv, C v, Arrow arrow) => T v y -> yv -> T arrow (DNS v y yv) (DNS v y yv)
- Synthesizer.Dimensional.Map.Filter: amplify :: (C y amp, Arrow arrow) => y -> Single arrow (Numeric amp) (Numeric amp) yv yv
+ Synthesizer.Dimensional.Map.Filter: amplify :: forall y amp (arrow :: Type -> Type -> Type) yv. (C y amp, Arrow arrow) => y -> Single arrow (Numeric amp) (Numeric amp) yv yv
- Synthesizer.Dimensional.Map.Filter: amplifyDimension :: (C y, C v0, C v1, Arrow arrow) => T v0 y -> Single arrow (Dimensional v1 y) (Dimensional (Mul v0 v1) y) yv yv
+ Synthesizer.Dimensional.Map.Filter: amplifyDimension :: forall y v0 v1 (arrow :: Type -> Type -> Type) yv. (C y, C v0, C v1, Arrow arrow) => T v0 y -> Single arrow (Dimensional v1 y) (Dimensional (Mul v0 v1) y) yv yv
- Synthesizer.Dimensional.Map.Filter: amplifyScalarDimension :: (C y, C v, Arrow arrow) => T v y -> Single arrow (Dimensional Scalar y) (Dimensional v y) yv yv
+ Synthesizer.Dimensional.Map.Filter: amplifyScalarDimension :: forall y v (arrow :: Type -> Type -> Type) yv. (C y, C v, Arrow arrow) => T v y -> Single arrow (Dimensional Scalar y) (Dimensional v y) yv yv
- Synthesizer.Dimensional.Map.Filter: envelope :: (C y, Arrow arrow) => T arrow (Flat y, Numeric amp y) (Numeric amp y)
+ Synthesizer.Dimensional.Map.Filter: envelope :: forall y (arrow :: Type -> Type -> Type) amp. (C y, Arrow arrow) => T arrow (Flat y, Numeric amp y) (Numeric amp y)
- Synthesizer.Dimensional.Map.Filter: envelopeScalarDimension :: (C y, C v, Arrow arrow) => T arrow (Dimensional Scalar y y, Dimensional v y y) (Dimensional v y y)
+ Synthesizer.Dimensional.Map.Filter: envelopeScalarDimension :: forall y v (arrow :: Type -> Type -> Type). (C y, C v, Arrow arrow) => T arrow (Dimensional Scalar y y, Dimensional v y y) (Dimensional v y y)
- Synthesizer.Dimensional.Map.Filter: envelopeVector :: (C y (Displacement sample), Arrow arrow) => T arrow (Flat y, sample) sample
+ Synthesizer.Dimensional.Map.Filter: envelopeVector :: forall y sample (arrow :: Type -> Type -> Type). (C y (Displacement sample), Arrow arrow) => T arrow (Flat y, sample) sample
- Synthesizer.Dimensional.Map.Filter: envelopeVectorDimension :: (C y0 yv, C y, C v0, C v1, Arrow arrow) => T arrow (Dimensional v0 y y0, Dimensional v1 y yv) (Dimensional (Mul v0 v1) y yv)
+ Synthesizer.Dimensional.Map.Filter: envelopeVectorDimension :: forall y0 yv y v0 v1 (arrow :: Type -> Type -> Type). (C y0 yv, C y, C v0, C v1, Arrow arrow) => T arrow (Dimensional v0 y y0, Dimensional v1 y yv) (Dimensional (Mul v0 v1) y yv)
- Synthesizer.Dimensional.Map.Filter: negate :: (C (Displacement sample), Arrow arrow) => T arrow sample sample
+ Synthesizer.Dimensional.Map.Filter: negate :: forall sample (arrow :: Type -> Type -> Type). (C (Displacement sample), Arrow arrow) => T arrow sample sample
- Synthesizer.Dimensional.Process: run :: C u => T (Recip u) t -> (forall s. T s u t a) -> a
+ Synthesizer.Dimensional.Process: run :: C u => T (Recip u) t -> (forall s. () => T s u t a) -> a
- Synthesizer.Dimensional.Process: type DimensionGradient u v = Mul (Recip u) v
+ Synthesizer.Dimensional.Process: type DimensionGradient u v = Mul Recip u v
- Synthesizer.Dimensional.Rate: type Dimensional u t = Actual (T (Recip u) t)
+ Synthesizer.Dimensional.Rate: type Dimensional u t = Actual T Recip u t
- Synthesizer.Dimensional.Rate.Cut: drop :: (Transform sig, C t, C u) => T u t -> T s u t (Signal s amp sig -> Signal s amp sig)
+ Synthesizer.Dimensional.Rate.Cut: drop :: (Transform sig, C t, C u) => T s u t (T s Int -> Signal s amp sig -> Signal s amp sig)
- Synthesizer.Dimensional.Rate.Cut: splitAt :: (Transform sig, C t, C u) => T u t -> T s u t (Signal s amp sig -> (Signal s amp sig, Signal s amp sig))
+ Synthesizer.Dimensional.Rate.Cut: splitAt :: (Transform sig, C t, C u) => T s u t (T s Int -> Signal s amp sig -> (Signal s amp sig, Signal s amp sig))
- Synthesizer.Dimensional.Rate.Cut: take :: (Transform sig, C t, C u) => T u t -> T s u t (Signal s amp sig -> Signal s amp sig)
+ Synthesizer.Dimensional.Rate.Cut: take :: (Transform sig, C t, C u) => T s u t (T s Int -> Signal s amp sig -> Signal s amp sig)
- Synthesizer.Dimensional.Rate.Dirac: Cons :: sig Bool -> T s sig
+ Synthesizer.Dimensional.Rate.Dirac: Cons :: sig Bool -> T s (sig :: Type -> Type)
- Synthesizer.Dimensional.Rate.Dirac: [decons] :: T s sig -> sig Bool
+ Synthesizer.Dimensional.Rate.Dirac: [decons] :: T s (sig :: Type -> Type) -> sig Bool
- Synthesizer.Dimensional.Rate.Dirac: newtype T s sig
+ Synthesizer.Dimensional.Rate.Dirac: newtype T s (sig :: Type -> Type)
- Synthesizer.Dimensional.Rate.Filter: comb :: (C t, C y yv, C u, Storable yv) => T u t -> y -> T s u t (Signal s amp yv -> Signal s amp yv)
+ Synthesizer.Dimensional.Rate.Filter: comb :: (C t, C y yv, C u, Storable yv) => y -> T s u t (T s Int -> Signal s amp yv -> Signal s amp yv)
- Synthesizer.Dimensional.Rate.Filter: delay :: (C yv, C t, C u, Write sig yv) => T u t -> T s u t (T (Phantom s) amp (sig yv) -> T (Phantom s) amp (sig yv))
+ Synthesizer.Dimensional.Rate.Filter: delay :: (C yv, C t, C u, Produce sig yv) => T s u t (T s Int -> T (Phantom s) amp (sig yv) -> T (Phantom s) amp (sig yv))
- Synthesizer.Dimensional.RateAmplitude.Cut: arrange :: (C t, C u, RealFrac t, Ord y, C y, C v, C y yv, Storable yv) => T u t -> T u t -> T s u t (T (T t) (R s v y yv) -> R s v y yv)
+ Synthesizer.Dimensional.RateAmplitude.Cut: arrange :: (C t, C u, RealFrac t, Ord y, C y, C v, C y yv, Storable yv) => T u t -> T s u t (T s Int -> T (T t) (R s v y yv) -> R s v y yv)
- Synthesizer.Dimensional.RateAmplitude.Cut: arrangeStorableVolume :: (C t, C u, RealFrac t, C y, C v, C y yv, Storable yv) => T u t -> T v y -> T u t -> T s u t (T (T t) (T (Phantom s) (Dimensional v y) (T yv)) -> T (Phantom s) (Dimensional v y) (T yv))
+ Synthesizer.Dimensional.RateAmplitude.Cut: arrangeStorableVolume :: (C t, C u, RealFrac t, C y, C v, C y yv, Storable yv) => T v y -> T u t -> T s u t (T s Int -> T (T t) (T (Phantom s) (Dimensional v y) (T yv)) -> T (Phantom s) (Dimensional v y) (T yv))
- Synthesizer.Dimensional.RateAmplitude.Cut: arrangeVolume :: (C t, C u, RealFrac t, C y, C v, C y yv, Storable yv) => T u t -> T v y -> T u t -> T s u t (T (T t) (R s v y yv) -> R s v y yv)
+ Synthesizer.Dimensional.RateAmplitude.Cut: arrangeVolume :: (C t, C u, RealFrac t, C y, C v, C y yv, Storable yv) => T v y -> T u t -> T s u t (T s Int -> T (T t) (R s v y yv) -> R s v y yv)
- Synthesizer.Dimensional.RateAmplitude.Cut: drop :: (C t, C u, C v) => T u t -> T s u t (R s v y yv -> R s v y yv)
+ Synthesizer.Dimensional.RateAmplitude.Cut: drop :: (C t, C u, C v) => T s u t (T s Int -> R s v y yv -> R s v y yv)
- Synthesizer.Dimensional.RateAmplitude.Cut: splitAt :: (C t, C u, C v, Storable yv) => T u t -> T s u t (R s v y yv -> (R s v y yv, R s v y yv))
+ Synthesizer.Dimensional.RateAmplitude.Cut: splitAt :: (C t, C u, C v, Storable yv) => T s u t (T s Int -> R s v y yv -> (R s v y yv, R s v y yv))
- Synthesizer.Dimensional.RateAmplitude.Cut: take :: (C t, C u, C v) => T u t -> T s u t (R s v y yv -> R s v y yv)
+ Synthesizer.Dimensional.RateAmplitude.Cut: take :: (C t, C u, C v) => T s u t (T s Int -> R s v y yv -> R s v y yv)
- Synthesizer.Dimensional.RateAmplitude.File: renderTimeVoltageMonoDoubleToInt16 :: T Frequency Double -> FilePath -> (forall s. T s Time Double (R s Voltage Double Double)) -> IO ExitCode
+ Synthesizer.Dimensional.RateAmplitude.File: renderTimeVoltageMonoDoubleToInt16 :: T Frequency Double -> FilePath -> (forall s. () => T s Time Double (R s Voltage Double Double)) -> IO ExitCode
- Synthesizer.Dimensional.RateAmplitude.File: renderTimeVoltageStereoDoubleToInt16 :: T Frequency Double -> FilePath -> (forall s. T s Time Double (R s Voltage Double (T Double))) -> IO ExitCode
+ Synthesizer.Dimensional.RateAmplitude.File: renderTimeVoltageStereoDoubleToInt16 :: T Frequency Double -> FilePath -> (forall s. () => T s Time Double (R s Voltage Double (T Double))) -> IO ExitCode
- Synthesizer.Dimensional.RateAmplitude.Filter: comb :: (C t, C y yv, C u, C v, Storable yv) => T u t -> y -> T s u t (R s v y yv -> R s v y yv)
+ Synthesizer.Dimensional.RateAmplitude.Filter: comb :: (C t, C y yv, C u, C v, Storable yv) => y -> T s u t (T s Int -> R s v y yv -> R s v y yv)
- Synthesizer.Dimensional.RateAmplitude.Filter: combProc :: (C t, C y, C y, C y yv, C u, C v, Storable yv) => T u t -> T s u t (R s v y yv -> R s v y yv) -> T s u t (R s v y yv -> R s v y yv)
+ Synthesizer.Dimensional.RateAmplitude.Filter: combProc :: (C t, C y, C y, C y yv, C u, C v, Storable yv) => T s u t (R s v y yv -> R s v y yv) -> T s u t (T s Int -> R s v y yv -> R s v y yv)
- Synthesizer.Dimensional.RateAmplitude.Piece: cosine :: (C q, C u, C v, Write sig q) => T s u v sig q
+ Synthesizer.Dimensional.RateAmplitude.Piece: cosine :: (C q, C u, C v, Produce sig q) => T s u v sig q
- Synthesizer.Dimensional.RateAmplitude.Piece: cubic :: (C q, C u, C v, Write sig q) => T (DimensionGradient u v) q -> T (DimensionGradient u v) q -> T s u v sig q
+ Synthesizer.Dimensional.RateAmplitude.Piece: cubic :: (C q, C u, C v, Produce sig q) => T (DimensionGradient u v) q -> T (DimensionGradient u v) q -> T s u v sig q
- Synthesizer.Dimensional.RateAmplitude.Piece: exponential :: (C q, C u, C v, Write sig q) => T v q -> T s u v sig q
+ Synthesizer.Dimensional.RateAmplitude.Piece: exponential :: (C q, C u, C v, Produce sig q) => T v q -> T s u v sig q
- Synthesizer.Dimensional.RateAmplitude.Piece: halfSine :: (C q, C u, C v, Write sig q) => FlatPosition -> T s u v sig q
+ Synthesizer.Dimensional.RateAmplitude.Piece: halfSine :: (C q, C u, C v, Produce sig q) => FlatPosition -> T s u v sig q
- Synthesizer.Dimensional.RateAmplitude.Piece: linear :: (C q, C u, C v, Write sig q) => T s u v sig q
+ Synthesizer.Dimensional.RateAmplitude.Piece: linear :: (C q, C u, C v, Produce sig q) => T s u v sig q
- Synthesizer.Dimensional.RateAmplitude.Piece: run :: (C q, C q, C u, C v, Write sig q) => T u q -> Sequence s u v sig q -> T s u q (T (Phantom s) (Dimensional v q) (sig q))
+ Synthesizer.Dimensional.RateAmplitude.Piece: run :: (C q, C q, C u, C v, Produce sig q) => Sequence s u v sig q -> T s u q (T (Phantom s) (Dimensional v q) (sig q))
- Synthesizer.Dimensional.RateAmplitude.Piece: runVolume :: (C q, C q, C u, C v, Write sig q) => T u q -> Sequence s u v sig q -> T v q -> T s u q (T (Phantom s) (Dimensional v q) (sig q))
+ Synthesizer.Dimensional.RateAmplitude.Piece: runVolume :: (C q, C q, C u, C v, Produce sig q) => Sequence s u v sig q -> T v q -> T s u q (T (Phantom s) (Dimensional v q) (sig q))
- Synthesizer.Dimensional.RateAmplitude.Piece: step :: (C q, C u, C v, Write sig q) => T s u v sig q
+ Synthesizer.Dimensional.RateAmplitude.Piece: step :: (C q, C u, C v, Produce sig q) => T s u v sig q
- Synthesizer.Dimensional.RateAmplitude.Piece: type Sequence s u v sig q = T (T u q) (T v q) (T v q -> LazySize -> q -> T s u q (T (Phantom s) (Flat q) (sig q)))
+ Synthesizer.Dimensional.RateAmplitude.Piece: type Sequence s u v (sig :: Type -> Type) q = T T u q T v q T v q -> q -> T s u q T Phantom s Flat q sig q
- Synthesizer.Dimensional.RateAmplitude.Piece: type T s u v sig q = Piece (T u q) (T v q) (T v q -> LazySize -> q -> T s u q (T (Phantom s) (Flat q) (sig q)))
+ Synthesizer.Dimensional.RateAmplitude.Piece: type T s u v (sig :: Type -> Type) q = Piece T u q T v q T v q -> q -> T s u q T Phantom s Flat q sig q
- Synthesizer.Dimensional.RateAmplitude.Play: renderTimeVoltage :: (Bounded int, C int, Storable int, C int, C t, C yv, C y yv, C y) => (int -> Builder int) -> T Frequency t -> (forall s. T s Time t (R s Voltage y yv)) -> IO ExitCode
+ Synthesizer.Dimensional.RateAmplitude.Play: renderTimeVoltage :: (Bounded int, C int, Storable int, C int, C t, C yv, C y yv, C y) => (int -> Builder int) -> T Frequency t -> (forall s. () => T s Time t (R s Voltage y yv)) -> IO ExitCode
- Synthesizer.Dimensional.RateAmplitude.Play: renderTimeVoltageMonoDoubleToInt16 :: T Frequency Double -> (forall s. T s Time Double (R s Voltage Double Double)) -> IO ExitCode
+ Synthesizer.Dimensional.RateAmplitude.Play: renderTimeVoltageMonoDoubleToInt16 :: T Frequency Double -> (forall s. () => T s Time Double (R s Voltage Double Double)) -> IO ExitCode
- Synthesizer.Dimensional.RateAmplitude.Play: renderTimeVoltageStereoDoubleToInt16 :: T Frequency Double -> (forall s. T s Time Double (R s Voltage Double (T Double))) -> IO ExitCode
+ Synthesizer.Dimensional.RateAmplitude.Play: renderTimeVoltageStereoDoubleToInt16 :: T Frequency Double -> (forall s. () => T s Time Double (R s Voltage Double (T Double))) -> IO ExitCode
- Synthesizer.Dimensional.Sample: type Dimensional v y yv = T (Dimensional v y) yv
+ Synthesizer.Dimensional.Sample: type Dimensional v y yv = T Dimensional v y yv
- Synthesizer.Dimensional.Sample: type Flat y = T (Flat y) y
+ Synthesizer.Dimensional.Sample: type Flat y = T Flat y y
- Synthesizer.Dimensional.Sample: type Numeric amp yv = T (Numeric amp) yv
+ Synthesizer.Dimensional.Sample: type Numeric amp yv = T Numeric amp yv
- Synthesizer.Dimensional.Signal: apply :: C u => (forall s. T s u t (T (Phantom s) amp0 sig0 -> T (Phantom s) amp1 sig1)) -> T (Dimensional u t) amp0 sig0 -> T (Dimensional u t) amp1 sig1
+ Synthesizer.Dimensional.Signal: apply :: C u => (forall s. () => T s u t (T (Phantom s) amp0 sig0 -> T (Phantom s) amp1 sig1)) -> T (Dimensional u t) amp0 sig0 -> T (Dimensional u t) amp1 sig1
- Synthesizer.Dimensional.Signal: render :: C u => T (Recip u) t -> (forall s. T s u t (T (Phantom s) amp sig)) -> T (Dimensional u t) amp sig
+ Synthesizer.Dimensional.Signal: render :: C u => T (Recip u) t -> (forall s. () => T s u t (T (Phantom s) amp sig)) -> T (Dimensional u t) amp sig
- Synthesizer.Dimensional.Signal: restore :: Read sig yv => T rate amp (sig yv) -> T rate amp (T yv)
+ Synthesizer.Dimensional.Signal: restore :: Consume sig yv => T rate amp (sig yv) -> T rate amp (T yv)
- Synthesizer.Dimensional.Signal: store :: (C t, C u, Storable yv) => T u t -> T s u t (T (Phantom s) amp (T yv) -> T (Phantom s) amp (T yv))
+ Synthesizer.Dimensional.Signal: store :: (C t, C u, Storable yv) => T s u t (T s Int -> T (Phantom s) amp (T yv) -> T (Phantom s) amp (T yv))
- Synthesizer.Dimensional.Signal: type R s v y yv = T (Phantom s) (Dimensional v y) (T yv)
+ Synthesizer.Dimensional.Signal: type R s v y yv = T Phantom s Dimensional v y T yv
- Synthesizer.Dimensional.Signal.Private: apply :: C u => (forall s. T s u t (T (Phantom s) amp0 sig0 -> T (Phantom s) amp1 sig1)) -> T (Dimensional u t) amp0 sig0 -> T (Dimensional u t) amp1 sig1
+ Synthesizer.Dimensional.Signal.Private: apply :: C u => (forall s. () => T s u t (T (Phantom s) amp0 sig0 -> T (Phantom s) amp1 sig1)) -> T (Dimensional u t) amp0 sig0 -> T (Dimensional u t) amp1 sig1
- Synthesizer.Dimensional.Signal.Private: render :: C u => T (Recip u) t -> (forall s. T s u t (T (Phantom s) amp sig)) -> T (Dimensional u t) amp sig
+ Synthesizer.Dimensional.Signal.Private: render :: C u => T (Recip u) t -> (forall s. () => T s u t (T (Phantom s) amp sig)) -> T (Dimensional u t) amp sig
- Synthesizer.Dimensional.Signal.Private: restore :: Read sig yv => T rate amp (sig yv) -> T rate amp (T yv)
+ Synthesizer.Dimensional.Signal.Private: restore :: Consume sig yv => T rate amp (sig yv) -> T rate amp (T yv)
- Synthesizer.Dimensional.Signal.Private: store :: (C t, C u, Storable yv) => T u t -> T s u t (T (Phantom s) amp (T yv) -> T (Phantom s) amp (T yv))
+ Synthesizer.Dimensional.Signal.Private: store :: (C t, C u, Storable yv) => T s u t (T s Int -> T (Phantom s) amp (T yv) -> T (Phantom s) amp (T yv))
- Synthesizer.Dimensional.Signal.Private: type R s v y yv = T (Phantom s) (Dimensional v y) (T yv)
+ Synthesizer.Dimensional.Signal.Private: type R s v y yv = T Phantom s Dimensional v y T yv
- Synthesizer.Dimensional.Signal.Private: zip :: (Transform sig y1, Transform sig (y0, y1), Read sig y0) => T (Phantom s) amp0 (sig y0) -> T (Phantom s) amp1 (sig y1) -> T (Phantom s) (amp0, amp1) (sig (y0, y1))
+ Synthesizer.Dimensional.Signal.Private: zip :: (Transform sig y1, Transform sig (y0, y1), Consume sig y0) => T (Phantom s) amp0 (sig y0) -> T (Phantom s) amp1 (sig y1) -> T (Phantom s) (amp0, amp1) (sig (y0, y1))
- Synthesizer.Dimensional.Wave: type SamplePhase t = Abstract (T t)
+ Synthesizer.Dimensional.Wave: type SamplePhase t = Abstract T t
- Synthesizer.Dimensional.Wave: type T t y = T (SamplePhase t) y
+ Synthesizer.Dimensional.Wave: type T t y = T SamplePhase t y

Files

src/Synthesizer/Dimensional/Amplitude/Control.hs view
@@ -68,7 +68,7 @@  {-# INLINE piecewiseConstantGeneric #-} piecewiseConstantGeneric ::-   (SigG.Write sig y) =>+   (SigG.Produce sig y) =>    SigA.T rate amp (PC.T y) ->    SigA.T rate amp (sig y) piecewiseConstantGeneric =
src/Synthesizer/Dimensional/Amplitude/Cut.hs view
@@ -301,7 +301,7 @@ zip ::    (Ord y, Field.C y, Dim.C u,     Module.C y yv0, Module.C y yv1,-    SigG.Read sig yv0, SigG.Transform sig yv1, SigG.Transform sig (yv0,yv1)) =>+    SigG.Consume sig yv0, SigG.Transform sig yv1, SigG.Transform sig (yv0,yv1)) =>    Signal s u y sig yv0 -> Signal s u y sig yv1 -> Signal s u y sig (yv0,yv1) zip =    merge (SigG.zipWithState (,)) . SigA.restore@@ -310,7 +310,7 @@ zipVolume ::    (Field.C y, Dim.C u,     Module.C y yv0, Module.C y yv1,-    SigG.Read sig yv0, SigG.Transform sig yv1, SigG.Transform sig (yv0,yv1)) =>+    SigG.Consume sig yv0, SigG.Transform sig yv1, SigG.Transform sig (yv0,yv1)) =>    DN.T u y ->    Signal s u y sig yv0 -> Signal s u y sig yv1 -> Signal s u y sig (yv0,yv1) zipVolume vol =@@ -350,7 +350,7 @@ zip3 ::    (Ord y, Field.C y, Dim.C u,     Module.C y yv0, Module.C y yv1, Module.C y yv2,-    SigG.Read sig yv0, SigG.Read sig yv1,+    SigG.Consume sig yv0, SigG.Consume sig yv1,     SigG.Transform sig yv2, SigG.Transform sig (yv0, yv1, yv2)) =>    Signal s u y sig yv0 -> Signal s u y sig yv1 -> Signal s u y sig yv2 ->    Signal s u y sig (yv0,yv1,yv2)@@ -363,7 +363,7 @@ zip3Volume ::    (Field.C y, Dim.C u,     Module.C y yv0, Module.C y yv1, Module.C y yv2,-    SigG.Read sig yv0, SigG.Read sig yv1,+    SigG.Consume sig yv0, SigG.Consume sig yv1,     SigG.Transform sig yv2, SigG.Transform sig (yv0, yv1, yv2)) =>    DN.T u y ->    Signal s u y sig yv0 -> Signal s u y sig yv1 -> Signal s u y sig yv2 ->@@ -382,7 +382,7 @@ selectBool ::    (Ord y, Field.C y, Dim.C u,     Module.C y yv,-    SigG.Read sig yv,+    SigG.Consume sig yv,     SigG.Transform sig Bool, SigG.Transform sig yv) =>    Signal s u y sig yv {- ^ False -} ->    Signal s u y sig yv {- ^ True -} ->
src/Synthesizer/Dimensional/Causal/Process.hs view
@@ -142,7 +142,7 @@  {-# INLINE applyFst #-} applyFst ::-   (SigG.Read sig yv) =>+   (SigG.Consume sig yv) =>    T s (Sample.T amp yv, restSampleIn) restSampleOut ->    SigA.T (Rate.Phantom s) amp (sig yv) ->    T s restSampleIn restSampleOut@@ -150,7 +150,7 @@  {-# INLINE applyFlatFst #-} applyFlatFst ::-   (Flat.C yv amp, SigG.Read sig yv) =>+   (Flat.C yv amp, SigG.Consume sig yv) =>    T s (Sample.T (Amp.Flat yv) yv, restSampleIn) restSampleOut ->    SigA.T (Rate.Phantom s) amp (sig yv) ->    T s restSampleIn restSampleOut@@ -160,7 +160,7 @@  {-# INLINE feedFst #-} feedFst ::-   (SigG.Read sig yv) =>+   (SigG.Consume sig yv) =>    SigA.T (Rate.Phantom s) amp (sig yv) ->    T s restSample (Sample.T amp yv, restSample) feedFst x =@@ -170,7 +170,7 @@  {-# INLINE applySnd #-} applySnd ::-   (SigG.Read sig yv) =>+   (SigG.Consume sig yv) =>    T s (restSampleIn, Sample.T amp yv) restSampleOut ->    SigA.T (Rate.Phantom s) amp (sig yv) ->    T s restSampleIn restSampleOut@@ -178,7 +178,7 @@  {-# INLINE feedSnd #-} feedSnd ::-   (SigG.Read sig yv) =>+   (SigG.Consume sig yv) =>    SigA.T (Rate.Phantom s) amp (sig yv) ->    T s restSample (restSample, Sample.T amp yv) feedSnd x =
src/Synthesizer/Dimensional/ChunkySize/Signal.hs view
@@ -32,7 +32,7 @@  {-# INLINE store #-} store ::-   (SigC.Write sig yv) =>+   (SigC.Produce sig yv) =>    Size s ->    Signal s amp (Sig.T yv) ->    Signal s amp (sig yv)@@ -44,7 +44,7 @@ Move to a new module Analysis in order to be consistent with other Analysis modules? -} {-# INLINE length #-}-length :: (CutC.Read sig) =>+length :: (CutC.Consume sig) =>    Signal s amp sig ->    Size s length =
src/Synthesizer/Dimensional/Cyclic/Analysis.hs view
@@ -39,7 +39,7 @@ {- * Positions -}  {-# INLINE period #-}-period :: (Field.C t, Dim.C u, CutG.Read body) =>+period :: (Field.C t, Dim.C u, CutG.Consume body) =>    SigA.T (Rate.Dimensional u t) amp (SigC.T body) ->    DN.T u t period = makePhysicalPeriod (fromIntegral . CutG.length)
src/Synthesizer/Dimensional/Cyclic/Signal.hs view
@@ -77,10 +77,10 @@ -} {-# INLINE fromSignal #-} fromSignal ::-   (Additive.C yv, SigG.Write sig yv) =>+   (Additive.C yv, SigG.Produce sig yv) =>    Int -> sig yv -> T (sig yv) fromSignal n  =-   fromPeriod . Cyclic.fromSignal SigG.defaultLazySize n+   fromPeriod . Cyclic.fromSignal n  {- | Convert a cyclic signal to a straight signal containing a loop.
+ src/Synthesizer/Dimensional/Duration.hs view
@@ -0,0 +1,38 @@+module Synthesizer.Dimensional.Duration where++import qualified Synthesizer.Dimensional.Process as Proc++import Control.Applicative ((<$>))++import qualified Algebra.ToInteger     as ToInteger+import qualified Algebra.Field         as Field+import qualified Algebra.RealRing      as RealRing++import qualified Number.DimensionTerm        as DN+import qualified Algebra.DimensionTerm       as Dim+import Number.DimensionTerm ((*&))++import qualified NumericPrelude.Numeric as NP+++{- |+This type is intended to hold a duration+which is an integer with respect to the sampling rate.+It allows to do exact duration computations, i.e. without rounding errors.+The trade-off is that it is bound to a certain sampling rate+and you must convert to different sampling rates explicitly.+-}+newtype T s i = Cons i++fromTime ::+   (Dim.C u, ToInteger.C i, RealRing.C t) =>+   DN.T u t -> Proc.T s u t (T s i)+fromTime t = Cons . RealRing.round <$> Proc.toTimeScalar t++toTime ::+   (Dim.C u, ToInteger.C i, Field.C t) =>+   Proc.T s u t (T s i -> DN.T u t)+toTime =+   (\sampleRate (Cons dur) -> NP.fromIntegral dur *& DN.unrecip sampleRate)+   <$>+   Proc.getSampleRate
src/Synthesizer/Dimensional/Process.hs view
@@ -27,7 +27,6 @@       run, {-share,-} withParam, getSampleRate,       toTimeScalar,    toFrequencyScalar,       toTimeDimension, toFrequencyDimension,-      intFromTime, intFromTime98,       DimensionGradient, toGradientScalar,       loop, pure,       ($:), ($::), ($^), ($#),@@ -40,7 +39,6 @@  import Number.DimensionTerm ((*&), (&/&), ) -- ((&*&), ) -import qualified Algebra.RealRing      as RealRing import qualified Algebra.Field          as Field import qualified Algebra.Ring           as Ring @@ -50,7 +48,6 @@ import qualified Control.Applicative as App import Control.Applicative (Applicative) -import NumericPrelude.Numeric import NumericPrelude.Base  import qualified Prelude as P@@ -172,27 +169,3 @@ (~*&) = toTimeScalar (~/&) = toFrequencyScalar -}---checkedChunkSize ::-   String -> Int -> Int-checkedChunkSize funcName cs =-   if cs>0-     then cs-     else error $ funcName ++ ": negative chunkSize"--intFromTime ::-   (RealRing.C t, Dim.C u) =>-   String ->-   DN.T u t ->-   T s u t Int-intFromTime funcName t =-   fmap (checkedChunkSize funcName . RealRing.ceiling) $ toTimeScalar t--intFromTime98 ::-   (Ring.C t, RealFrac t, Dim.C u) =>-   String ->-   DN.T u t ->-   T s u t Int-intFromTime98 funcName t =-   fmap (checkedChunkSize funcName . P.ceiling) $ toTimeScalar t
src/Synthesizer/Dimensional/Rate/Cut.hs view
@@ -12,13 +12,13 @@    concat, append, ) where  import qualified Synthesizer.Dimensional.Process as Proc+import qualified Synthesizer.Dimensional.Duration as Dur import qualified Synthesizer.Dimensional.Rate as Rate import qualified Synthesizer.Dimensional.Amplitude as Amp  import qualified Synthesizer.Dimensional.Signal.Private as SigA import qualified Synthesizer.Generic.Cut as CutG -import qualified Number.DimensionTerm        as DN import qualified Algebra.DimensionTerm       as Dim  -- import qualified Number.NonNegative     as NonNeg@@ -44,36 +44,31 @@ -} {-# INLINE splitAt #-} splitAt :: (CutG.Transform sig, RealRing.C t, Dim.C u) =>-   DN.T u t ->    Proc.T s u t-      (Signal s amp sig ->+      (Dur.T s Int ->+       Signal s amp sig ->        (Signal s amp sig, Signal s amp sig))-splitAt t' =-   flip fmap (Proc.toTimeScalar t') $-   \t x ->-      let (y,z) = CutG.splitAt (RealRing.round t) $ SigA.body x+splitAt =+   Proc.pure $ \(Dur.Cons t) x ->+      let (y,z) = CutG.splitAt t $ SigA.body x       in  (SigA.replaceBody y x,            SigA.replaceBody z x)  {-# INLINE take #-} take :: (CutG.Transform sig, RealRing.C t, Dim.C u) =>-   DN.T u t ->    Proc.T s u t-      (Signal s amp sig ->+      (Dur.T s Int ->+       Signal s amp sig ->        Signal s amp sig)-take t' =-   flip fmap (Proc.toTimeScalar t') $-   \t -> SigA.processBody (CutG.take (RealRing.round t))+take = Proc.pure $ \(Dur.Cons t) -> SigA.processBody (CutG.take t)  {-# INLINE drop #-} drop :: (CutG.Transform sig, RealRing.C t, Dim.C u) =>-   DN.T u t ->    Proc.T s u t-      (Signal s amp sig ->+      (Dur.T s Int ->+       Signal s amp sig ->        Signal s amp sig)-drop t' =-   flip fmap (Proc.toTimeScalar t') $-   \t -> SigA.processBody (CutG.drop (RealRing.round t))+drop = Proc.pure $ \(Dur.Cons t) -> SigA.processBody (CutG.drop t)   {-# INLINE concat #-}
src/Synthesizer/Dimensional/Rate/Dirac.hs view
@@ -48,7 +48,7 @@    mempty = Cons Mn.mempty    mappend (Cons x) (Cons y) = Cons (Mn.mappend x y) -instance Cut.Read (sig Bool) => Cut.Read (T s sig) where+instance Cut.Consume (sig Bool) => Cut.Consume (T s sig) where    {-# INLINE null #-}    null = Cut.null . decons    {-# INLINE length #-}
src/Synthesizer/Dimensional/Rate/Filter.hs view
@@ -22,6 +22,7 @@     {- ** Delay -}    delay,+   delayStorable,    phaseModulation,    phaser,    phaserStereo,@@ -64,6 +65,7 @@ import qualified Synthesizer.Dimensional.Amplitude.Filter       as FiltV import qualified Synthesizer.Dimensional.Process as Proc import qualified Synthesizer.Dimensional.Amplitude as Amp+import qualified Synthesizer.Dimensional.Duration as Dur import qualified Synthesizer.Dimensional.Rate as Rate  import Synthesizer.Dimensional.Process@@ -90,6 +92,7 @@ import qualified Synthesizer.Plain.Filter.Recursive.Chebyshev   as Cheby import qualified Synthesizer.Plain.Filter.Recursive             as FiltRec +import qualified Synthesizer.Storable.Filter.NonRecursive as FiltNRSt import qualified Synthesizer.Storable.Signal as SigSt import qualified Synthesizer.Generic.Filter.Recursive.Comb as Comb @@ -115,6 +118,8 @@ -- import qualified Algebra.VectorSpace    as VectorSpace import qualified Algebra.Module         as Module +import qualified Data.StorableVector.Lazy.Typed as SVT+ import Foreign.Storable (Storable, )  -- import qualified Data.List as List@@ -210,23 +215,31 @@                  toStorable)  {-# INLINE delay #-}-delay :: (Additive.C yv, RealRing.C t, Dim.C u, SigG.Write sig yv) =>-      DN.T u t-   -> Proc.T s u t (-        SigA.T (Rate.Phantom s) amp (sig yv)+delay :: (Additive.C yv, RealRing.C t, Dim.C u, SigG.Produce sig yv) =>+   Proc.T s u t (+        Dur.T s Int+     -> SigA.T (Rate.Phantom s) amp (sig yv)      -> SigA.T (Rate.Phantom s) amp (sig yv))-delay time =-   flip fmap (toTimeScalar time) $-   \t -> SigA.processBody (DelayG.static (round t))+delay =+   Proc.pure $ \(Dur.Cons t) -> SigA.processBody (DelayG.static t) +{-# INLINE delayStorable #-}+delayStorable :: (Additive.C yv, RealRing.C t, Dim.C u, Storable yv) =>+   Proc.T s u t (+        Dur.T s Int+     -> SigA.T (Rate.Phantom s) amp (SigSt.T yv)+     -> SigA.T (Rate.Phantom s) amp (SigSt.T yv))+delayStorable =+   Proc.pure $ \(Dur.Cons t) -> SigA.processBody (FiltNRSt.delay t) + {-# INLINE toStorable #-}-toStorable :: (Storable a) => Sig.T a -> SigSt.T a-toStorable = Sig.toStorableSignal SigSt.defaultChunkSize+toStorable :: (Storable a) => Sig.T a -> SVT.DefaultVector a+toStorable = SigG.fromState  {-# INLINE fromStorable #-}-fromStorable :: (Storable a) => SigSt.T a -> Sig.T a-fromStorable = Sig.fromStorableSignal+fromStorable :: (Storable a) => SVT.DefaultVector a -> Sig.T a+fromStorable = SigG.toState  {-# INLINE phaseModulation #-} phaseModulation ::@@ -258,7 +271,7 @@ {-# INLINE phaseModulationGeneric #-} phaseModulationGeneric ::    (Additive.C yv, RealField.C q, Dim.C u,-    SigG.Transform sig q, SigG.Transform sig yv, SigG.Write sig yv) =>+    SigG.Transform sig q, SigG.Transform sig yv, SigG.Produce sig yv) =>       Interpolation.T q yv    -> DN.T u q           {- ^ minimal deviation from current time, usually negative -}@@ -590,11 +603,10 @@ {- | Infinitely many equi-delayed exponentially decaying echos. -} {-# INLINE comb #-} comb :: (RealRing.C t, Module.C y yv, Dim.C u, Storable yv) =>-   DN.T u t -> y -> Proc.T s u t (Signal s amp yv -> Signal s amp yv)-comb time gain =-   do t <- toTimeScalar time-      return $ SigA.processBody-         (fromStorable . Comb.run (round t) gain . toStorable)+   y -> Proc.T s u t (Dur.T s Int -> Signal s amp yv -> Signal s amp yv)+comb gain =+   return $ \(Dur.Cons t) ->+      SigA.processBody (fromStorable . Comb.run t gain . toStorable)   -- * auxiliary functions
src/Synthesizer/Dimensional/RateAmplitude/Cut.hs view
@@ -23,7 +23,7 @@    zip3,        zip3Volume,    mergeStereo, mergeStereoVolume,    arrange,     arrangeVolume,-   arrangeStorableVolume,+   arrangeStorableVolume, arrangeStorableTypedVolume,   ) where  import qualified Synthesizer.Dimensional.Amplitude.Cut as CutV@@ -31,18 +31,19 @@ import qualified Synthesizer.Storable.Cut as CutSt import qualified Synthesizer.Storable.Signal as SigSt import qualified Synthesizer.State.Cut as CutS-import qualified Synthesizer.State.Signal as Sig+import qualified Synthesizer.State.Signal as SigS import qualified Synthesizer.Generic.Signal as SigG  import qualified Synthesizer.Frame.Stereo as Stereo import Foreign.Storable (Storable, )  import qualified Synthesizer.Dimensional.Amplitude as Amp+import qualified Synthesizer.Dimensional.Duration as Dur import qualified Synthesizer.Dimensional.Rate as Rate  import qualified Synthesizer.Dimensional.Signal.Private as SigA import qualified Synthesizer.Dimensional.Process as Proc-import Synthesizer.Dimensional.Process (($#), toTimeScalar, intFromTime98, )+import Synthesizer.Dimensional.Process (($#), toTimeScalar, ) import Synthesizer.Dimensional.Signal.Private (toAmplitudeScalar, )  import qualified Number.DimensionTerm        as DN@@ -58,39 +59,37 @@ import qualified Algebra.RealRing           as RealRing import qualified Algebra.Field               as Field import qualified Algebra.Ring                as Ring+import qualified Algebra.Additive            as Additive +import qualified Data.StorableVector.Lazy.Typed as SVT import qualified Data.List as List -import NumericPrelude.Base ((.), ($), Ord, (<=), map, return, )+import NumericPrelude.Base ((.), ($), Ord, (<=), map, fmap, return, ) -- import NumericPrelude.Numeric-import Prelude (RealFrac, )+import Prelude (Int, RealFrac, )   {- * dissection -}  {-# INLINE splitAt #-} splitAt :: (RealRing.C t, Dim.C u, Dim.C v, Storable yv) =>-   DN.T u t -> Proc.T s u t (SigA.R s v y yv -> (SigA.R s v y yv, SigA.R s v y yv))-splitAt t' =-   do t <- toTimeScalar t'-      return $ \x ->-         let (ss0,ss1) = Sig.splitAt (RealRing.round t) (SigA.body x)-         in  (SigA.replaceBody ss0 x,-              SigA.replaceBody ss1 x)+   Proc.T s u t (Dur.T s Int -> SigA.R s v y yv -> (SigA.R s v y yv, SigA.R s v y yv))+splitAt =+   CutR.splitAt  {-# INLINE take #-} take :: (RealRing.C t, Dim.C u, Dim.C v) =>-   DN.T u t -> Proc.T s u t (SigA.R s v y yv -> SigA.R s v y yv)-take t' =-   CutR.take t'-   -- fmap (fst.) $ splitAt t+   Proc.T s u t (Dur.T s Int -> SigA.R s v y yv -> SigA.R s v y yv)+take =+   CutR.take+   -- fmap (fst.) $ splitAt  {-# INLINE drop #-} drop :: (RealRing.C t, Dim.C u, Dim.C v) =>-   DN.T u t -> Proc.T s u t (SigA.R s v y yv -> SigA.R s v y yv)-drop t' =-   CutR.drop t'-   -- fmap (snd.) $ splitAt t+   Proc.T s u t (Dur.T s Int -> SigA.R s v y yv -> SigA.R s v y yv)+drop =+   CutR.drop+   -- fmap (snd.) $ splitAt  {-# INLINE takeUntilPause #-} takeUntilPause ::@@ -242,19 +241,21 @@     RealFrac t,     Ord y, Field.C y, Dim.C v,     Module.C y yv, Storable yv) =>-      DN.T u t  {- ^ Maximum chunk size -}-   -> DN.T u t  {- ^ Unit of the time values in the time ordered list. -}+      DN.T u t  {- ^ Unit of the time values in the time ordered list. -}    -> Proc.T s u t (-         EventList.T (NonNeg.T t) (SigA.R s v y yv)+         Dur.T s Int+               {- v Maximum chunk size -}+      -> EventList.T (NonNeg.T t) (SigA.R s v y yv)                {- v A list of pairs: (relative start time, signal part),                     The start time is relative                     to the start time of the previous event. -}       -> SigA.R s v y yv)                {- ^ The mixed signal. -}-arrange chunkSize unit' =+arrange unit' =+   Proc.withParam $ \chunkSize ->    Proc.withParam $ \sched ->       let amp = List.maximum (map SigA.actualAmplitude (EventList.getBodies sched))-      in  arrangeVolume chunkSize amp unit' $# sched+      in  (arrangeVolume amp unit' $# chunkSize) $# sched   {- |@@ -268,30 +269,31 @@     RealFrac t,     Field.C y, Dim.C v,     Module.C y yv, Storable yv) =>-      DN.T u t  {- ^ Maximum chunk size -}-   -> DN.T v y  {- ^ Output volume -}+      DN.T v y  {- ^ Output volume -}    -> DN.T u t  {- ^ Unit of the time values in the time ordered list. -}    -> Proc.T s u t (-         EventList.T (NonNeg.T t) (SigA.R s v y yv)+         Dur.T s Int+            {- v Maximum chunk size -}+      -> EventList.T (NonNeg.T t) (SigA.R s v y yv)             {- v A list of pairs: (relative start time, signal part),                  The start time is relative                  to the start time of the previous event. -}       -> SigA.R s v y yv)             {- ^ The mixed signal. -}-arrangeVolume chunkSize' amp unit' =+arrangeVolume amp unit' =    do unit <- toTimeScalar unit'-      chunkSize <--         intFromTime98 "Dimensional.Cut.arrangeStorableVolume" chunkSize'-      return $ \sched ->-         let z =+      return $ \(Dur.Cons chunkSize) sched' ->+         let sched =+                EventList.mapBody+                   (SigS.toStorableSignal (SigSt.chunkSize chunkSize) .+                    SigA.vectorSamples (toAmplitudeScalar z))+                sched'+             z =                 SigA.fromBody amp $                 SigG.toState $                 CutSt.arrange (SigSt.chunkSize chunkSize) $                  EventList.resample-                   (NonNeg.fromNumberMsg "Dimensional.Cut.arrangeVolume" unit) $-                EventList.mapBody-                   (SigG.fromState (SigG.LazySize chunkSize) .-                    SigA.vectorSamples (toAmplitudeScalar z))+                   (NonNeg.fromNumberMsg "Dimensional.Cut.arrangeVolume" unit)                 sched          in  z @@ -301,22 +303,21 @@     RealFrac t,     Field.C y, Dim.C v,     Module.C y yv, Storable yv) =>-      DN.T u t  {- ^ Maximum chunk size -}-   -> DN.T v y  {- ^ Output volume -}+      DN.T v y  {- ^ Output volume -}    -> DN.T u t  {- ^ Unit of the time values in the time ordered list. -}    -> Proc.T s u t (-         EventList.T (NonNeg.T t)+         Dur.T s Int+            {- v Maximum chunk size -}+      -> EventList.T (NonNeg.T t)             (SigA.T (Rate.Phantom s) (Amp.Dimensional v y) (SigSt.T yv))             {- v A list of pairs: (relative start time, signal part),                  The start time is relative                  to the start time of the previous event. -}       -> (SigA.T (Rate.Phantom s) (Amp.Dimensional v y) (SigSt.T yv)))             {- ^ The mixed signal. -}-arrangeStorableVolume chunkSize' amp unit' =+arrangeStorableVolume amp unit' =    do unit <- toTimeScalar unit'-      chunkSize <--         intFromTime98 "Dimensional.Cut.arrangeStorableVolume" chunkSize'-      return $ \sched ->+      return $ \(Dur.Cons chunkSize) sched ->          let z =                 SigA.fromBody amp $                 CutSt.arrange (SigSt.chunkSize chunkSize) $@@ -324,5 +325,46 @@                    (NonNeg.fromNumberMsg "Dimensional.Cut.arrangeStorableVolume" unit) $                 EventList.mapBody                    (SigA.vectorSamples (toAmplitudeScalar z))+                sched+         in  z++++-- ToDo: move to synthesizer-core?+arrangeTyped ::+   (SVT.Size size, Additive.C a, Storable a) =>+   SVT.ChunkSize size ->+   EventList.T NonNeg.Int (SVT.Vector size a) -> SVT.Vector size a+arrangeTyped chunkSize =+   SVT.fromVectorLazy .+   CutSt.arrange (SVT.lazyChunkSize chunkSize) .+   fmap SVT.toVectorLazy++{-# INLINE arrangeStorableTypedVolume #-}+arrangeStorableTypedVolume ::+   (Ring.C t, Dim.C u,+    RealFrac t,+    Field.C y, Dim.C v,+    Module.C y yv, Storable yv,+    SVT.Size size) =>+      DN.T v y  {- ^ Output volume -}+   -> DN.T u t  {- ^ Unit of the time values in the time ordered list. -}+   -> Proc.T s u t (+         EventList.T (NonNeg.T t)+            (SigA.T (Rate.Phantom s) (Amp.Dimensional v y) (SVT.Vector size yv))+            {- v A list of pairs: (relative start time, signal part),+                 The start time is relative+                 to the start time of the previous event. -}+      -> (SigA.T (Rate.Phantom s) (Amp.Dimensional v y) (SVT.Vector size yv)))+            {- ^ The mixed signal. -}+arrangeStorableTypedVolume amp unit' =+   do unit <- toTimeScalar unit'+      return $ \sched ->+         let z =+                SigA.fromBody amp $+                arrangeTyped SVT.chunkSize $+                EventList.resample+                   (NonNeg.fromNumberMsg "Dimensional.Cut.arrangeStorableTypedVolume" unit) $+                EventList.mapBody (SigA.vectorSamples (toAmplitudeScalar z))                 sched          in  z
src/Synthesizer/Dimensional/RateAmplitude/Demonstration.hs view
@@ -37,6 +37,7 @@  import qualified Synthesizer.Dimensional.Wave as WaveD import qualified Synthesizer.Dimensional.Amplitude as Amp+import qualified Synthesizer.Dimensional.Duration as Dur import qualified Synthesizer.Dimensional.Rate as Rate import Synthesizer.Dimensional.Wave ((&*~), ) @@ -180,6 +181,9 @@                    (DN.frequency 1, DN.frequency 1000)))  +second :: (RealField.C q) => q -> Proc.T s Dim.Time q (Dur.T s Int)+second t = Dur.fromTime $ DN.time t+ {-# INLINE airplane #-} airplane ::    (RealField.C q, Trans.C q, Module.C q q, Random q, Storable q) =>@@ -188,7 +192,7 @@    SigA.share       (Noise.white (DN.frequency 20000) (DN.voltage 0.2))       (\noise ->-          Cut.take (DN.time 5) $: (Disp.mix+          Cut.take $: second 5 $: (Disp.mix              $: noise              $: (Filt.frequencyModulation IpMod.linear                     $- DN.scalar 1.001@@ -229,7 +233,7 @@ windStereo =    SigA.share       wind-      (\w -> Cut.mergeStereo $: w $: (Cut.drop (DN.time 0.2) $: w))+      (\w -> Cut.mergeStereo $: w $: (Cut.drop $: second 0.2 $: w))   @@ -370,7 +374,7 @@       $- DN.frequency 4       $: (Cut.concatVolume (DN.scalar 1) $:           mapM (\p ->-             Cut.take (DN.time (1/6))+             Cut.take $: second (1/6)               $: Ctrl.constant (DN.scalar (fromInteger p / 12)))               (randomRs (0,24) (mkStdGen 3141))) @@ -434,7 +438,9 @@    Proc.T s Dim.Time q (SigA.R s Dim.Voltage q q) bubbles =    let delay = 0.24-   in  Filt.comb (DN.time delay) (0.5 `asTypeOf` delay) $:+   in  Filt.comb (0.5 `asTypeOf` delay)+       $: Dur.fromTime (DN.time delay)+       $:        (Osci.freqMod (DN.voltage 0.5 &*~ Wave.sine) zero $:          (DispA.mapExponential 0.5 (DN.frequency 440) $^             (Disp.mix@@ -455,8 +461,9 @@                (Disp.mix                   $: Osci.static (DN.scalar 1.5 &*~ Wave.saw) zero (DN.frequency 0.5)                   $: Osci.static (DN.scalar 0.5 &*~ Wave.saw) zero f))-   in  Filt.comb (DN.time delay) (0.5 `asTypeOf` delay) $:-          (Cut.mergeStereo+   in  Filt.comb (0.5 `asTypeOf` delay)+       $: Dur.fromTime (DN.time delay)+       $: (Cut.mergeStereo               $: channel (DN.frequency 10)               $: channel (DN.frequency 9.23)) @@ -466,8 +473,8 @@    (RealField.C q, Trans.C q, Module.C q q, Random q, Storable q) =>    Proc.T s Dim.Time q (SigA.R s Dim.Voltage q q) dampedEcho =-   FiltA.combProc (DN.time 0.2)-            (Filt.firstOrderLowpass $- DN.frequency 1000)+   FiltA.combProc (Filt.firstOrderLowpass $- DN.frequency 1000)+      $: Dur.fromTime (DN.time 0.2)       $: (Filt.envelope             $: CtrlR.exponential2 (DN.time 0.1)             $: Osci.static (DN.voltage 1 &*~ Wave.saw) zero (DN.frequency 440))@@ -495,7 +502,7 @@    (RealField.C q, Trans.C q) =>    Proc.T s Dim.Time q (SigA.T (Rate.Phantom s) (Amp.Flat q) (Sig.T q)) staticSine =-   CutR.take (DN.time 10)+   CutR.take $: second 10       $: (Osci.static (WaveD.flat Wave.sine) zero (DN.frequency 440))  @@ -637,7 +644,7 @@    in  renderToAIFF        File.renderTimeVoltageMonoDoubleToInt16        subName-       (Cut.take (DN.time 10) $: fmap filterSelect sound)+       (Cut.take $: second 10 $: fmap filterSelect sound)  renderFilter ::    (Interpol.C Double param,@@ -708,9 +715,9 @@              File.renderTimeVoltageStereoDoubleToInt16              name (fromSound sound)) $ -         ("bass-filter", Sound (Cut.take (DN.time 15) $: bassFilter)) :-         ("wind",        Sound (Cut.take (DN.time 10) $: windStereo)) :-         ("bubbles",     Sound (Cut.take (DN.time 10) $: bubblesStereo)) :+         ("bass-filter", Sound (Cut.take $: second 15 $: bassFilter)) :+         ("wind",        Sound (Cut.take $: second 10 $: windStereo)) :+         ("bubbles",     Sound (Cut.take $: second 10 $: bubblesStereo)) :          []        mapM_@@ -775,38 +782,38 @@          but we leave them for demonstration purposes.          -}          ("moog-saw-direct",-                         Sound (Cut.take (DN.time 10) $: moogSawDirect)) :+                         Sound (Cut.take $: second 10 $: moogSawDirect)) :          ("moog-saw-causal",-                         Sound (Cut.take (DN.time 10) $: moogSawCausal)) :+                         Sound (Cut.take $: second 10 $: moogSawCausal)) :           ("allpass-phaser-direct",-                         Sound (Cut.take (DN.time 10) $: allpassPhaserDirect)) :+                         Sound (Cut.take $: second 10 $: allpassPhaserDirect)) :          ("allpass-phaser-causal",-                         Sound (Cut.take (DN.time 10) $: allpassPhaserCausal)) :+                         Sound (Cut.take $: second 10 $: allpassPhaserCausal)) :           ("universal-lowpass",-                         Sound (Cut.take (DN.time 10) $: universalLowpassDirect)) :+                         Sound (Cut.take $: second 10 $: universalLowpassDirect)) :          ("universal-lowpass-sync",-                         Sound (Cut.take (DN.time 10) $: universalLowpassSync)) :+                         Sound (Cut.take $: second 10 $: universalLowpassSync)) :          ("universal-lowpass-async-linear",-                         Sound (Cut.take (DN.time 10) $: universalLowpassAsyncLinear)) :+                         Sound (Cut.take $: second 10 $: universalLowpassAsyncLinear)) :          ("universal-lowpass-async-constant",-                         Sound (Cut.take (DN.time 10) $: universalLowpassAsyncConstant)) :+                         Sound (Cut.take $: second 10 $: universalLowpassAsyncConstant)) : -         ("sine-low",    Sound (Cut.take (DN.time 1) $: sineLow)) :-         ("sine-high",   Sound (Cut.take (DN.time 1) $: sineHigh)) :-         ("sine-mix",    Sound (Cut.take (DN.time 1) $: sineMix)) :-         ("exponential", Sound (Cut.take (DN.time 1) $: DN.voltage 1 &*^ exponential)) :-         ("ping",        Sound (Cut.take (DN.time 1) $: ping)) :-         ("ping-saw",    Sound (Cut.take (DN.time 1) $: pingSaw)) :+         ("sine-low",    Sound (Cut.take $: second 1 $: sineLow)) :+         ("sine-high",   Sound (Cut.take $: second 1 $: sineHigh)) :+         ("sine-mix",    Sound (Cut.take $: second 1 $: sineMix)) :+         ("exponential", Sound (Cut.take $: second 1 $: DN.voltage 1 &*^ exponential)) :+         ("ping",        Sound (Cut.take $: second 1 $: ping)) :+         ("ping-saw",    Sound (Cut.take $: second 1 $: pingSaw)) : ---         ("saw",         Sound (Cut.take (DN.time 2) $: saw)) :-         ("saw-vibrato", Sound (Cut.take (DN.time 2) $: sawVibrato)) :-         ("saw-chorus",  Sound (Cut.take (DN.time 2) $: sawChorus)) :+--         ("saw",         Sound (Cut.take $: second 2 $: saw)) :+         ("saw-vibrato", Sound (Cut.take $: second 2 $: sawVibrato)) :+         ("saw-chorus",  Sound (Cut.take $: second 2 $: sawChorus)) : -         ("wasp",        Sound (Cut.take (DN.time  5) $: wasp (DN.frequency 110))) :-         ("trapezoid",   Sound (Cut.take (DN.time  5) $: trapezoid)) :-         ("damped-echo", Sound (Cut.take (DN.time  4) $: dampedEcho)) :+         ("wasp",        Sound (Cut.take $: second 5 $: wasp (DN.frequency 110))) :+         ("trapezoid",   Sound (Cut.take $: second 5 $: trapezoid)) :+         ("damped-echo", Sound (Cut.take $: second 4 $: dampedEcho)) :          ("chirp",       Sound (amplitudeModulationChirp)) :          ("airplane",        Sound airplane) :          {- This becomes considerably faster, if other effects are not rendered.@@ -829,7 +836,7 @@             renderToAIFF             File.renderTimeVoltageMonoDoubleToInt16             fileName-            (Cut.take (DN.time 1) $: fromSound tone)+            (Cut.take $: second 1 $: fromSound tone)   {-
src/Synthesizer/Dimensional/RateAmplitude/Filter.hs view
@@ -70,6 +70,7 @@ import qualified Synthesizer.Dimensional.Amplitude.Filter as FiltV -- import qualified Synthesizer.Dimensional.ControlledProcess as CProc import qualified Synthesizer.Dimensional.Process as Proc+import qualified Synthesizer.Dimensional.Duration as Dur import qualified Synthesizer.Dimensional.Rate as Rate  -- import Synthesizer.Dimensional.Process ((.:), (.^), )@@ -81,12 +82,12 @@ import qualified Synthesizer.State.Signal as Sig -- import Synthesizer.Plain.Signal (Modifier) -import Synthesizer.Dimensional.Process-   (DimensionGradient, toTimeScalar, {- toFrequencyScalar, -} )+import Synthesizer.Dimensional.Process (DimensionGradient, )  {- import qualified Synthesizer.Frame.Stereo as Stereo -}+import qualified Data.StorableVector.Lazy.Typed as SVT import Foreign.Storable (Storable, )  {-@@ -105,8 +106,8 @@ -} import qualified Synthesizer.State.Filter.NonRecursive as FiltNR -import qualified Synthesizer.Storable.Signal as SigSt import qualified Synthesizer.Generic.Filter.Recursive.Comb as Comb+import qualified Synthesizer.Generic.Signal as SigG  import qualified Number.DimensionTerm        as DN import qualified Algebra.DimensionTerm       as Dim@@ -126,6 +127,8 @@  -- import Control.Monad(liftM2) +import Data.Function.HT (Id)+ import NumericPrelude.Numeric hiding (negate) import NumericPrelude.Base as P import Prelude ()@@ -543,7 +546,7 @@ {- | Infinitely many equi-delayed exponentially decaying echos. -} {-# INLINE comb #-} comb :: (RealRing.C t, Module.C y yv, Dim.C u, Dim.C v, Storable yv) =>-   DN.T u t -> y -> Proc.T s u t (SigA.R s v y yv -> SigA.R s v y yv)+   y -> Proc.T s u t (Dur.T s Int -> SigA.R s v y yv -> SigA.R s v y yv) comb = FiltR.comb  @@ -552,23 +555,21 @@ combProc ::    (RealRing.C t, Absolute.C y, Field.C y, Module.C y yv,     Dim.C u, Dim.C v, Storable yv) =>-   DN.T u t ->    Proc.T s u t (SigA.R s v y yv -> SigA.R s v y yv) ->-   Proc.T s u t (SigA.R s v y yv -> SigA.R s v y yv)-combProc time proc =+   Proc.T s u t (Dur.T s Int -> SigA.R s v y yv -> SigA.R s v y yv)+combProc proc =    do f <- proc-      t <- fmap round $ toTimeScalar time-      let chunkSize = SigSt.chunkSize t-      return $ \x ->+      return $ \(Dur.Cons t) x ->          SigA.processBody-            (Sig.fromStorableSignal .+            (SigG.toState .              Comb.runProc t-                (Sig.toStorableSignal chunkSize .+                (SigG.fromState .                  SigA.vectorSamples (SigA.toAmplitudeScalar x) .                  f .                  SigA.fromBody (SigA.actualAmplitude x) .-                 Sig.fromStorableSignal) .-             Sig.toStorableSignal chunkSize) x+                 SigG.toState) .+             (id :: Id (SVT.DefaultVector a)) .+             SigG.fromState) x  {- combProc time proc sr x =
src/Synthesizer/Dimensional/RateAmplitude/Instrument.hs view
@@ -31,7 +31,7 @@  import qualified Synthesizer.Dimensional.Amplitude.Flat as Flat import qualified Synthesizer.Dimensional.Sample as Sample--- import qualified Synthesizer.Dimensional.Rate as Rate+import qualified Synthesizer.Dimensional.Duration as Dur  -- import qualified Synthesizer.Storable.Signal as SigSt import Foreign.Storable (Storable, )@@ -244,7 +244,9 @@ fatPad freq =    let env =           Cut.append-             $: (Cut.take (DN.time 0.7) $:+             $: (Cut.take+                  $: (Dur.fromTime $ DN.time 0.7)+                  $:                   Ctrl.cubicHermite                    (DN.time 0,   (DN.fromNumber 0,   DN.frequency 1 &*& DN.fromNumber 5))                    (DN.time 0.7, (DN.fromNumber 0.5, DN.frequency 1 &*& DN.fromNumber 0)))@@ -265,11 +267,11 @@    (RealField.C a, Trans.C a, Module.C a a, Random a) =>    DN.T Dim.Frequency a -> Proc.T s Dim.Time a (SigA.R s Dim.Voltage a a) brass freq =-   let blobEnv = Piece.runState+   let blobEnv = Piece.run           (DN.fromNumber 0  |# (DN.time 0.05, Piece.cosine) #|-            DN.fromNumber 1 -|# (DN.time 0.05, Piece.cosine) #|            DN.fromNumber 0)-       adsr = Piece.runState+       adsr = Piece.run           (DN.fromNumber 0 |# (DN.time 0.1, Piece.cubic (DN.frequency 1 &*& DN.fromNumber 10) (DN.frequency 1 &*& DN.fromNumber 0)) #|-            DN.fromNumber 0.5 -|# (DN.time 1, Piece.step) #|-            DN.fromNumber 0.5 -|# (DN.time 0.3, Piece.exponential (DN.fromNumber 0)) #|@@ -506,8 +508,8 @@    DN.T Dim.Frequency a ->    Proc.T s Dim.Time a (SigA.R s Dim.Voltage a a) noiseBass freq =-   FiltA.combProc (DN.unrecip freq)-      (Filt.firstOrderLowpass $- DN.frequency 2000)+   FiltA.combProc (Filt.firstOrderLowpass $- DN.frequency 2000)+      $: Dur.fromTime (DN.unrecip freq)       $: noisePerc  {-|@@ -524,8 +526,8 @@    Proc.T s Dim.Time a (SigA.R s Dim.Voltage a a) electroTom =    let ks =-         FiltA.combProc (DN.time (1/30))-            (Filt.firstOrderLowpass $- (DN.frequency 1000))+         FiltA.combProc (Filt.firstOrderLowpass $- (DN.frequency 1000))+            $: Dur.fromTime (DN.time (1/30))             $: noisePerc    in  Filt.frequencyModulation Interpolation.linear           $: CtrlR.exponential2 (DN.time 0.3)@@ -536,7 +538,9 @@    (RealField.C q, Trans.C q, Module.C q q, Random q) =>    Proc.T s Dim.Time q (SigA.R s Dim.Voltage q q) bassDrum =-   Cut.take (DN.time 0.15) $:+   Cut.take+   $: (Dur.fromTime $ DN.time 0.15)+   $:    (Disp.mix     $: (Filt.firstOrderLowpass           $- (DN.frequency 5000)
src/Synthesizer/Dimensional/RateAmplitude/Piece.hs view
@@ -16,7 +16,6 @@ import qualified Synthesizer.Dimensional.Process as Proc import Synthesizer.Dimensional.Process           (toTimeScalar, toGradientScalar, DimensionGradient, )--- import Synthesizer.Dimensional.Process (($:), ($#), )  import qualified Synthesizer.Dimensional.Amplitude as Amp import qualified Synthesizer.Dimensional.Rate as Rate@@ -39,7 +38,6 @@ -- import Control.Monad.Fix (mfix, ) import Control.Monad (liftM3, ) -import NumericPrelude.Numeric (zero, ) import NumericPrelude.Base import Prelude () @@ -48,13 +46,13 @@ type T s u v sig q =    Piecewise.Piece       (DN.T u q) (DN.T v q)-      (DN.T v q -> SigG.LazySize -> q ->+      (DN.T v q -> q ->        Proc.T s u q (SigA.T (Rate.Phantom s) (Amp.Flat q) (sig q)))  type Sequence s u v sig q =    Piecewise.T       (DN.T u q) (DN.T v q)-      (DN.T v q -> SigG.LazySize -> q ->+      (DN.T v q -> q ->        Proc.T s u q (SigA.T (Rate.Phantom s) (Amp.Flat q) (sig q)))  @@ -64,12 +62,11 @@ infinite descriptions cannot be used here. -} {-# INLINE run #-}-run :: (Trans.C q, RealRing.C q, Dim.C u, Dim.C v, SigG.Write sig q) =>-   DN.T u q ->+run :: (Trans.C q, RealRing.C q, Dim.C u, Dim.C v, SigG.Produce sig q) =>    Sequence s u v sig q ->    Proc.T s u q (SigA.T (Rate.Phantom s) (Amp.Dimensional v q) (sig q))-run lazySize cs =-   runVolume lazySize cs $+run cs =+   runVolume cs $    maximum $    map (\c -> max (DN.abs (Piecewise.pieceY0 c))                   (DN.abs (Piecewise.pieceY1 c))) cs@@ -77,39 +74,38 @@  {-# INLINE runVolume #-} runVolume ::-   (Trans.C q, RealRing.C q, Dim.C u, Dim.C v, SigG.Write sig q) =>-   DN.T u q ->+   (Trans.C q, RealRing.C q, Dim.C u, Dim.C v, SigG.Produce sig q) =>    Sequence s u v sig q ->    DN.T v q ->    Proc.T s u q (SigA.T (Rate.Phantom s) (Amp.Dimensional v q) (sig q))-runVolume lazySize' cs amplitude =+runVolume cs amplitude =    -- it would be nice if we could re-use Piece.run    do ts0 <- mapM (toTimeScalar . Piecewise.pieceDur) cs-      lazySize <--         Proc.intFromTime "Dimensional.Piece.runVolume" lazySize'       fmap (SigA.fromBody amplitude . SigG.concat) $          sequence $ zipWith             (\(n,t) (Piecewise.PieceData c yi0 yi1 d) ->                  fmap (SigG.take n . SigA.body) $-                 Piecewise.computePiece c yi0 yi1 d amplitude (SigG.LazySize lazySize) t)+                 Piecewise.computePiece c yi0 yi1 d amplitude t)             (Piecewise.splitDurations ts0)             cs  +{-# DEPRECATED runState "Use 'run' instead." #-} {-# INLINE runState #-} runState :: (Trans.C q, RealRing.C q, Dim.C u, Dim.C v) =>    Sequence s u v Sig.T q ->    Proc.T s u q (SigA.R s v q q)-runState = run zero+runState = run  +{-# DEPRECATED runStateVolume "Use 'runVolume' instead." #-} {-# INLINE runStateVolume #-} runStateVolume ::    (Trans.C q, RealRing.C q, Dim.C u, Dim.C v) =>    Sequence s u v Sig.T q ->    DN.T v q ->    Proc.T s u q (SigA.R s v q q)-runStateVolume = runVolume zero+runStateVolume = runVolume   {-# INLINE toAmpScalar #-}@@ -120,65 +116,65 @@    DN.divToScalar y amp  {-# INLINE make #-}-make :: (Field.C q, Dim.C u, Dim.C v, SigG.Write sig q) =>+make :: (Field.C q, Dim.C u, Dim.C v, SigG.Produce sig q) =>    Piece.T sig q -> T s u v sig q make piece =-   Piecewise.pieceFromFunction $ \ y0 y1 d amplitude lazySize t0 ->+   Piecewise.pieceFromFunction $ \ y0 y1 d amplitude t0 ->       flip fmap (toTimeScalar d) (\d' ->          SigA.flatFromBody $          Piecewise.computePiece piece             (toAmpScalar amplitude y0)             (toAmpScalar amplitude y1)-            d' lazySize t0)+            d' t0)  {-# INLINE step #-}-step :: (Field.C q, Dim.C u, Dim.C v, SigG.Write sig q) => T s u v sig q+step :: (Field.C q, Dim.C u, Dim.C v, SigG.Produce sig q) => T s u v sig q step =    make Piece.step  {-# INLINE linear #-}-linear :: (Field.C q, Dim.C u, Dim.C v, SigG.Write sig q) => T s u v sig q+linear :: (Field.C q, Dim.C u, Dim.C v, SigG.Produce sig q) => T s u v sig q linear =    make Piece.linear  {-# INLINE exponential #-}-exponential :: (Trans.C q, Dim.C u, Dim.C v, SigG.Write sig q) =>+exponential :: (Trans.C q, Dim.C u, Dim.C v, SigG.Produce sig q) =>    DN.T v q -> T s u v sig q exponential saturation =-   Piecewise.pieceFromFunction $ \ y0 y1 d amplitude lazySize t0 ->+   Piecewise.pieceFromFunction $ \ y0 y1 d amplitude t0 ->       flip fmap (toTimeScalar d) (\d' ->          SigA.flatFromBody $          Piecewise.computePiece             (Piece.exponential (toAmpScalar amplitude saturation))             (toAmpScalar amplitude y0)             (toAmpScalar amplitude y1)-            d' lazySize t0)+            d' t0)  {-# INLINE cosine #-}-cosine :: (Trans.C q, Dim.C u, Dim.C v, SigG.Write sig q) => T s u v sig q+cosine :: (Trans.C q, Dim.C u, Dim.C v, SigG.Produce sig q) => T s u v sig q cosine =    make Piece.cosine  {-# INLINE halfSine #-}-halfSine :: (Trans.C q, Dim.C u, Dim.C v, SigG.Write sig q) =>+halfSine :: (Trans.C q, Dim.C u, Dim.C v, SigG.Produce sig q) =>    Piece.FlatPosition -> T s u v sig q halfSine pos =    make (Piece.halfSine pos)  {-# INLINE cubic #-}-cubic :: (Field.C q, Dim.C u, Dim.C v, SigG.Write sig q) =>+cubic :: (Field.C q, Dim.C u, Dim.C v, SigG.Produce sig q) =>    DN.T (DimensionGradient u v) q ->    DN.T (DimensionGradient u v) q ->    T s u v sig q cubic yd0 yd1 =-   Piecewise.pieceFromFunction $ \ y0 y1 d amplitude lazySize t0 ->+   Piecewise.pieceFromFunction $ \ y0 y1 d amplitude t0 ->       liftM3 (\d' yd0' yd1' ->          SigA.flatFromBody $             Piecewise.computePiece                (Piece.cubic yd0' yd1')                (toAmpScalar amplitude y0)                (toAmpScalar amplitude y1)-               d' lazySize t0)+               d' t0)          (toTimeScalar d)          (toGradientScalar amplitude yd0)          (toGradientScalar amplitude yd1)
src/Synthesizer/Dimensional/RateAmplitude/Rain.hs view
@@ -40,6 +40,7 @@ import qualified Synthesizer.Dimensional.Amplitude.Flat as Flat import qualified Synthesizer.Dimensional.Amplitude as Amp import qualified Synthesizer.Dimensional.Sample as Sample+import qualified Synthesizer.Dimensional.Duration as Dur import qualified Synthesizer.Dimensional.Rate as Rate  import qualified Synthesizer.Frame.Stereo as Stereo@@ -55,7 +56,7 @@  import Synthesizer.Utility (balanceLevel, ) -import qualified Synthesizer.Storable.Signal as SigSt+import qualified Data.StorableVector.Lazy.Typed as SVT  import qualified Algebra.DimensionTerm as Dim import qualified Number.DimensionTerm  as DN@@ -130,13 +131,13 @@    fromIntegral pc / 12 + fromIntegral oct  -type Signal s amp a = SigA.T (Rate.Phantom s) amp (SigSt.T a)+type Signal s amp a = SigA.T (Rate.Phantom s) amp (SVT.DefaultVector a) type Flat = Amp.Flat Double type Volt = Amp.Dimensional Dim.Voltage Double  {- delay ::-   (SigG2.Transform sig y (Stereo.T y), SigG.Write sig y,+   (SigG2.Transform sig y (Stereo.T y), SigG.Produce sig y,     Additive.C y, Amp.Primitive amp,     RealField.C t, Dim.C u) =>    DN.T u t ->@@ -149,12 +150,13 @@    Proc.T s Dim.Time Double       (Signal s Flat Double -> Signal s Flat (Stereo.T Double)) delay time =-   let (appDelay, merge) =+   let (delTime, merge) =           if time>=zero-            then (Filt.delay time, flip CutA.mergeStereoPrimitive)-            else (Filt.delay (negate time), CutA.mergeStereoPrimitive)-   in  flip fmap appDelay-          (\del x -> merge x (del x))+            then (time, flip CutA.mergeStereoPrimitive)+            else (negate time, CutA.mergeStereoPrimitive)+   in  fmap+         (\del x -> merge x (del x))+         (Filt.delay $: Dur.fromTime delTime)  {-# INLINE bell #-} bell ::@@ -163,8 +165,8 @@    Proc.T s Dim.Time Double (Signal s Flat (Stereo.T Double)) bell del freq =    delay del .:-   SigA.store timeUnit .:-   CutR.take (DN.time 1) .:+   SigA.storeTyped .:+   (CutR.take $: Dur.fromTime (DN.time 1)) .:    (Filt.envelope $: CtrlR.exponential2 (DN.time 0.2)) $:    Osci.static (WaveD.flat Wave.sine) zero freq @@ -188,7 +190,7 @@    DN.Time Double ->    Proc.T s Dim.Time Double (SigA.R s Dim.Scalar Double Double) stringEnvelope duration =-   Piece.runState $+   Piece.run $       DN.scalar 0.01 |#          (stringAttack,           Piece.halfSine Piece.FlatRight) #|-@@ -318,8 +320,7 @@ chordSnds =    EventList.traverseBody       (\(tones,dur) ->-          (SigA.store timeUnit .:-           Disp.mixMulti) $:+          (SigA.storeTyped .: Disp.mixMulti) $:           mapM              (strings (fromIntegral (dur*chordTicks) *& timeUnit) .               (*& DN.frequency 440) . (2**) .@@ -415,7 +416,7 @@ simpleStorable :: Proc.T s Dim.Time Double (Signal s Volt (Stereo.T Double)) simpleStorable =    FiltA.amplify 0.5 $^-   (Cut.arrangeStorableVolume timeUnit (DN.voltage 1) timeUnit+   (Cut.arrangeStorableTypedVolume (DN.voltage 1) timeUnit --      $: chordSnds --      $: evolvingDropSnds       $: -- fmap (EventList.fromPairList . drop 1100 . EventList.toPairList)@@ -469,8 +470,9 @@ --      "rain-long.aiff"       "rain-short.aiff"       ((CutA.dropWhile (DN.voltage 1) (zero==) .^-        Cut.take-           ((2 * NonNeg.toNumber partTicks +-             fromIntegral stringAttackTicks) *& timeUnit))+        (Cut.take+          $: (Dur.fromTime $+               (2 * NonNeg.toNumber partTicks ++                fromIntegral stringAttackTicks) *& timeUnit)))          $: simple)      >> return ()
src/Synthesizer/Dimensional/RateAmplitude/Traumzauberbaum.hs view
@@ -33,6 +33,7 @@ import Synthesizer.Dimensional.Amplitude.Displacement (mapExponential, )  import qualified Synthesizer.Dimensional.Sample as Sample+import qualified Synthesizer.Dimensional.Duration as Dur  import qualified Synthesizer.Frame.Stereo as Stereo @@ -178,9 +179,9 @@    DN.voltage 1 &*~ Wave.trapezoid p  -{-# INLINE timeUnit #-}-timeUnit :: DN.T Dim.Time Double-timeUnit = DN.time 0.2+{-# INLINE intDur #-}+intDur :: Int -> Proc.T s Dim.Time Double (Dur.T s Int)+intDur dur = Dur.fromTime (fromIntegral dur *& DN.time 0.2)  {-# INLINE pitchControl #-} pitchControl ::@@ -189,7 +190,8 @@ pitchControl =    Cut.concatVolume (DN.scalar 1) $:    (mapM (\(p,dur) ->-      Cut.take (fromIntegral dur *& timeUnit)+      Cut.take+       $: intDur dur        $: Ctrl.constant (DN.scalar (assemblePitch p))) melody)  @@ -307,7 +309,7 @@    Proc.T s Dim.Time Double (SigA.R s Dim.Voltage Double (Stereo.T Double)) chordAccompaniment =    Cut.concat $::-   (map (\(chd,dur) -> Cut.take (fromIntegral dur *& timeUnit) $: makeChord chd) chords)+   (map (\(chd,dur) -> Cut.take $: intDur dur $: makeChord chd) chords)   @@ -318,12 +320,14 @@ bassControl =    Cut.concatVolume (DN.scalar 1) $::    (map (\(p,dur) ->-      Cut.take (fromIntegral dur *& timeUnit)+      Cut.take+       $: intDur dur        $: Ctrl.constant (DN.scalar (assemblePitch p))) bass) {-    Cut.concatVolume (DN.scalar 1) $:    (mapM (\(p,dur) ->-      Cut.take (fromIntegral dur *& timeUnit)+      Cut.take+       $: intDur dur        $: Ctrl.constant (DN.scalar (assemblePitch p))) bass) -} @@ -411,7 +415,8 @@          $: (mapExponential 2 (DN.frequency 440) $^                (Cut.concatVolume (DN.scalar 1) $:                    (mapM (\p ->-                      Cut.take (2 *& timeUnit)+                      Cut.take+                         $: intDur 2                          $: Ctrl.constant (DN.scalar (assemblePitch p))) harmony)))          $: accompaniment) 
src/Synthesizer/Dimensional/Signal.hs view
@@ -7,7 +7,7 @@    asTypeOfAmplitude,    render, apply,    cache, bindCached, share,-   store, restore,+   store, storeTyped, restore,    ($-),  ($&),    (&*^), (&*>^),    ) where
src/Synthesizer/Dimensional/Signal/Private.hs view
@@ -7,6 +7,7 @@ module Synthesizer.Dimensional.Signal.Private where  import qualified Synthesizer.Dimensional.Amplitude as Amp+import qualified Synthesizer.Dimensional.Duration as Dur import qualified Synthesizer.Dimensional.Rate as Rate  import qualified Synthesizer.Dimensional.Process as Proc@@ -19,7 +20,8 @@ import qualified Synthesizer.Storable.Signal as SigSt import qualified Synthesizer.Frame.Stereo as Stereo import qualified Synthesizer.Basic.Binary as BinSmp-import Data.Int (Int16, )+import qualified Data.StorableVector.Lazy.Typed as SVT+import Data.Int (Int, Int16, ) import Foreign.Storable (Storable, )  import qualified Synthesizer.State.Signal as Sig@@ -150,7 +152,7 @@ Of course, for stereo signals @Stereo.T@ should be prefered. -} zip ::-   (SigG.Transform sig y1, SigG.Transform sig (y0,y1), SigG.Read sig y0) =>+   (SigG.Transform sig y1, SigG.Transform sig (y0,y1), SigG.Consume sig y0) =>    T (Rate.Phantom s) amp0 (sig y0) ->    T (Rate.Phantom s) amp1 (sig y1) ->    T (Rate.Phantom s) (amp0,amp1) (sig (y0,y1))@@ -233,22 +235,40 @@   +{-# INLINE lazyFromDefaultTypedVector #-}+lazyFromDefaultTypedVector ::+   (Storable yv) =>+   T rate amp (SVT.DefaultVector yv) -> T rate amp (SigSt.T yv)+lazyFromDefaultTypedVector =+   processBody SVT.toVectorLazy+ {-# INLINE store #-} store ::    (RealRing.C t, Dim.C u, Storable yv) =>-   DN.T u t ->    Proc.T s u t (+      Dur.T s Int ->       {-       Rate.Phantom required,       because chunk size is dicretized with respect to the process' sample rate       -}       T (Rate.Phantom s) amp (Sig.T yv) ->       T (Rate.Phantom s) amp (SigSt.T yv))-store chunkSize =-   fmap-      (\cs -> processBody (Sig.toStorableSignal (SigSt.chunkSize cs)))-      (Proc.intFromTime "Dimensional.Signal.store" chunkSize)+store =+   Proc.pure $ \(Dur.Cons cs) ->+      processBody (Sig.toStorableSignal (SigSt.chunkSize cs)) +{-# INLINE storeTyped #-}+storeTyped ::+   (SVT.Size size, RealRing.C t, Dim.C u, Storable yv) =>+   Proc.T s u t (+      {-+      Rate.Phantom required,+      because chunk size is dicretized with respect to the process' sample rate+      -}+      T (Rate.Phantom s) amp (Sig.T yv) ->+      T (Rate.Phantom s) amp (SVT.Vector size yv))+storeTyped = Proc.pure $ processBody SigG.fromState+ {- better use ChunkySize.Signal.store we do not need Proc context@@ -266,7 +286,7 @@  {-# INLINE restore #-} restore ::-   (SigG.Read sig yv) =>+   (SigG.Consume sig yv) =>    T rate amp (sig yv) ->    T rate amp (Sig.T yv) restore =
synthesizer-dimensional.cabal view
@@ -1,5 +1,5 @@ Name:           synthesizer-dimensional-Version:        0.8.1.1+Version:        0.9 License:        GPL License-File:   LICENSE Author:         Henning Thielemann <haskell@henning-thielemann.de>@@ -33,24 +33,24 @@   Location:    http://code.haskell.org/synthesizer/dimensional/  Source-Repository this-  Tag:         0.8.1.1+  Tag:         0.9   Type:        darcs   Location:    http://code.haskell.org/synthesizer/dimensional/  Library   Build-Depends:-    synthesizer-core >=0.8.1 && <0.9,+    synthesizer-core >=0.9 && <0.10,     transformers >=0.2 && <0.7,-    semigroups >=0.1 && <1.0,+    semigroups >=0.1 && <1,     event-list >=0.1 && <0.2,     non-negative >=0.1 && <0.2,     numeric-prelude >=0.3 && <0.5,     storable-record >=0.0.1 && <0.1,     sox >=0.2 && <0.3,-    storablevector >=0.2.3 && <0.3,-    bytestring >= 0.9 && <0.12,-    random >=1.0 && <2.0,-    utility-ht >=0.0.5 && <0.1,+    storablevector >=0.2.12 && <0.3,+    bytestring >= 0.9 && <0.13,+    random >=1.0 && <1.4,+    utility-ht >=0.0.13 && <0.1,     base >= 4 && <5    If impl(ghc>=7.0)@@ -66,6 +66,7 @@     Synthesizer.Dimensional.Amplitude     Synthesizer.Dimensional.Sample     Synthesizer.Dimensional.Rate+    Synthesizer.Dimensional.Duration     Synthesizer.Dimensional.Arrow     Synthesizer.Dimensional.Map     Synthesizer.Dimensional.Map.Displacement@@ -120,6 +121,7 @@     Build-Depends:       synthesizer-dimensional,       synthesizer-core,+      storablevector,       numeric-prelude,       event-list,       utility-ht,@@ -141,7 +143,7 @@ Executable demonstration   If flag(buildExamples)     Build-Depends:-      explicit-exception >=0.1.6 && <0.2,+      explicit-exception >=0.1.6 && <0.3,       old-time >=1.0 && <2,        synthesizer-dimensional,