module Csound.Catalog.Wave.Deserted(
simpleMarimba, marimbaWave, phasingSynth, noiz, wind
) where
import Csound.Base
simpleMarimba :: D -> Sig -> Sig
simpleMarimba xdur = marimbaWave xdur kenv
where kenv = expseg [0.0001, 0.03, 1, xdur 0.03, 0.001]
* linseg [1, 0.03, 1, xdur 0.03, 3]
marimbaWave :: D -> Sig -> Sig -> Sig
marimbaWave xdur amp cps = a6
where
k10 = linseg [2.25, 0.03, 3, xdur 0.03, 2]
a1 = gbuzz amp cps k10 0 35 (sines3 [(1, 1, 90)])
a2 = reson' a1 500 50
a3 = reson' a2 150 100
a4 = reson' a3 3500 150
a5 = reson' a4 3500 150
a6 = balance a5 a1
reson' a b c = reson a b c `withD` 1
wind :: D -> (D, D) -> (D, D) -> D -> SE Sig
wind xdur (bandRise, bandDec) (freqRise, freqDec) winds =
fmap fromRnd $ rand 1
where
valu1 = 100
valu2 = 50
winde = 1 winds
ramp a b = linseg [a, xdur, b]
fromRnd a = aout
where
a2 = butbp a (ramp freqRise freqDec) (ramp bandRise bandDec)
a3 = butbp a2 (ramp (freqRise valu1) (freqDec + valu2))
(ramp (bandRise + valu1) (bandDec valu2))
aout = (a2 + a3) * linseg [0, xdur * winds, 1, xdur * winde, 0]
noiz :: Sig -> SE Sig
noiz cps = fmap a2 k2
where
k1 = linseg [1, 0.05, 100, 0.2, 100, 2, 1, idur, 1]
k2 = fmap ( `withD` 1) $ rand 500
buzz' kamp kcps = buzz kamp (sig kcps * cps) k1 sine
a1 = mean $ zipWith buzz' [0.3, 1, 1] [1, 0.5, 0.501]
a2 k = a1 * osc k
phasingSynth :: Sig -> Sig -> Sig
phasingSynth amp cps = aout
where
osc' ftab k ph = oscBy ftab (cps * k) `withD` ph
osc1 = osc' sine
osc2 = osc' $ sines [1, 0, 0.9, 0, 0.8, 0, 0.7, 0, 0.6, 0, 0.5, 0, 0.4, 0, 0.3, 0, 0.2, 0, 0.1]
asum = amp * mean
[ osc1 1 0
, osc2 1.008 0.02
, osc1 0.992 0.04
, osc2 2 0.06
, osc2 1 0.08
, osc1 1 0.01 ]
kosc1 = 0.5 * once sine
kosc2 = 0.5 * once sine `withD` 0.4
kosc3 = 1.0 * once sine `withD` 0.8
afilt = sum
[ butbp asum kosc1 1000
, butbp asum kosc2 300
, butbp asum kosc3 20 ]
aout = mean [afilt, asum]