packages feed

csound-catalog-0.7.4: src/Csound/Catalog/Wave/Flavio.hs

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

import Csound.Base

icero, icasi :: D

icero     =  0.000001
icasi     =  0.0001

-- epiano-s

-- irel1 = 16
amFlavio :: D -> Sig -> Sig
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

-- irel1 = 6, ifm = (2, 7),
fmFlavio :: D -> Sig -> Sig -> Sig
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, simpleFading :: D -> (D, D) -> SE Sig2

simpleSust   = genSimple 0.25  0.1
simpleFading = genSimple icasi icero

genSimple :: D -> D -> D -> (D, D) -> SE Sig2
genSimple isust1 isust2 irel (amp, dcps) = do
  aleft  <- fmap pureGen $ random 1 (11  * sig amp)
  aright <- fmap pureGen $ random 1 (10.5  * sig amp)
  return (aleft, aright)
  where
    cps = sig dcps
    pureGen ichr = aout
      where
        irel1 = irel * (0.5 + amp)
        idec    = 1
        irel2   = 0.75 * irel1

        -- kamp    = expsegr    [1, idec, 0.7, irel1, icasi, irel2, icero] irel2 icero
        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