|
Synthesizer.Plain.Interpolation |
|
|
|
|
Description |
ToDo:
use AffineSpace instead of Module for the particular interpolation types,
since affine combinations assert reconstruction of constant functions.
They are more natural for interpolation of internal control parameters.
However, how can cubic interpolation expressed by affine combinations
without divisions?
|
|
Synopsis |
|
data T t y = Cons {} | | zeroPad :: C t => (T t y -> t -> T y -> a) -> y -> T t y -> t -> T y -> a | | constantPad :: C t => (T t y -> t -> T y -> a) -> T t y -> t -> T y -> a | | cyclicPad :: C t => (T t y -> t -> T y -> a) -> T t y -> t -> T y -> a | | extrapolationPad :: C t => (T t y -> t -> T y -> a) -> T t y -> t -> T y -> a | | skip :: C t => T t y -> (t, T y) -> (t, T y) | | single :: C t => T t y -> t -> T y -> y | | singleRec :: (Ord t, C t) => T t y -> t -> T y -> y | | multiRelative :: C t => T t y -> t -> T y -> T t -> T y | | multiRelativeZeroPad :: C t => y -> T t y -> t -> T t -> T y -> T y | | multiRelativeConstantPad :: C t => T t y -> t -> T t -> T y -> T y | | multiRelativeCyclicPad :: C t => T t y -> t -> T t -> T y -> T y | | multiRelativeExtrapolationPad :: C t => T t y -> t -> T t -> T y -> T y | | multiRelativeZeroPadConstant :: (C t, C y) => t -> T t -> T y -> T y | | multiRelativeZeroPadLinear :: (C t, C t y) => t -> T t -> T y -> T y | | multiRelativeZeroPadCubic :: (C t, C t y) => t -> T t -> T y -> T y | | data PrefixReader y a = PrefixReader Int (StateT (T y) Maybe a) | | getNode :: PrefixReader y y | | fromPrefixReader :: String -> Int -> PrefixReader y (t -> y) -> T t y | | constant :: T t y | | linear :: C t y => T t y | | cubic :: (C t, C t y) => T t y | | cubicAlt :: (C t, C t y) => T t y | | cubicHalf :: C t y => t -> y -> y -> y | | piecewise :: C t y => Int -> [t -> t] -> T t y | | piecewiseConstant :: C t y => T t y | | piecewiseLinear :: C t y => T t y | | piecewiseCubic :: (C t, C t y) => T t y | | function :: C t y => (Int, Int) -> (t -> t) -> T t y | | minLength :: Int -> T y -> Bool |
|
|
Documentation |
|
|
interpolation as needed for resampling
| Constructors | Cons | | number :: Int | | offset :: Int | | func :: t -> T y -> y | |
|
|
|
|
Interpolation with various padding methods
|
|
zeroPad :: C t => (T t y -> t -> T y -> a) -> y -> T t y -> t -> T y -> a | Source |
|
|
constantPad :: C t => (T t y -> t -> T y -> a) -> T t y -> t -> T y -> a | Source |
|
|
cyclicPad :: C t => (T t y -> t -> T y -> a) -> T t y -> t -> T y -> a | Source |
|
Only for finite input signals.
|
|
extrapolationPad :: C t => (T t y -> t -> T y -> a) -> T t y -> t -> T y -> a | Source |
|
The extrapolation may miss some of the first and some of the last points
|
|
Interpolation of multiple values with various padding methods
|
|
skip :: C t => T t y -> (t, T y) -> (t, T y) | Source |
|
|
single :: C t => T t y -> t -> T y -> y | Source |
|
|
|
alternative implementation of single
|
|
Interpolation of multiple values with various padding methods
|
|
multiRelative :: C t => T t y -> t -> T y -> T t -> T y | Source |
|
All values of frequency control must be non-negative.
|
|
multiRelativeZeroPad :: C t => y -> T t y -> t -> T t -> T y -> T y | Source |
|
|
multiRelativeConstantPad :: C t => T t y -> t -> T t -> T y -> T y | Source |
|
|
multiRelativeCyclicPad :: C t => T t y -> t -> T t -> T y -> T y | Source |
|
|
multiRelativeExtrapolationPad :: C t => T t y -> t -> T t -> T y -> T y | Source |
|
The extrapolation may miss some of the first and some of the last points
|
|
All-in-one interpolation functions
|
|
multiRelativeZeroPadConstant :: (C t, C y) => t -> T t -> T y -> T y | Source |
|
|
multiRelativeZeroPadLinear :: (C t, C t y) => t -> T t -> T y -> T y | Source |
|
|
multiRelativeZeroPadCubic :: (C t, C t y) => t -> T t -> T y -> T y | Source |
|
|
Different kinds of interpolation
|
|
Hard-wired interpolations
|
|
|
Constructors | | Instances | |
|
|
|
|
|
|
|
Consider the signal to be piecewise constant.
|
|
|
Consider the signal to be piecewise linear.
|
|
|
Consider the signal to be piecewise cubic,
with smooth connections at the nodes.
It uses a cubic curve which has node values
x0 at 0 and x1 at 1 and derivatives
(x1-xm1)2 and (x2-x0)2, respectively.
You can see how it works
if you evaluate the expression for t=0 and t=1
as well as the derivative at these points.
|
|
|
|
cubicHalf :: C t y => t -> y -> y -> y | Source |
|
|
Interpolation based on piecewise defined functions
|
|
|
|
piecewiseConstant :: C t y => T t y | Source |
|
|
|
|
piecewiseCubic :: (C t, C t y) => T t y | Source |
|
|
Interpolation based on arbitrary functions
|
|
|
:: C t y | | => (Int, Int) | (left extent, right extent), e.g. (1,1) for linear hat
| -> t -> t | | -> T t y | | with this wrapper you can use the collection of interpolating functions from Donadio's DSP library
|
|
|
Helper functions
|
|
|
Test if a list has at least n elements
make sure that n is non-negative
|
|
Produced by Haddock version 2.3.0 |