-- | Wavelet unit generators (Nick Collins).
module Sound.Sc3.Ugen.Bindings.Hw.External.Wavelets where

import Sound.Sc3.Common.Rate
import Sound.Sc3.Ugen.Bindings.Hw.Construct
import Sound.Sc3.Ugen.Ugen

-- | Forward wavelet transform.
dwt :: Ugen -> Ugen -> Ugen -> Ugen -> Ugen -> Ugen -> Ugen -> Ugen
dwt :: Ugen -> Ugen -> Ugen -> Ugen -> Ugen -> Ugen -> Ugen -> Ugen
dwt Ugen
buf Ugen
i Ugen
h Ugen
wnt Ugen
a Ugen
wns Ugen
wlt = Rate -> String -> [Ugen] -> Int -> Ugen
mkOsc Rate
kr String
"DWT" [Ugen
buf,Ugen
i,Ugen
h,Ugen
wnt,Ugen
a,Ugen
wns,Ugen
wlt] Int
1

-- | Inverse of 'dwt'.
idwt :: Ugen -> Ugen -> Ugen -> Ugen -> Ugen
idwt :: Ugen -> Ugen -> Ugen -> Ugen -> Ugen
idwt Ugen
buf Ugen
wnt Ugen
wns Ugen
wlt = Rate -> String -> [Ugen] -> Int -> Ugen
mkOsc Rate
ar String
"IDWT" [Ugen
buf,Ugen
wnt,Ugen
wns,Ugen
wlt] Int
1

-- | Pass wavelets above a threshold, ie. 'pv_MagAbove'.
wt_MagAbove :: Ugen -> Ugen -> Ugen
wt_MagAbove :: Ugen -> Ugen -> Ugen
wt_MagAbove Ugen
buf Ugen
thr = Rate -> String -> [Ugen] -> Int -> Ugen
mkOsc Rate
kr String
"WT_MagAbove" [Ugen
buf,Ugen
thr] Int
1

-- | Pass wavelets with /scale/ above threshold.
wt_FilterScale :: Ugen -> Ugen -> Ugen
wt_FilterScale :: Ugen -> Ugen -> Ugen
wt_FilterScale Ugen
buf Ugen
wp = Rate -> String -> [Ugen] -> Int -> Ugen
mkOsc Rate
kr String
"WT_FilterScale" [Ugen
buf,Ugen
wp] Int
1

-- | Pass wavelets with /time/ above threshold.
wt_TimeWipe :: Ugen -> Ugen -> Ugen
wt_TimeWipe :: Ugen -> Ugen -> Ugen
wt_TimeWipe Ugen
buf Ugen
wp = Rate -> String -> [Ugen] -> Int -> Ugen
mkOsc Rate
kr String
"WT_TimeWipe" [Ugen
buf,Ugen
wp] Int
1

-- | Product in /W/ domain, ie. 'pv_Mul'.
wt_Mul :: Ugen -> Ugen -> Ugen
wt_Mul :: Ugen -> Ugen -> Ugen
wt_Mul Ugen
ba Ugen
bb = Rate -> String -> [Ugen] -> Int -> Ugen
mkOsc Rate
kr String
"WT_Mul" [Ugen
ba,Ugen
bb] Int
1