module Csound.Catalog.Wave.Flavio(
  amFlavio, fmFlavio, simpleSust, simpleFading
) where

import Csound.Base

icero, icasi :: D

icero :: D
icero     =  D
0.000001
icasi :: D
icasi     =  D
0.0001

-- epiano-s

-- irel1 = 16
amFlavio :: D -> Sig -> Sig
amFlavio :: D -> Sig -> Sig
amFlavio D
irel1' Sig
cps = Sig
aout
  where
    irel1 :: D
irel1     = D
16
    iamf :: Sig
iamf      = Sig
1
    irel2 :: D
irel2     = D
irel1 D -> D -> D
forall a. Num a => a -> a -> a
* D
0.7
    kamp :: Sig
kamp      = [D] -> D -> D -> Sig
expsegr [D
icero, D
0.05, D
1, D
1, D
0.7, D
irel1', D
icasi, D
irel2, D
icero]  D
irel2 D
icero
    aam :: Sig
aam       = Sig
kamp Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
osc (Sig
iamf Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
cps)
    aout :: Sig
aout      = Sig
aam  Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
osc Sig
cps

-- irel1 = 6, ifm = (2, 7),
fmFlavio :: D -> Sig -> Sig -> Sig
fmFlavio :: D -> Sig -> Sig -> Sig
fmFlavio D
irel1 Sig
ifm Sig
cps = Sig
aout
  where
    irel2 :: D
irel2   = D
irel1 D -> D -> D
forall a. Num a => a -> a -> a
* D
0.5
    idec :: D
idec    = D
1
    iatt :: D
iatt    = D
0.01

    (D
iidx1, D
iidx2, D
iidx3, D
iidx4, D
iidx5) = (D
4,      D
4,      D
4,     D
4,      D
3)

    kamp :: Sig
kamp    = [D] -> D -> D -> Sig
expsegr    [D
icero, D
iatt, D
1, D
idec, D
0.7, D
irel1, D
icasi, D
irel2, D
icero] D
irel2 D
icero
    kidx :: Sig
kidx    = [D] -> D -> D -> Sig
linsegr    [D
iidx1, D
iatt, D
iidx2, D
idec, D
iidx3, D
irel1, D
iidx4, D
irel2, D
iidx5] D
irel2 D
iidx5

    afrq :: Sig
afrq  = Sig
kidx Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
osc (Sig
ifm Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
cps)
    aout :: Sig
aout    = Sig
kamp Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
osc (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
afrq))

simpleSust, simpleFading :: D -> (D, D) -> SE Sig2

simpleSust :: D -> (D, D) -> SE Sig2
simpleSust   = D -> D -> D -> (D, D) -> SE Sig2
genSimple D
0.25  D
0.1
simpleFading :: D -> (D, D) -> SE Sig2
simpleFading = D -> D -> D -> (D, D) -> SE Sig2
genSimple D
icasi D
icero

genSimple :: D -> D -> D -> (D, D) -> SE Sig2
genSimple :: D -> D -> D -> (D, D) -> SE Sig2
genSimple D
isust1 D
isust2 D
irel (D
amp, D
dcps) = do
  Sig
aleft  <- (Sig -> Sig) -> SE Sig -> SE Sig
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> Sig
pureGen (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> SE Sig
forall a. SigOrD a => a -> a -> SE a
random Sig
1 (Sig
11  Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
sig D
amp)
  Sig
aright <- (Sig -> Sig) -> SE Sig -> SE Sig
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> Sig
pureGen (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> SE Sig
forall a. SigOrD a => a -> a -> SE a
random Sig
1 (Sig
10.5  Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
sig D
amp)
  Sig2 -> SE Sig2
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig
aleft, Sig
aright)
  where
    cps :: Sig
cps = D -> Sig
sig D
dcps
    pureGen :: Sig -> Sig
pureGen Sig
ichr = Sig
aout
      where
        irel1 :: D
irel1 = D
irel D -> D -> D
forall a. Num a => a -> a -> a
* (D
0.5 D -> D -> D
forall a. Num a => a -> a -> a
+ D
amp)
        idec :: D
idec    = D
1
        irel2 :: D
irel2   = D
0.75 D -> D -> D
forall a. Num a => a -> a -> a
* D
irel1

        -- kamp    = expsegr    [1, idec, 0.7, irel1, icasi, irel2, icero] irel2 icero
        kamp :: Sig
kamp    = [D] -> D -> D -> Sig
expsegr    [D
1, D
idec, D
0.7, D
irel1, D
isust1, D
irel2, D
isust2] D
irel2 D
icero
        kcf :: Sig
kcf     = Sig
2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
sig D
amp Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* [D] -> D -> D -> Sig
linsegr    [D
3000, D
irel1 D -> D -> D
forall a. Num a => a -> a -> a
+ D
1, D
500] D
irel2 D
500
        a3 :: Sig
a3      = Sig
kamp Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig -> Sig
osc (Sig
cps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- Sig
ichr) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig -> Sig
osc (Sig
cps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- Sig
ichr))Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.5

        aout :: Sig
aout = Sig -> Sig -> Sig
blp Sig
kcf Sig
a3