module Csound.Catalog.Wave.Fm(
    fmBass1, fmBass2
) where

import Csound.Base

fmBass1 :: MonoAdsr -> (Sig, Sig) -> Sig
fmBass1 :: MonoAdsr -> (Sig, Sig) -> Sig
fmBass1 MonoAdsr
env (Sig
amp, Sig
cps) = Sig -> Sig -> Sig
bhp Sig
35 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ MonoAdsr
env Sig
0.01 Sig
3 Sig
0.01 Sig
0.05 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig -> D -> Sig
port Sig
amp D
0.01) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (\Sig
x -> MonoAdsr
fosc Sig
2 Sig
1 (Sig
1.5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* MonoAdsr
env Sig
0.01 Sig
0.5 Sig
0.5 Sig
0.05) Sig
x Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
0.4 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
osc (Sig
x Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.501)) (Sig
cps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (let env1 :: Sig
env1 = MonoAdsr
env Sig
1.2 Sig
0.1 Sig
0.85 Sig
5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* MonoAdsr
env Sig
1.2 Sig
0.75 Sig
0.25 Sig
0.05 in Sig
1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ (Sig
0.02 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
env1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
uosc (Sig
3 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
env1))))

fmBass2 :: MonoAdsr -> (Sig, Sig) -> Sig
fmBass2 :: MonoAdsr -> (Sig, Sig) -> Sig
fmBass2 MonoAdsr
adsrEnv (Sig
amp, Sig
cps) = Sig
env1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig -> D -> Sig
port Sig
amp D
0.01) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (\Sig
freq -> MonoAdsr
fosc Sig
1 Sig
1 (Sig
1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
3.4 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
env2) Sig
freq) ((Sig
cps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig
1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
0.001 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
osc (Sig
2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
env4) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
env4)))
    where
        env1 :: Sig
env1 = MonoAdsr
adsrEnv Sig
0.015 (Sig
5.2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
rel) Sig
0.001 Sig
0.5
        env2 :: Sig
env2 = MonoAdsr
adsrEnv Sig
0.015 Sig
1.4 Sig
0.5 Sig
1.2
        env4 :: Sig
env4 = MonoAdsr
adsrEnv Sig
3.2 Sig
0.1 Sig
0.85 Sig
5

        rel :: Sig
rel = Sig
3 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig
1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- (Sig
cps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- Sig
50) Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
150)