synthesizer-core-0.7.0.2: Audio signal processing coded in Haskell: Low level part

Portabilityrequires multi-parameter type classes
Stabilityprovisional
Maintainersynthesizer@henning-thielemann.de
Safe HaskellNone

Synthesizer.State.Control

Contents

Description

 

Synopsis

Control curve generation

constant :: a -> T a

linear

Arguments

:: C a 
=> a

steepness

-> a

initial value

-> T a

linear progression

linearMultiscale :: C y => y -> y -> T y

As stable as the addition of time values.

linearMultiscaleNeutral :: C y => y -> T y

Linear curve starting at zero.

line

Arguments

:: C y 
=> Int

length

-> (y, y)

initial and final value

-> T y

linear progression

Linear curve of a fixed length. The final value is not actually reached, instead we stop one step before. This way we can concatenate several lines without duplicate adjacent values.

exponential

Arguments

:: C a 
=> a

time where the function reaches 1/e of the initial value

-> a

initial value

-> T a

exponential decay

exponentialMultiscale

Arguments

:: C a 
=> a

time where the function reaches 1/e of the initial value

-> a

initial value

-> T a

exponential decay

exponentialMultiscaleNeutral

Arguments

:: C y 
=> y

time where the function reaches 1/e of the initial value

-> T y

exponential decay

exponential2

Arguments

:: C a 
=> a

half life

-> a

initial value

-> T a

exponential decay

exponential2Multiscale

Arguments

:: C a 
=> a

half life

-> a

initial value

-> T a

exponential decay

exponential2MultiscaleNeutral

Arguments

:: C y 
=> y

half life

-> T y

exponential decay

exponentialFromTo

Arguments

:: C y 
=> y

time where the function reaches 1/e of the initial value

-> y

initial value

-> y

value after given time

-> T y

exponential decay

exponentialFromToMultiscale

Arguments

:: C y 
=> y

time where the function reaches 1/e of the initial value

-> y

initial value

-> y

value after given time

-> T y

exponential decay

vectorExponential

Arguments

:: (C a, C a v) 
=> a

time where the function reaches 1/e of the initial value

-> v

initial value

-> T v

exponential decay

This is an extension of exponential to vectors which is straight-forward but requires more explicit signatures. But since it is needed rarely I setup a separate function.

vectorExponential2

Arguments

:: (C a, C a v) 
=> a

half life

-> v

initial value

-> T v

exponential decay

cosine

Arguments

:: C a 
=> a

time t0 where 1 is approached

-> a

time t1 where -1 is approached

-> T a

a cosine wave where one half wave is between t0 and t1

cubicHermite :: C a => (a, (a, a)) -> (a, (a, a)) -> T a

piecewise curves

splitDurations :: C t => [t] -> [(Int, t)]

piecewise :: C a => T a a (a -> T a) -> T a

type Piece a = Piece a a (a -> T a)

linearPiece :: C a => Piece a

exponentialPiece :: C a => a -> Piece a

cosinePiece :: C a => Piece a

halfSinePiece :: C a => FlatPosition -> Piece a

 Graphics.Gnuplot.Simple.plotList [] $ Sig.toList $ piecewise $ 1 |# (10.9, halfSinePiece FlatRight) #| 2

cubicPiece :: C a => a -> a -> Piece a

auxiliary functions

curveMultiscale :: (y -> y -> y) -> y -> y -> T y

curveMultiscaleNeutral :: (y -> y -> y) -> y -> y -> T y