module Csound.Typed.Plugins.Diode(
diode, linDiode, noNormDiode
) where
import Csound.Dynamic
import Csound.Typed.Types
import Csound.Typed.GlobalState
import qualified Csound.Typed.GlobalState.Elements as E(diodePlugin)
linDiode :: Sig -> Sig -> Sig -> Sig
linDiode :: Sig -> Sig -> Sig -> Sig
linDiode Sig
cfq Sig
res Sig
ain = Sig -> Sig -> Sig -> Sig -> Sig -> Sig
diodeLadder Sig
ain Sig
cfq (Sig -> Sig
normReson Sig
res) Sig
0 Sig
1
diode :: Sig -> Sig -> Sig -> Sig -> Sig
diode :: Sig -> Sig -> Sig -> Sig -> Sig
diode Sig
ksaturation Sig
cfq Sig
res Sig
ain = Sig -> Sig -> Sig -> Sig -> Sig -> Sig
diodeLadder Sig
ain Sig
cfq (Sig -> Sig
normReson Sig
res) Sig
1 Sig
ksaturation
noNormDiode :: Sig -> Sig -> Sig -> Sig -> Sig
noNormDiode :: Sig -> Sig -> Sig -> Sig -> Sig
noNormDiode Sig
ksaturation Sig
cfq Sig
res Sig
ain = Sig -> Sig -> Sig -> Sig -> Sig -> Sig
diodeLadder Sig
ain Sig
cfq (Sig -> Sig
normReson Sig
res) Sig
2 Sig
ksaturation
normReson :: Sig -> Sig
normReson :: Sig -> Sig
normReson Sig
res = Sig
res Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
17
diodeLadder :: Sig -> Sig -> Sig -> Sig -> Sig -> Sig
diodeLadder :: Sig -> Sig -> Sig -> Sig -> Sig -> Sig
diodeLadder Sig
ain Sig
xcf Sig
xk Sig
knlp Sig
ksaturation = GE E -> Sig
forall a. Val a => GE E -> a
fromGE (GE E -> Sig) -> GE E -> Sig
forall a b. (a -> b) -> a -> b
$ do
UdoPlugin -> GE ()
addUdoPlugin UdoPlugin
E.diodePlugin
E -> E -> E -> E -> E -> E
f (E -> E -> E -> E -> E -> E) -> GE E -> GE (E -> E -> E -> E -> E)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Sig -> GE E
forall a. Val a => a -> GE E
toGE Sig
ain GE (E -> E -> E -> E -> E) -> GE E -> GE (E -> E -> E -> E)
forall a b. GE (a -> b) -> GE a -> GE b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Sig -> GE E
forall a. Val a => a -> GE E
toGE Sig
xcf GE (E -> E -> E -> E) -> GE E -> GE (E -> E -> E)
forall a b. GE (a -> b) -> GE a -> GE b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Sig -> GE E
forall a. Val a => a -> GE E
toGE Sig
xk GE (E -> E -> E) -> GE E -> GE (E -> E)
forall a b. GE (a -> b) -> GE a -> GE b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Sig -> GE E
forall a. Val a => a -> GE E
toGE Sig
knlp GE (E -> E) -> GE E -> GE E
forall a b. GE (a -> b) -> GE a -> GE b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Sig -> GE E
forall a. Val a => a -> GE E
toGE Sig
ksaturation
where f :: E -> E -> E -> E -> E -> E
f E
ain' E
xcf' E
xk' E
knlp' E
ksaturation' = Name -> Spec1 -> [E] -> E
opcs Name
"diode_ladder" [(Rate
Ar, [Rate
Ar, Rate
Xr, Rate
Xr, Rate
Kr, Rate
Kr])] [E
ain', E
xcf', E
xk', E
knlp', E
ksaturation']