module Csound.Catalog.Wave.Flavio(
amFlavio, fmFlavio, simpleSust, simpleFading
) where
import Data.List
import Control.Monad
import Csound.Base
icero = 0.000001
icasi = 0.0001
amFlavio irel1 cps = aout
where
irel1 = 16
iamf = 1
irel2 = irel1 * 0.7
kamp = expsegr [icero, 0.05, 1, 1, 0.7, irel1, icasi, irel2, icero] irel2 icero
aam = kamp * osc (iamf * cps)
aout = aam * osc cps
fmFlavio irel1 ifm cps = aout
where
irel2 = irel1 * 0.5
idec = 1
iatt = 0.01
(iidx1, iidx2, iidx3, iidx4, iidx5) = (4, 4, 4, 4, 3)
kamp = expsegr [icero, iatt, 1, idec, 0.7, irel1, icasi, irel2, icero] irel2 icero
kidx = linsegr [iidx1, iatt, iidx2, idec, iidx3, irel1, iidx4, irel2, iidx5] irel2 iidx5
afrq = kidx * osc (ifm * cps)
aout = kamp * osc (cps * (1 + afrq))
simpleSust = genSimple 0.25 0.1
simpleFading = genSimple icasi icero
genSimple isust1 isust2 irel (amp, dcps) = do
aleft <- fmap pure $ random 1 (11 * sig amp)
aright <- fmap pure $ random 1 (10.5 * sig amp)
return (aleft, aright)
where
cps = sig dcps
pure ichr = aout
where
irel1 = irel * (0.5 + amp)
iatt = 0.01
idec = 1
irel2 = 0.75 * irel1
kamp = expsegr [1, idec, 0.7, irel1, isust1, irel2, isust2] irel2 icero
kcf = 2 * sig amp * linsegr [3000, irel1 + 1, 500] irel2 500
a3 = kamp * (osc (cps ichr) + osc (cps ichr))* 0.5
aout = blp kcf a3