hsc3-0.19.1: Haskell SuperCollider
Safe HaskellSafe-Inferred
LanguageHaskell2010

Sound.SC3.Common.Math.Warp

Description

A warp is a mapping from the space [0,1] to a user defined space [l,r].

Synopsis

Documentation

type Warp_f t = t -> t -> t -> t Source #

A warp function is lhs -> rhs -> x -> y

warp_lin :: Fractional t => Warp_f t Source #

Linear real value map.

map (warp_lin 1 2) [0,1/2,1] == [1,3/2,2]
map (warp_lin (-1) 1) [0,1/2,1] == [-1,0,1]

warp_lin_inv :: Fractional t => Warp_f t Source #

Inverse of warp_lin

map (warp_lin_inv 1 2) [1,3/2,2] == [0,1/2,1]
map (warp_lin_inv (-1) 1) [-1,0,1] == [0,1/2,1]

warp_exp :: Floating a => Warp_f a Source #

The left and right must both be non zero and have the same sign.

map (warp_exp 1 2) [0,0.5,1] == [1,2 ** 0.5,2]
import Sound.SC3.Plot 
plot_p1_ln [map (warp_exp 1 2) [0,0.01 .. 1]]

warp_cos :: Floating t => Warp_f t Source #

Cosine warp

map (warp_cos 1 2) [0,0.25,0.5,0.75,1]
plot_p1_ln [map (warp_cos 1 2) [0,0.01 .. 1]]

warp_sin :: Floating t => Warp_f t Source #

Sine warp

map (warp_sin 1 2) [0,0.25,0.5,0.75,1]
plot_p1_ln [map (warp_sin 1 2) [0,0.01 .. 1]]

warp_amp :: Num a => Warp_f a Source #

Fader warp. Left and right values are ordinarily zero and one.

map (warp_amp 0 1) [0,0.5,1] == [0,0.25,1]
plot_p1_ln [map (warp_amp 0 2) [0,0.01 .. 1]]
plot_p1_ln [map (warp_amp_inv 0 1 . warp_amp 0 1) [0,0.01 .. 1]]

warp_db :: (Eq a, Floating a) => Warp_f a Source #

DB fader warp. Left and right values are ordinarily negative infinity and zero. An input of 0 gives -180.

map (round . warp_db (-180) 0) [0,0.5,1] == [-180,-12,0]
plot_p1_ln [map (warp_db (-60) 0) [0,0.01 .. 1]]
plot_p1_ln [map (warp_db_inv 0 60) [0 .. 60]]

warp_curve :: (Ord a, Floating a) => a -> Warp_f a Source #

A curve warp given by a real n.

warp_curve (-3) 1 2 0.25 == 1.5552791692202022
warp_curve (-3) 1 2 0.50 == 1.8175744761936437
plot_p1_ln [map (warp_curve (-3) 1 2) [0,0.01 .. 1]]
plot_p1_ln (map (\c -> map (warp_curve c 1 2) [0,0.01 .. 1]) [0,3,6,9])
plot_p1_ln [map (warp_curve_inv 7 20 20000 . warp_curve 7 20 20000) [0,0.01 .. 1]]

warp_named :: (Floating t, RealFrac t) => String -> Maybe (Warp_f t, Warp_f t) Source #

Select warp functions by name. Numerical names are interpreted as curve values for warpCurve.

let Just w = warp_named "lin"
let Just w = warp_named "-3"
let Just w = warp_named "6"
plot_p1_ln [map ((fst w) 1 2) [0,0.01 .. 1]]