-- | 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.Type

-- | 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