Synthesizer.Basic.ToneModulation
Synopsis
 untangleShapePhase :: C a => Int -> a -> (a, a) -> (a, a) untangleShapePhaseAnalytic :: C a => Int -> a -> (a, a) -> (a, a) solveSLE2 :: C a => ((a, a), (a, a)) -> (a, a) -> (a, a) det2 :: C a => ((a, a), (a, a)) -> a flattenShapePhaseAnalytic :: C a => Int -> a -> (a, T a) -> (Int, (a, a)) flattenShapePhase :: C a => Int -> a -> (a, T a) -> (Int, (a, a)) shapeLimits :: C t => Margin -> Margin -> Int -> t -> (t, t) interpolationOffset :: Margin -> Margin -> Int -> Int interpolationNumber :: Margin -> Margin -> Int -> Int type Coords t = (Int, (Int, (t, t))) type Skip t = (Int, (t, T t))
Documentation
 untangleShapePhase :: C a => Int -> a -> (a, a) -> (a, a) Source

Convert from the (shape,phase) parameter pair to the index within a wave (step) and the index of a wave (leap) in the sampled prototype tone.

For this routine it would be simpler, if shape would measure in multiples of period (we would only need a Ring instance), but for shapeLimit it is better the way it is.

 untangleShapePhaseAnalytic :: C a => Int -> a -> (a, a) -> (a, a) Source
 solveSLE2 :: C a => ((a, a), (a, a)) -> (a, a) -> (a, a) Source
 det2 :: C a => ((a, a), (a, a)) -> a Source
 flattenShapePhaseAnalytic :: C a => Int -> a -> (a, T a) -> (Int, (a, a)) Source
 flattenShapePhase :: C a => Int -> a -> (a, T a) -> (Int, (a, a)) Source
 shapeLimits :: C t => Margin -> Margin -> Int -> t -> (t, t) Source
 interpolationOffset :: Margin -> Margin -> Int -> Int Source
 interpolationNumber :: Margin -> Margin -> Int -> Int Source
 type Coords t = (Int, (Int, (t, t))) Source
 type Skip t = (Int, (t, T t)) Source