synthesizer-dimensional 0.5 → 0.5.1
raw patch · 27 files changed
+197/−129 lines, 27 filesdep +explicit-exceptiondep −binarydep −process
Dependencies added: explicit-exception
Dependencies removed: binary, process
Files
- src/Synthesizer/Dimensional/Amplitude/Analysis.hs +1/−1
- src/Synthesizer/Dimensional/Amplitude/Displacement.hs +1/−4
- src/Synthesizer/Dimensional/Causal/Analysis.hs +56/−0
- src/Synthesizer/Dimensional/Causal/ControlledProcess.hs +0/−4
- src/Synthesizer/Dimensional/Causal/Filter.hs +2/−4
- src/Synthesizer/Dimensional/Causal/Oscillator.hs +0/−2
- src/Synthesizer/Dimensional/Causal/Oscillator/Core.hs +1/−1
- src/Synthesizer/Dimensional/ChunkySize/Signal.hs +0/−14
- src/Synthesizer/Dimensional/Cyclic/Analysis.hs +21/−22
- src/Synthesizer/Dimensional/Cyclic/Signal.hs +5/−12
- src/Synthesizer/Dimensional/Map.hs +0/−2
- src/Synthesizer/Dimensional/Map/Displacement.hs +63/−3
- src/Synthesizer/Dimensional/Rate/Cut.hs +1/−1
- src/Synthesizer/Dimensional/Rate/Oscillator.hs +0/−1
- src/Synthesizer/Dimensional/RateAmplitude/Control.hs +0/−8
- src/Synthesizer/Dimensional/RateAmplitude/Cut.hs +1/−1
- src/Synthesizer/Dimensional/RateAmplitude/Demonstration.hs +19/−9
- src/Synthesizer/Dimensional/RateAmplitude/File.hs +0/−4
- src/Synthesizer/Dimensional/RateAmplitude/Instrument.hs +1/−3
- src/Synthesizer/Dimensional/RateAmplitude/Noise.hs +0/−1
- src/Synthesizer/Dimensional/RateAmplitude/Piece.hs +0/−1
- src/Synthesizer/Dimensional/RateAmplitude/Play.hs +0/−3
- src/Synthesizer/Dimensional/RateAmplitude/Rain.hs +1/−6
- src/Synthesizer/Dimensional/RateAmplitude/Traumzauberbaum.hs +0/−10
- src/Synthesizer/Dimensional/Signal.hs +1/−0
- src/Synthesizer/Dimensional/Signal/Private.hs +10/−0
- synthesizer-dimensional.cabal +13/−12
src/Synthesizer/Dimensional/Amplitude/Analysis.hs view
@@ -53,7 +53,7 @@ import qualified Algebra.Additive as Additive -import NumericPrelude.Base (Ord, Bool, (<=), ($), (.), uncurry, error, )+import NumericPrelude.Base (Ord, Bool, (<=), ($), uncurry, ) -- import NumericPrelude.Numeric import qualified Prelude as P
src/Synthesizer/Dimensional/Amplitude/Displacement.hs view
@@ -34,11 +34,8 @@ import qualified Algebra.Transcendental as Trans import qualified Algebra.Module as Module import qualified Algebra.Field as Field-import qualified Algebra.Absolute as Absolute+import qualified Algebra.Absolute as Absolute import qualified Algebra.Ring as Ring-import qualified Algebra.Additive as Additive--import Algebra.Module ((*>)) import qualified Data.List as List
+ src/Synthesizer/Dimensional/Causal/Analysis.hs view
@@ -0,0 +1,56 @@+{- |+Copyright : (c) Henning Thielemann 2011+License : GPL++Maintainer : synthesizer@henning-thielemann.de+Stability : provisional+Portability : requires multi-parameter type classes+-}+module Synthesizer.Dimensional.Causal.Analysis (+ deltaSigmaModulationPositive,+ ) where++import qualified Synthesizer.Causal.Analysis as Ana+import qualified Synthesizer.Causal.Filter.NonRecursive as FiltNR++import qualified Synthesizer.Dimensional.Process as Proc+import qualified Synthesizer.Dimensional.Sample as Sample+import qualified Synthesizer.Dimensional.Amplitude as Amp++import qualified Synthesizer.Dimensional.Causal.Process as CausalD++import qualified Number.DimensionTerm as DN+import qualified Algebra.DimensionTerm as Dim+import Number.DimensionTerm ((&*&), )++import qualified Algebra.Field as Field+import qualified Algebra.RealRing as RealRing++import Control.Arrow (second, (<<<), )++import NumericPrelude.Base+-- import NumericPrelude.Numeric+import Prelude ()+++type DNS v y yv = Sample.Dimensional v y yv++++deltaSigmaModulationPositive ::+ (RealRing.C a, Field.C a, Dim.C u, Dim.C v) =>+ Proc.T s u a (CausalD.T s (DNS (Dim.Mul u v) a a, DNS v a a) (DNS v a a))+deltaSigmaModulationPositive =+ flip fmap Proc.getSampleRate $ \rate ->+ CausalD.consFlip $ \ (Amp.Numeric thresholdAmp, Amp.Numeric inputAmp) ->+ let targetAmp =+ DN.rewriteDimension+ (Dim.identityLeft .+ Dim.applyLeftMul Dim.cancelLeft .+ Dim.associateLeft) $+ rate &*& thresholdAmp+ ampRatio = DN.divToScalar inputAmp targetAmp+ in (Amp.Numeric targetAmp,+ Ana.deltaSigmaModulationPositive+ <<<+ second (FiltNR.amplify ampRatio))
src/Synthesizer/Dimensional/Causal/ControlledProcess.hs view
@@ -53,7 +53,6 @@ module Synthesizer.Dimensional.Causal.ControlledProcess where import qualified Synthesizer.Dimensional.Sample as Sample-import Synthesizer.Dimensional.Sample (Amplitude, Displacement, ) import Synthesizer.Dimensional.Causal.Process ((<<<), ) import qualified Synthesizer.Dimensional.Process as Proc@@ -76,9 +75,6 @@ -- import Number.DimensionTerm ((*&), ) -- ((&*&), (&/&)) import qualified Algebra.RealField as RealField--- import qualified Algebra.Field as Field--- import qualified Algebra.Ring as Ring-import qualified Algebra.Additive as Additive import Data.Tuple.HT (swap, ) import Control.Applicative (liftA2, )
src/Synthesizer/Dimensional/Causal/Filter.hs view
@@ -128,7 +128,7 @@ import qualified Number.DimensionTerm as DN import qualified Algebra.DimensionTerm as Dim -import Number.DimensionTerm ((&*&), (&/&))+import Number.DimensionTerm ((&*&), ) import qualified Number.NonNegative as NonNeg @@ -733,7 +733,5 @@ flip fmap Proc.getSampleRate $ \rate -> CausalD.consFlip $ \ (Amp.Numeric amp) -> (Amp.Numeric $- DN.rewriteDimension- (Dim.commute . Dim.applyRightMul Dim.invertRecip) $- amp &/& rate,+ DN.unrecip rate &*& amp, Integrate.causal)
src/Synthesizer/Dimensional/Causal/Oscillator.hs view
@@ -58,10 +58,8 @@ import qualified Number.DimensionTerm as DN import qualified Algebra.DimensionTerm as Dim--- import Number.DimensionTerm ((&*&)) import qualified Algebra.RealField as RealField-import qualified Algebra.Ring as Ring import NumericPrelude.Numeric import NumericPrelude.Base as P
src/Synthesizer/Dimensional/Causal/Oscillator/Core.hs view
@@ -31,7 +31,7 @@ -- import qualified Algebra.Ring as Ring -- import NumericPrelude.Numeric-import NumericPrelude.Base as P+-- import NumericPrelude.Base as P type Frequency u t = Amp.Numeric (DN.T (Dim.Recip u) t)
src/Synthesizer/Dimensional/ChunkySize/Signal.hs view
@@ -11,7 +11,6 @@ store, length, ) where --- import qualified Synthesizer.Dimensional.Process as Proc import qualified Synthesizer.Dimensional.Rate as Rate import qualified Synthesizer.Dimensional.Amplitude as Amp import qualified Synthesizer.Dimensional.Signal.Private as SigA@@ -21,19 +20,6 @@ import qualified Synthesizer.ChunkySize.Signal as SigC import qualified Synthesizer.State.Signal as Sig---- import qualified Number.DimensionTerm as DN--- import qualified Algebra.DimensionTerm as Dim---- import qualified Number.NonNegative as NonNeg---- import qualified Algebra.RealRing as RealRing--- import qualified Algebra.Field as Field----- import NumericPrelude.Numeric hiding (negate)--- import NumericPrelude.Base as P-import Prelude hiding (splitAt, take, drop, length, ) type Signal s amp sig =
src/Synthesizer/Dimensional/Cyclic/Analysis.hs view
@@ -1,5 +1,6 @@+{-# LANGUAGE FlexibleContexts #-} {- |-Copyright : (c) Henning Thielemann 2008-2009+Copyright : (c) Henning Thielemann 2008-2011 License : GPL Maintainer : synthesizer@henning-thielemann.de@@ -10,11 +11,10 @@ toFrequencySpectrum, fromFrequencySpectrum, ) where +import qualified Synthesizer.Generic.Fourier as FourierG+import qualified Synthesizer.Generic.Signal as SigG import qualified Synthesizer.Generic.Cut as CutG -import qualified Synthesizer.State.Analysis as Ana-import qualified Synthesizer.State.Signal as Sig- import qualified Synthesizer.Dimensional.Rate as Rate import qualified Synthesizer.Dimensional.Amplitude as Amp import qualified Synthesizer.Dimensional.Signal.Private as SigA@@ -31,9 +31,9 @@ import qualified Algebra.Field as Field -import NumericPrelude.Base ((.), )-import NumericPrelude.Numeric ((+), negate, (/), fromIntegral, pi, )-import Prelude (Int, )+import NumericPrelude.Base ((.), ($), )+import NumericPrelude.Numeric (fromIntegral, )+import Prelude () {- * Positions -}@@ -58,20 +58,19 @@ Fourier analysis -} {-# INLINE toFrequencySpectrum #-}-toFrequencySpectrum :: (Trans.C q, Dim.C u, Dim.C v) =>- SigA.T (Rate.Dimensional u q) (Amp.Dimensional v q) (SigC.T (Sig.T (Complex.T q))) ->- SigA.T (Rate.Dimensional (Dim.Recip u) q) (Amp.Dimensional (Dim.Mul u v) q) (SigC.T (Sig.T (Complex.T q)))+toFrequencySpectrum ::+ (Trans.C q, Dim.C u, Dim.C v,+ SigG.Transform sig (Complex.T q)) =>+ SigA.T (Rate.Dimensional u q) (Amp.Dimensional v q) (SigC.T (sig (Complex.T q))) ->+ SigA.T (Rate.Dimensional (Dim.Recip u) q) (Amp.Dimensional (Dim.Mul u v) q) (SigC.T (sig (Complex.T q))) toFrequencySpectrum x = let len = DN.rewriteDimension Dim.doubleRecip (period x) amp = SigA.actualAmplitude x- ss = SigC.toPeriod (SigA.body x)- n = Sig.length ss- z = Complex.cis (negate (pi+pi) / fromIntegral n) newAmp = DN.unrecip (SigA.actualSampleRate x) &*& amp in SigA.Cons (Rate.Actual len) (Amp.Numeric newAmp)- (SigC.Cons (Sig.take n (Ana.chirpTransform z ss)))+ (SigC.Cons $ FourierG.transformBackward $ SigC.toPeriod $ SigA.body x) {- toFrequencySpectrum $ SigP.Cons (DN.frequency (4::Prelude.Double)) (SigA.Cons (DN.voltage (1::Prelude.Double)) (SigC.Cons [1, 0 Number.Complex.+: (1::Prelude.Double), -1, 0 Number.Complex.+: (-1)])) toFrequencySpectrum $ SigP.Cons (DN.frequency (4::Prelude.Double)) (SigA.Cons (DN.voltage (1::Prelude.Double)) (SigC.Cons [0 Number.Complex.+: (1::Prelude.Double), -1, 0 Number.Complex.+: (-1), 1]))@@ -83,20 +82,20 @@ Fourier synthesis -} {-# INLINE fromFrequencySpectrum #-}-fromFrequencySpectrum :: (Trans.C q, Dim.C u, Dim.C v) =>- SigA.T (Rate.Dimensional (Dim.Recip u) q) (Amp.Dimensional (Dim.Mul u v) q) (SigC.T (Sig.T (Complex.T q))) ->- SigA.T (Rate.Dimensional u q) (Amp.Dimensional v q) (SigC.T (Sig.T (Complex.T q)))+fromFrequencySpectrum ::+ (Trans.C q, Dim.C u, Dim.C v,+ SigG.Transform sig (Complex.T q)) =>+ SigA.T (Rate.Dimensional (Dim.Recip u) q) (Amp.Dimensional (Dim.Mul u v) q) (SigC.T (sig (Complex.T q))) ->+ SigA.T (Rate.Dimensional u q) (Amp.Dimensional v q) (SigC.T (sig (Complex.T q))) fromFrequencySpectrum x = let len = period x amp = SigA.actualAmplitude x- ss = SigC.toPeriod (SigA.body x)- n = Sig.length ss- z = Complex.cis ((pi+pi) / fromIntegral n) newAmp = DN.rewriteDimension- (Dim.identityLeft . Dim.applyLeftMul Dim.cancelLeft . Dim.associateLeft)+ (Dim.identityLeft .+ Dim.applyLeftMul Dim.cancelLeft . Dim.associateLeft) (DN.unrecip (SigA.actualSampleRate x) &*& amp) in SigA.Cons (Rate.Actual len) (Amp.Numeric newAmp)- (SigC.Cons (Sig.take n (Ana.chirpTransform z ss)))+ (SigC.Cons $ FourierG.transformForward $ SigC.toPeriod $ SigA.body x)
src/Synthesizer/Dimensional/Cyclic/Signal.hs view
@@ -1,5 +1,5 @@ {- |-Copyright : (c) Henning Thielemann 2008-2009+Copyright : (c) Henning Thielemann 2008-2011 License : GPL Maintainer : synthesizer@henning-thielemann.de@@ -16,12 +16,9 @@ -- import qualified Synthesizer.Format as Format --- import qualified Synthesizer.Generic.Cut as CutG+import qualified Synthesizer.Generic.Cyclic as Cyclic import qualified Synthesizer.Generic.Signal as SigG-import qualified Synthesizer.State.Signal as Sig---- import qualified Number.DimensionTerm as DN--- import qualified Algebra.DimensionTerm as Dim+-- import qualified Synthesizer.State.Signal as Sig {- import qualified Algebra.Module as Module@@ -30,8 +27,6 @@ -} import qualified Algebra.Additive as Additive --- import Number.DimensionTerm ((&/&))- import Data.Monoid (Monoid, ) @@ -82,12 +77,10 @@ -} {-# INLINE fromSignal #-} fromSignal ::- (Additive.C yv, SigG.Transform sig yv) =>+ (Additive.C yv, SigG.Write sig yv) => Int -> sig yv -> T (sig yv) fromSignal n =- fromPeriod .- Sig.foldL SigG.mix SigG.empty {- Sig.sum -} .- SigG.sliceVertical n+ fromPeriod . Cyclic.fromSignal SigG.defaultLazySize n {- | Convert a cyclic signal to a straight signal containing a loop.
src/Synthesizer/Dimensional/Map.hs view
@@ -5,7 +5,6 @@ module Synthesizer.Dimensional.Map where import qualified Synthesizer.Dimensional.Sample as Sample-import Synthesizer.Dimensional.Sample (Amplitude, Displacement, ) import qualified Synthesizer.Dimensional.Arrow as ArrowD @@ -13,7 +12,6 @@ import qualified Synthesizer.Dimensional.Amplitude.Flat as Flat import qualified Synthesizer.Dimensional.Amplitude as Amp -import qualified Control.Arrow as Arrow import Control.Arrow (Arrow, ) import Control.Category (Category, )
src/Synthesizer/Dimensional/Map/Displacement.hs view
@@ -2,24 +2,27 @@ mix, mixVolume, fanoutAndMixMulti, fanoutAndMixMultiVolume, raise, distort,+ mapLinear, mapExponential, mapLinearDimension, ) where +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.Arrow as ArrowD -import qualified Control.Arrow as Arrow-import Control.Arrow (Arrow, arr, (^<<), (&&&), )+import Control.Arrow (Arrow, arr, (<<<), (^<<), (&&&), ) import qualified Number.DimensionTerm as DN import qualified Algebra.DimensionTerm as Dim+import Number.DimensionTerm ((&*&)) +import qualified Algebra.Transcendental as Trans import qualified Algebra.Module as Module import qualified Algebra.RealField as RealField import qualified Algebra.Field as Field import qualified Algebra.Absolute as Absolute--- import qualified Algebra.Ring as Ring+import qualified Algebra.Ring as Ring -- import qualified Algebra.Additive as Additive -- import Algebra.Module ((*>))@@ -156,6 +159,63 @@ (toAmplitudeScalar ampCtrl)) ++{- |+Map a control curve without amplitude unit+by a linear (affine) function with a unit.+This is a combination of 'raise' and 'amplify'.++It is not quite correct in the sense,+that it does not produce low-level sample values in the range (-1,1).+Instead it generates values around 1.+-}+{-# INLINE mapLinear #-}+mapLinear ::+ (Flat.C y flat, Ring.C y, Dim.C u, Arrow arrow) =>+ y ->+ DN.T u y ->+ ArrowD.T arrow (Sample.T flat y) (DNS u y y)+mapLinear depth center =+ ArrowD.Cons (\Amp.Flat ->+ (arr (\x -> one+x*depth), Amp.Numeric center))+ <<<+ ArrowD.canonicalizeFlat++{-# INLINE mapExponential #-}+mapExponential ::+ (Flat.C y flat, Trans.C y, Dim.C u, Arrow arrow) =>+ y ->+ DN.T u q ->+ ArrowD.T arrow (Sample.T flat y) (DNS u q y)+mapExponential depth center =+ {-+ X86 processors only have (logBase 2) and (2**).+ Thus on those machines computing with respect to base 2+ can be more efficient and more precise.+ -}+ let logDepth = log depth+ in ArrowD.Cons (\Amp.Flat ->+ (arr (exp . (logDepth*)), Amp.Numeric center))+ <<<+ ArrowD.canonicalizeFlat++{-# INLINE mapLinearDimension #-}+mapLinearDimension ::+ (Field.C y, Absolute.C y, Dim.C u, Dim.C v, Arrow arrow) =>+ DN.T v y {- ^ range: one is mapped to @center + range * ampX@ -}+ -> DN.T (Dim.Mul v u) y {- ^ center: zero is mapped to @center@ -}+ -> ArrowD.T arrow (DNS u y y) (DNS (Dim.Mul v u) y y)+mapLinearDimension range center =+ ArrowD.Cons $ \(Amp.Numeric ampIn) ->+ let absRange = DN.abs range &*& ampIn+ absCenter = DN.abs center+ ampOut = absRange + absCenter+ rng = DN.divToScalar absRange ampOut+ cnt = DN.divToScalar absCenter ampOut+ in (arr (\y -> cnt + rng*y), Amp.Numeric ampOut)+++-- auxiliary functions {-# INLINE toAmplitudeScalar #-} toAmplitudeScalar ::
src/Synthesizer/Dimensional/Rate/Cut.hs view
@@ -29,7 +29,7 @@ import Data.Monoid (Monoid, mappend, mconcat, ) -import NumericPrelude.Numeric hiding (negate)+-- import NumericPrelude.Numeric hiding (negate) -- import NumericPrelude.Base as P import Prelude hiding (splitAt, take, drop, concat, )
src/Synthesizer/Dimensional/Rate/Oscillator.hs view
@@ -42,7 +42,6 @@ import qualified Synthesizer.Dimensional.Causal.Process as CausalD import qualified Synthesizer.Dimensional.Causal.Oscillator.Core as OsciCore-import qualified Synthesizer.Dimensional.Causal.Oscillator as OsciC import qualified Synthesizer.Dimensional.Map as MapD import qualified Synthesizer.Dimensional.Sample as Sample
src/Synthesizer/Dimensional/RateAmplitude/Control.hs view
@@ -29,24 +29,16 @@ import Synthesizer.Dimensional.Signal.Private (toAmplitudeScalar, ) --- import qualified Synthesizer.Dimensional.Amplitude as Amp--- import qualified Synthesizer.Dimensional.Rate as Rate- import qualified Synthesizer.State.Signal as Sig import qualified Number.DimensionTerm as DN import qualified Algebra.DimensionTerm as Dim --- import Number.DimensionTerm ((&*&))---- import qualified Algebra.Module as Module import qualified Algebra.Transcendental as Trans import qualified Algebra.RealField as RealField import qualified Algebra.Field as Field import qualified Algebra.RealRing as RealRing--- import qualified Algebra.Ring as Ring import qualified Algebra.Absolute as Absolute-import qualified Algebra.Additive as Additive import NumericPrelude.Numeric import NumericPrelude.Base
src/Synthesizer/Dimensional/RateAmplitude/Cut.hs view
@@ -61,7 +61,7 @@ import qualified Data.List as List -import NumericPrelude.Base ((.), ($), Ord, (<=), map, return, error, )+import NumericPrelude.Base ((.), ($), Ord, (<=), map, return, ) -- import NumericPrelude.Numeric import Prelude (RealFrac, )
src/Synthesizer/Dimensional/RateAmplitude/Demonstration.hs view
@@ -59,12 +59,12 @@ import qualified Algebra.Transcendental as Trans import qualified Algebra.Module as Module import qualified Algebra.RealField as RealField-import qualified Algebra.Field as Field import qualified Algebra.Ring as Ring import System.Time (getClockTime, diffClockTimes, tdSec, tdPicosec, ) import System.IO (hFlush, stdout, )-import System.Exit (ExitCode)+import System.Exit (ExitCode(ExitFailure), exitWith, )+import qualified Control.Monad.Exception.Synchronous as Exc import System.Random (Random, randomRs, mkStdGen, ) @@ -115,20 +115,27 @@ $: exponential $: sineLow +{-# INLINE pingSaw #-}+pingSaw ::+ (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)+pingSaw =+ Filt.envelope+ $: exponential+ $: saw + {-# INLINE sawWave #-} sawWave :: (RealField.C a) => Wave.T a a sawWave = Wave.triangleAsymmetric (-0.9) -{- {-# INLINE saw #-} saw :: (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) saw = Osci.static (DN.voltage 1 &*~ sawWave) zero (DN.frequency 440)--} {-# INLINE sawVibrato #-} sawVibrato ::@@ -600,29 +607,31 @@ -} -measureTime :: String -> IO ExitCode -> IO ()+measureTime :: String -> IO a -> IO a measureTime name act = do putStr (name++": ") hFlush stdout timeA <- getClockTime- act+ res <- act timeB <- getClockTime let td = diffClockTimes timeB timeA print (fromIntegral (tdSec td) + fromInteger (tdPicosec td) * 1e-12 :: Double)+ return res renderToAIFF :: (Ring.C a) => (DN.Frequency a -> String -> t -> IO ExitCode) -> String -> t ->- IO ()+ Exc.ExceptionalT Int IO () renderToAIFF render name sound =+ Exc.fromExitCodeT $ measureTime name $ render (DN.frequency 44100) (name++".aiff") sound main :: IO ()-main =+main = Exc.resolveT (exitWith . ExitFailure) $ do {- Play.timeVoltageMonoDoubleR (DN.frequency 44100) bubbles@@ -646,7 +655,7 @@ mapM_ (\(name, filt@(Filter _filtResonance _filtDirect filtCausal)) ->- let render :: String -> (forall s. Proc.T s Dim.Time Double (SigA.R s Dim.Voltage Double Double)) -> IO ()+ let render :: String -> (forall s. Proc.T s Dim.Time Double (SigA.R s Dim.Voltage Double Double)) -> Exc.ExceptionalT Int IO () render ext sound = let subName = name ++ "-" ++ ext in renderToAIFF@@ -751,6 +760,7 @@ ("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)) : -- ("saw", Sound (Cut.take (DN.time 2) $: saw)) : ("saw-vibrato", Sound (Cut.take (DN.time 2) $: sawVibrato)) :
src/Synthesizer/Dimensional/RateAmplitude/File.hs view
@@ -26,16 +26,12 @@ import qualified Synthesizer.Storable.Signal as SigSt --- import qualified Synthesizer.Dimensional.Straight.Signal as SigS import qualified Synthesizer.State.Signal as Sig import qualified Algebra.ToInteger as ToInteger--- import qualified Algebra.Transcendental as Trans import qualified Algebra.Module as Module import qualified Algebra.RealField as RealField import qualified Algebra.Field as Field-import qualified Algebra.RealRing as RealRing--- import qualified Algebra.Ring as Ring import qualified Algebra.DimensionTerm as Dim import qualified Number.DimensionTerm as DN
src/Synthesizer/Dimensional/RateAmplitude/Instrument.hs view
@@ -24,8 +24,7 @@ import Synthesizer.Dimensional.Signal (($-), ($&), (&*^), (&*>^), ) import Synthesizer.Dimensional.RateAmplitude.Piece ((-|#), ( #|-), (|#), ( #|), )-import Synthesizer.Dimensional.Wave- ((&*~), mapLinear, mapExponential, )+import Synthesizer.Dimensional.Wave ((&*~), ) import Synthesizer.Dimensional.Process (($:), ($::), ($^), (.^), ($#), ) import qualified Synthesizer.Dimensional.Amplitude.Displacement as DispA@@ -55,7 +54,6 @@ import qualified Algebra.Transcendental as Trans import qualified Algebra.Module as Module import qualified Algebra.RealField as RealField-import qualified Algebra.Field as Field import qualified Algebra.Ring as Ring import System.Random (Random, randoms, randomRs, mkStdGen, )
src/Synthesizer/Dimensional/RateAmplitude/Noise.hs view
@@ -31,7 +31,6 @@ import qualified Algebra.Algebraic as Algebraic import qualified Algebra.Field as Field-import qualified Algebra.Ring as Ring import System.Random (Random, RandomGen, mkStdGen)
src/Synthesizer/Dimensional/RateAmplitude/Piece.hs view
@@ -8,7 +8,6 @@ import qualified Synthesizer.Generic.Piece as Piece import qualified Synthesizer.Generic.Signal as SigG-import qualified Synthesizer.Generic.Cut as CutG import qualified Synthesizer.State.Control as Ctrl import qualified Synthesizer.Piecewise as Piecewise
src/Synthesizer/Dimensional/RateAmplitude/Play.hs view
@@ -32,12 +32,9 @@ import qualified Number.DimensionTerm as DN import qualified Algebra.ToInteger as ToInteger--- import qualified Algebra.Transcendental as Trans import qualified Algebra.Module as Module import qualified Algebra.RealField as RealField import qualified Algebra.Field as Field-import qualified Algebra.RealRing as RealRing--- import qualified Algebra.Ring as Ring import System.Exit(ExitCode)
src/Synthesizer/Dimensional/RateAmplitude/Rain.hs view
@@ -29,7 +29,7 @@ import qualified Synthesizer.Dimensional.Signal as SigA import qualified Synthesizer.Dimensional.RateAmplitude.File as File-import qualified Synthesizer.Dimensional.RateAmplitude.Play as Play+-- import qualified Synthesizer.Dimensional.RateAmplitude.Play as Play import Synthesizer.Dimensional.Signal ((&*^), (&*>^), ) import Synthesizer.Dimensional.Process (($:), ($::), ($^), (.:), (.^), )@@ -67,12 +67,7 @@ import qualified Number.NonNegative as NonNeg -import qualified Algebra.Transcendental as Trans--- import qualified Algebra.Module as Module-import qualified Algebra.RealField as RealField-import qualified Algebra.Field as Field import qualified Algebra.Ring as Ring-import qualified Algebra.Additive as Additive import qualified Data.EventList.Relative.TimeBody as EventList
src/Synthesizer/Dimensional/RateAmplitude/Traumzauberbaum.hs view
@@ -44,16 +44,6 @@ import Number.DimensionTerm ((*&)) --- import qualified Number.NonNegative as NonNeg---- import qualified Algebra.Transcendental as Trans--- import qualified Algebra.Module as Module--- import qualified Algebra.RealField as RealField-import qualified Algebra.Field as Field-import qualified Algebra.Ring as Ring---- import System.Random (Random, randomRs, mkStdGen)- import NumericPrelude.Base import NumericPrelude.Numeric
src/Synthesizer/Dimensional/Signal.hs view
@@ -5,6 +5,7 @@ module Synthesizer.Dimensional.Signal ( T, R, asTypeOfAmplitude,+ render, apply, cache, bindCached, share, store, restore, ($-), ($&),
src/Synthesizer/Dimensional/Signal/Private.hs view
@@ -9,6 +9,7 @@ import qualified Synthesizer.Dimensional.Rate as Rate import qualified Synthesizer.Dimensional.Process as Proc+import Synthesizer.Dimensional.Process (($#), ) import qualified Synthesizer.Generic.Filter.NonRecursive as FiltG import qualified Synthesizer.Generic.Signal as SigG@@ -135,6 +136,15 @@ T (Rate.Dimensional u t) amp sig render rate signal = Proc.run rate (embedSampleRate Proc.$: signal)++{-# INLINE apply #-}+apply :: (Dim.C u) =>+ (forall s. Proc.T s u t (T (Rate.Phantom s) amp0 sig0 -> T (Rate.Phantom s) amp1 sig1)) ->+ T (Rate.Dimensional u t) amp0 sig0 -> T (Rate.Dimensional u t) amp1 sig1+apply p x =+ render+ (actualSampleRate x)+ (p $# Cons Rate.Phantom (amplitude x) (body x)) {-# INLINE processBody #-}
synthesizer-dimensional.cabal view
@@ -1,5 +1,5 @@ Name: synthesizer-dimensional-Version: 0.5+Version: 0.5.1 License: GPL License-File: LICENSE Author: Henning Thielemann <haskell@henning-thielemann.de>@@ -28,7 +28,7 @@ Source-Repository this- Tag: 0.5+ Tag: 0.5.1 Type: darcs Location: http://code.haskell.org/synthesizer/dimensional/ @@ -43,18 +43,13 @@ event-list >=0.1 && <0.2, non-negative >=0.1 && <0.2, numeric-prelude >=0.2 && <0.3,- utility-ht >=0.0.5 && <0.1, storable-record >=0.0.1 && <0.1, sox >=0.2 && <0.3, storablevector >=0.2.3 && <0.3,- binary >=0.1 && <1,- bytestring >= 0.9 && <0.10-- Build-Depends:- base >= 4 && <5,+ bytestring >= 0.9 && <0.10, random >=1.0 && <2.0,- old-time >=1.0 && <2,- process >=1.0 && <1.1+ utility-ht >=0.0.5 && <0.1,+ base >= 4 && <5 GHC-Options: -Wall Hs-source-dirs: src@@ -76,6 +71,7 @@ Synthesizer.Dimensional.Amplitude.Control Synthesizer.Dimensional.Amplitude.Displacement Synthesizer.Dimensional.Amplitude.Filter+ Synthesizer.Dimensional.Causal.Analysis Synthesizer.Dimensional.Causal.ControlledProcess Synthesizer.Dimensional.Causal.Displacement Synthesizer.Dimensional.Causal.Filter@@ -106,7 +102,7 @@ Synthesizer.Dimensional.Wave.Controlled -- Other-Modules:--- we need this in synthesizer-alsa for implementation of low-level functions+-- we need this in synthesizer-alsa and noisegenerator for implementation of low-level functions Synthesizer.Dimensional.Signal.Private -- Synthesizer.Dimensional.Utility @@ -121,8 +117,13 @@ Main-Is: Synthesizer/Dimensional/RateAmplitude/Rain.hs Executable demonstration- If !flag(buildExamples)+ If flag(buildExamples)+ Build-Depends:+ explicit-exception >=0.1.6 && <0.2,+ old-time >=1.0 && <2+ Else Buildable: False+ GHC-Options: -Wall -fexcess-precision If flag(optimizeAdvanced) GHC-Options: -O2 -fvia-C -optc-O2