vivid-0.3.0.0: Vivid/UGens/Filters/BEQSuite.hs
-- | These UGens only run at audio rate ('AR')
--
-- They also can cause CPU spikes when their parameters are changed!
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE NoIncoherentInstances #-}
{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE NoUndecidableInstances #-}
module Vivid.UGens.Filters.BEQSuite (
bAllpass
, bBandPass
, bBandStop
, bHiPass
--- , bHiPass4
, bHiShelf
, bLowPass
, bLowPass4
, bLowShelf
, bPeakEQ
) where
import Vivid.SC.SynthDef.Types (CalculationRate(..))
import Vivid.SynthDef
import Vivid.SynthDef.FromUA
import Vivid.UGens.Args
import Vivid.UGens.Algebraic
import Vivid.UGens.Filters.Linear (sos)
import Vivid.UGens.Info (sampleRate, sampleDur)
-- import qualified Data.List as L
-- import Data.Maybe
import Data.Proxy
bAllpass :: (Args '["in"] '["freq", "rq"] a) => a -> SDBody a Signal
bAllpass = makeUGen
"BAllPass" AR
(Vs::Vs '["in", "freq", "rq"])
(freq_ (1200::Float), rq_ (1::Float))
-- | Band-pass filter
bBandPass :: (Args '["in"] '["freq", "bw"] a) => a -> SDBody a Signal
bBandPass = makeUGen
"BBandPass" AR
(Vs::Vs '["in", "freq", "bw"])
(freq_ (1200::Float), bw_ (1::Float))
bBandStop :: (Args '["in"] '["freq", "bw"] a) => a -> SDBody a Signal
bBandStop = makeUGen
"BBandStop" AR
(Vs::Vs '["in", "freq", "bw"])
(freq_ (1200::Float), bw_ (1::Float))
-- | This is only in AR
bHiPass :: (Args '["in"] '["freq", "rq"] a) => a -> SDBody a Signal
bHiPass = makeUGen
"BHiPass" AR
(Vs::Vs '["in", "freq", "rq"])
(freq_ (1200::Float), rq_ (1::Float))
-- bHiPass4 :: (Args '["in"] '["freq", "rq"] a) => a -> SDBody a Signal
--- bHiPass4 ::
--- bHiPass4 =
bHiShelf :: (Args '["in"] '["freq", "rs", "db"] a) => a -> SDBody a Signal
bHiShelf = makeUGen
"BHiShelf" AR
(Vs::Vs '["in", "freq", "rs", "db"])
(freq_ (1200::Float), rs_ (1::Float), db_ (0::Float))
bLowPass :: (Args '["in"] '["freq", "rq"] a) => a -> SDBody a Signal
bLowPass = makeUGen
"BLowPass" AR
(Vs::Vs '["in", "freq", "rq"])
(freq_ (1200::Float), rq_ (1::Float))
-- Checked this w/ 2 different inputs:
bLowPass4 :: (Args '["in"] '["freq","rq"] a) => a -> SDBody a Signal
bLowPass4 as = do
freq <- uaArgValWDefault (1200::Float) as (Proxy::Proxy "freq")
rq <- uaArgValWDefault (1::Float) as (Proxy::Proxy "rq")
in' <- as `uaArgVal` (Proxy::Proxy "in")
-- We don't actually use 'sRate' -- why?:
_sRate <- sampleRate
sDur <- sampleDur
four <- (Constant $ 2*pi)~*sDur~*freq
five <- uOp Cos four
six <- {- 1 ~- five -} (Constant 1) ~- five
seven <- six ~* (Constant 0.5)
eight <- five ~* (Constant 2)
nine <- uOp Sin four
ten <- nine ~* (Constant 0.5)
eleven <- ten ~* uOp Sqrt rq
twelve <- Constant 1 ~+ eleven
thirteen <- uOp Recip twelve
fourteen <- seven ~* thirteen
fifteen <- six ~* thirteen
sixteen <- eight ~* thirteen
seventeen <- uOp Neg thirteen
eighteen <- Constant 1 ~- eleven
nineteen <- eighteen ~* seventeen
twenty <- sos (in_ in', a0_ fourteen, a1_ fifteen, a2_ fourteen, b1_ sixteen, b2_ nineteen)
twentyOne <- sos (in_ twenty, a0_ fourteen, a1_ fifteen, a2_ fourteen, b1_ sixteen, b2_ nineteen)
return twentyOne
bLowShelf :: (Args '["in"] '["freq", "rs", "db"] a) => a -> SDBody a Signal
bLowShelf = makeUGen
"BLowShelf" AR
(Vs::Vs '["in", "freq", "rs", "db"])
(freq_ (1200::Float), rs_ (1::Float), db_ (0::Float))
bPeakEQ :: (Args '["in"] '["freq", "rq", "db"] a) => a -> SDBody a Signal
bPeakEQ = makeUGen
"BPeakEQ" AR
(Vs::Vs '["in", "freq", "rq", "db"])
(freq_ (1200::Float), rq_ (1::Float), db_ (0::Float))