module Csound.Catalog.Wave.Misc (
    okComputer, polySynthFx, polySynth,
    dreamPad, underwaterPad, lightIsTooBrightPad, whaleSongPad,
    dreamPadBy, lightIsTooBrightPadBy, whaleSongPadBy,
    deepBass,

    impulseMarimba1, impulseMarimba2,

    celloWave
) where

import Prelude hiding (filter)
import Csound.Base

-- | Tech sound. Random sinusoids palyed at the very fast rate.
--
-- > okComputer rate
--
-- * @rate@ -- rate of new notes ~ (5, 20)
okComputer :: Sig -> SE Sig
okComputer :: Sig -> SE Sig
okComputer Sig
cps = (Sig -> Sig) -> SE Sig -> SE Sig
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> Sig
go (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> SE Sig
noise Sig
11000 Sig
0.99
    where
        go :: Sig -> Sig
go Sig
anoise = Sig -> Sig
osc (Sig -> Sig -> Sig
samphold Sig
anoise Sig
kgate)
        kgate :: Sig
kgate = Sig -> Sig
kr (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Tab -> Sig
oscil Sig
1 Sig
cps ([Double] -> Tab
elins [Double
1, Double
0, Double
0])

polySynth :: Sig -> SE Sig
polySynth :: Sig -> SE Sig
polySynth Sig
x = Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> Sig
fades D
0.01 D
0.15) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ (Sig -> SE Sig) -> Sig -> SE Sig
uni Sig -> SE Sig
rndSaw Sig
x SE Sig -> SE Sig -> SE Sig
forall a. Num a => a -> a -> a
+ (Sig -> SE Sig) -> Sig -> SE Sig
uni Sig -> SE Sig
rndSaw (Sig
x Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
forall a. SigOrD a => a -> a
cent Sig
14) SE Sig -> SE Sig -> SE Sig
forall a. Num a => a -> a -> a
+ (Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.2 (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ (Sig -> Sig) -> SE Sig -> AtOut Sig Sig (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (Sig -> Sig -> Sig -> Sig
lp Sig
400 Sig
0.1) SE Sig
white)

polySynthFx :: ResonFilter -> SE Sig -> SE Sig2
polySynthFx :: (Sig -> Sig -> Sig -> Sig) -> SE Sig -> SE Sig2
polySynthFx Sig -> Sig -> Sig -> Sig
filter = Sig -> (Sig2 -> Sig2) -> SE Sig2 -> AtOut Sig2 Sig2 (SE Sig2)
forall a b c. MixAt a b c => Sig -> (a -> b) -> c -> AtOut a b c
mixAt Sig
0.25 Sig2 -> Sig2
largeHall2 (SE Sig2 -> SE Sig2) -> (SE Sig -> SE Sig2) -> SE Sig -> SE Sig2
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> (Sig -> Sig) -> SE Sig2 -> AtOut Sig Sig (SE Sig2)
forall a b c. MixAt a b c => Sig -> (a -> b) -> c -> AtOut a b c
mixAt Sig
0.25 (D -> Sig -> Sig -> Sig
echo D
0.25 Sig
0.65) (SE Sig2 -> SE Sig2) -> (SE Sig -> SE Sig2) -> SE Sig -> SE Sig2
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> SE Sig2 -> AtOut Sig (SE Sig) (SE Sig2)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (Sig -> Sig -> Sig -> Sig -> SE Sig
chorus Sig
0.07 Sig
1.25 Sig
0.25) (SE Sig2 -> SE Sig2) -> (SE Sig -> SE Sig2) -> SE Sig -> SE Sig2
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig2) -> SE Sig -> AtOut Sig Sig2 (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (Sig -> Sig2
fromMono (Sig -> Sig2) -> (Sig -> Sig) -> Sig -> Sig2
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig -> Sig
filter Sig
5500 Sig
0.12 (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> (Sig -> Sig -> Sig -> Sig) -> Sig -> Sig -> Sig -> Sig
filt Int
2 Sig -> Sig -> Sig -> Sig
br Sig
18000 Sig
0.3)

uni :: (Sig -> SE Sig) -> Sig -> SE Sig
uni :: (Sig -> SE Sig) -> Sig -> SE Sig
uni = Int -> Sig -> (Sig -> SE Sig) -> Sig -> SE Sig
forall a. Fractional a => Int -> Sig -> (Sig -> a) -> Sig -> a
multiHz Int
2 (Sig -> Sig
forall a. SigOrD a => a -> a
cent Sig
50)

lightIsTooBrightPad :: ResonFilter -> Sig -> Sig -> SE Sig
lightIsTooBrightPad :: (Sig -> Sig -> Sig -> Sig) -> Sig -> Sig -> SE Sig
lightIsTooBrightPad Sig -> Sig -> Sig -> Sig
filter = (Sig -> Sig -> Sig -> Sig)
-> (Sig -> SE Sig) -> Sig -> Sig -> SE Sig
lightIsTooBrightPadBy Sig -> Sig -> Sig -> Sig
filter Sig -> SE Sig
rndSaw

lightIsTooBrightPadBy :: ResonFilter -> Wave -> Sig -> Sig -> SE Sig
lightIsTooBrightPadBy :: (Sig -> Sig -> Sig -> Sig)
-> (Sig -> SE Sig) -> Sig -> Sig -> SE Sig
lightIsTooBrightPadBy Sig -> Sig -> Sig -> Sig
filter Sig -> SE Sig
wave Sig
brightness = (Sig -> Sig -> Sig -> Sig)
-> ((Sig -> Sig) -> (Sig -> Sig) -> Sig -> SE Sig)
-> Sig
-> Sig
-> SE Sig
forall p.
(Sig -> Sig -> Sig -> Sig)
-> ((Sig -> Sig) -> (Sig -> Sig) -> p -> SE Sig)
-> Sig
-> p
-> SE Sig
genDreamPadInstr Sig -> Sig -> Sig -> Sig
filter (Sig -> Sig) -> (Sig -> Sig) -> Sig -> SE Sig
forall a. SigOrD a => (a -> Sig) -> (a -> Sig) -> a -> SE Sig
mkOsc Sig
brightness
    where mkOsc :: (a -> Sig) -> (a -> Sig) -> a -> SE Sig
mkOsc a -> Sig
vibLfo1 a -> Sig
vibLfo2 a
x = (Sig -> SE Sig) -> Sig -> SE Sig
uni Sig -> SE Sig
wave (a -> Sig
vibLfo1 a
x) SE Sig -> SE Sig -> SE Sig
forall a. Num a => a -> a -> a
+ (Sig -> SE Sig) -> Sig -> SE Sig
uni Sig -> SE Sig
wave (a -> Sig
vibLfo2 (a -> Sig) -> a -> Sig
forall a b. (a -> b) -> a -> b
$ a
x a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. SigOrD a => a -> a
cent a
14) SE Sig -> SE Sig -> SE Sig
forall a. Num a => a -> a -> a
+ Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.3 (Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig -> Sig
uosc Sig
0.25) (Sig -> SE Sig
rndTri (a -> Sig
vibLfo2 (a -> Sig) -> a -> Sig
forall a b. (a -> b) -> a -> b
$ a
x a -> a -> a
forall a. Num a => a -> a -> a
* a
7 a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. SigOrD a => a -> a
cent a
4)) SE Sig -> SE Sig -> SE Sig
forall a. Num a => a -> a -> a
+ Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul ([Sig] -> Sig -> Sig
isawSeq [Sig
1, Sig
0.5, Sig
0.25] Sig
6 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
uosc Sig
0.17) (Sig -> SE Sig
rndTri (a -> Sig
vibLfo2 (a -> Sig) -> a -> Sig
forall a b. (a -> b) -> a -> b
$ a
x a -> a -> a
forall a. Num a => a -> a -> a
* a
13)) SE Sig -> SE Sig -> SE Sig
forall a. Num a => a -> a -> a
+ Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul ([Sig] -> Sig -> Sig
sqrSeq [Sig
1, Sig
0.5, Sig
0.25, Sig
0.1] Sig
8 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
uosc Sig
0.28) (Sig -> SE Sig
rndOsc (a -> Sig
vibLfo2 (a -> Sig) -> a -> Sig
forall a b. (a -> b) -> a -> b
$ a
x a -> a -> a
forall a. Num a => a -> a -> a
* a
9 a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. SigOrD a => a -> a
cent a
3)))

whaleSongPad :: ResonFilter -> Sig -> Sig -> SE Sig
whaleSongPad :: (Sig -> Sig -> Sig -> Sig) -> Sig -> Sig -> SE Sig
whaleSongPad Sig -> Sig -> Sig -> Sig
filter = (Sig -> Sig -> Sig -> Sig)
-> (Sig -> SE Sig) -> Sig -> Sig -> SE Sig
whaleSongPadBy Sig -> Sig -> Sig -> Sig
filter Sig -> SE Sig
rndTri

whaleSongPadBy :: ResonFilter -> Wave -> Sig -> Sig -> SE Sig
whaleSongPadBy :: (Sig -> Sig -> Sig -> Sig)
-> (Sig -> SE Sig) -> Sig -> Sig -> SE Sig
whaleSongPadBy Sig -> Sig -> Sig -> Sig
filter Sig -> SE Sig
wave Sig
brightness = (Sig -> Sig -> Sig -> Sig)
-> ((Sig -> Sig) -> (Sig -> Sig) -> Sig -> SE Sig)
-> Sig
-> Sig
-> SE Sig
forall p.
(Sig -> Sig -> Sig -> Sig)
-> ((Sig -> Sig) -> (Sig -> Sig) -> p -> SE Sig)
-> Sig
-> p
-> SE Sig
genDreamPadInstr Sig -> Sig -> Sig -> Sig
filter (Sig -> Sig) -> (Sig -> Sig) -> Sig -> SE Sig
forall a. SigOrD a => (a -> Sig) -> (a -> Sig) -> a -> SE Sig
mkOsc Sig
brightness
    where mkOsc :: (a -> Sig) -> (a -> Sig) -> a -> SE Sig
mkOsc a -> Sig
vibLfo1 a -> Sig
vibLfo2 a
x = (Sig -> SE Sig) -> Sig -> SE Sig
uni Sig -> SE Sig
wave (a -> Sig
vibLfo1 a
x) SE Sig -> SE Sig -> SE Sig
forall a. Num a => a -> a -> a
+ (Sig -> SE Sig) -> Sig -> SE Sig
uni Sig -> SE Sig
wave (a -> Sig
vibLfo2 (a -> Sig) -> a -> Sig
forall a b. (a -> b) -> a -> b
$ a
x a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. SigOrD a => a -> a
cent a
14) SE Sig -> SE Sig -> SE Sig
forall a. Num a => a -> a -> a
+ (Sig -> SE Sig) -> Sig -> SE Sig
uni Sig -> SE Sig
wave (a -> Sig
vibLfo2 (a -> Sig) -> a -> Sig
forall a b. (a -> b) -> a -> b
$ a
3 a -> a -> a
forall a. Num a => a -> a -> a
* a
x a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. SigOrD a => a -> a
cent a
14) SE Sig -> SE Sig -> SE Sig
forall a. Num a => a -> a -> a
+ Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.15 ((Sig -> SE Sig) -> Sig -> SE Sig
uni Sig -> SE Sig
wave (a -> Sig
vibLfo2 (a -> Sig) -> a -> Sig
forall a b. (a -> b) -> a -> b
$ a
7 a -> a -> a
forall a. Num a => a -> a -> a
* a
x a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. SigOrD a => a -> a
cent a
14)) SE Sig -> SE Sig -> SE Sig
forall a. Num a => a -> a -> a
+ Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.15 ((Sig -> SE Sig) -> Sig -> SE Sig
uni Sig -> SE Sig
wave ((a -> Sig
vibLfo2 (a -> Sig) -> a -> Sig
forall a b. (a -> b) -> a -> b
$ a
11 a -> a -> a
forall a. Num a => a -> a -> a
* a
x a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. SigOrD a => a -> a
cent a
14) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
400 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
uosc Sig
0.2))

underwaterPad :: ResonFilter -> Sig -> Sig -> SE Sig
underwaterPad :: (Sig -> Sig -> Sig -> Sig) -> Sig -> Sig -> SE Sig
underwaterPad Sig -> Sig -> Sig -> Sig
filter = (Sig -> Sig -> Sig -> Sig)
-> (Sig -> SE Sig) -> Sig -> Sig -> SE Sig
dreamPadBy Sig -> Sig -> Sig -> Sig
filter Sig -> SE Sig
rndTri

dreamPad :: ResonFilter -> Sig -> Sig -> SE Sig
dreamPad :: (Sig -> Sig -> Sig -> Sig) -> Sig -> Sig -> SE Sig
dreamPad Sig -> Sig -> Sig -> Sig
filter = (Sig -> Sig -> Sig -> Sig)
-> (Sig -> SE Sig) -> Sig -> Sig -> SE Sig
dreamPadBy Sig -> Sig -> Sig -> Sig
filter Sig -> SE Sig
rndSaw

dreamPadBy :: ResonFilter -> Wave -> Sig -> Sig -> SE Sig
dreamPadBy :: (Sig -> Sig -> Sig -> Sig)
-> (Sig -> SE Sig) -> Sig -> Sig -> SE Sig
dreamPadBy Sig -> Sig -> Sig -> Sig
filter Sig -> SE Sig
wave Sig
brightness = (Sig -> Sig -> Sig -> Sig)
-> ((Sig -> Sig) -> (Sig -> Sig) -> Sig -> SE Sig)
-> Sig
-> Sig
-> SE Sig
forall p.
(Sig -> Sig -> Sig -> Sig)
-> ((Sig -> Sig) -> (Sig -> Sig) -> p -> SE Sig)
-> Sig
-> p
-> SE Sig
genDreamPadInstr Sig -> Sig -> Sig -> Sig
filter (Sig -> Sig) -> (Sig -> Sig) -> Sig -> SE Sig
forall a. SigOrD a => (a -> Sig) -> (a -> Sig) -> a -> SE Sig
mkOsc Sig
brightness
    where mkOsc :: (t -> Sig) -> (t -> Sig) -> t -> SE Sig
mkOsc t -> Sig
vibLfo1 t -> Sig
vibLfo2 t
x = (Sig -> SE Sig) -> Sig -> SE Sig
uni Sig -> SE Sig
wave (t -> Sig
vibLfo1 t
x) SE Sig -> SE Sig -> SE Sig
forall a. Num a => a -> a -> a
+ (Sig -> SE Sig) -> Sig -> SE Sig
uni Sig -> SE Sig
wave (t -> Sig
vibLfo2 (t -> Sig) -> t -> Sig
forall a b. (a -> b) -> a -> b
$ t
x t -> t -> t
forall a. Num a => a -> a -> a
* t -> t
forall a. SigOrD a => a -> a
cent t
14)

genDreamPadInstr :: (Sig -> Sig -> Sig -> Sig)
  ->  ((Sig -> Sig) -> (Sig -> Sig) -> p -> SE Sig)
  -> Sig -> p -> SE Sig
genDreamPadInstr :: (Sig -> Sig -> Sig -> Sig)
-> ((Sig -> Sig) -> (Sig -> Sig) -> p -> SE Sig)
-> Sig
-> p
-> SE Sig
genDreamPadInstr Sig -> Sig -> Sig -> Sig
filter (Sig -> Sig) -> (Sig -> Sig) -> p -> SE Sig
mkOsc Sig
brightness p
frq = do
    Sig
a1 <- SE Sig
oscs
    Sig
a2 <- SE Sig
nois
    Sig -> SE Sig
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig -> SE Sig) -> Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> Sig
fades D
0.85 D
0.95) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig
fx1 (Sig
a2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
a1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig -> Sig
fx2 Sig
a1
    where
        fx1 :: Sig -> Sig
fx1 = Int -> (Sig -> Sig -> Sig -> Sig) -> Sig -> Sig -> Sig -> Sig
filt Int
2 Sig -> Sig -> Sig -> Sig
filter (Sig -> Sig
filtLfo1 (Sig
700 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
brightness Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
2500)) Sig
0.26
        fx2 :: Sig -> Sig
fx2 = Sig -> Sig -> Sig -> Sig
filter (Sig -> Sig
filtLfo2 (Sig
1200 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
brightness Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
2500)) Sig
0.32

        -- saw
        oscs :: SE Sig
oscs = (Sig -> Sig) -> (Sig -> Sig) -> p -> SE Sig
mkOsc Sig -> Sig
vibLfo1 Sig -> Sig
vibLfo2 p
frq

        -- underwater
        -- oscs = uni rndTri (vibLfo1 x) + uni rndTri (vibLfo2 $ x * cent 14)  -- + uni rndTri (vibLfo2 $ 3 * x * cent 14)

        -- wales howling
        -- oscs = uni rndTri (vibLfo1 x) + uni rndTri (vibLfo2 $ x * cent 14) + uni rndTri (vibLfo2 $ 3 * x * cent 14) + mul 0.15 (uni rndTri (vibLfo2 $ 7 * x * cent 14)) + mul 0.15 (uni rndTri ((vibLfo2 $ 11 * x * cent 14) + 400 * uosc 0.2))
        -- uni = multiHz 2 (cent 50)
        nois :: SE Sig
nois = Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.35 (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ (Sig -> Sig) -> SE Sig -> AtOut Sig Sig (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (Sig -> Sig -> Sig -> Sig
lp Sig
2400 Sig
0.1) SE Sig
white

        lfo1 :: Sig -> Sig -> Sig
lfo1 Sig
y Sig
x = Sig
x Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig
1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
y Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
osc (Sig
0.35 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
0.05  Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
osc Sig
0.1))
        lfo2 :: Sig -> Sig -> Sig
lfo2 Sig
y Sig
x = Sig
x Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig
1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
y Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
osc (Sig
0.22 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
0.043 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
osc Sig
0.14))

        filtLfo1 :: Sig -> Sig
filtLfo1 = Sig -> Sig -> Sig
lfo1 Sig
0.18
        filtLfo2 :: Sig -> Sig
filtLfo2 = Sig -> Sig -> Sig
lfo2 Sig
0.13

        vibLfo1 :: Sig -> Sig
vibLfo1 = Sig -> Sig -> Sig
lfo1 Sig
0.005
        vibLfo2 :: Sig -> Sig
vibLfo2 = Sig -> Sig -> Sig
lfo2 Sig
0.007

deepBass :: Sig -> Sig
deepBass :: Sig -> Sig
deepBass Sig
q = Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.5 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ (Sig -> Sig) -> Sig -> AtOut Sig Sig Sig
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (Sig -> Sig -> Sig
hp1 Sig
45) (Sig -> AtOut Sig Sig Sig) -> Sig -> AtOut Sig Sig Sig
forall a b. (a -> b) -> a -> b
$ (Sig -> Sig) -> Sig -> AtOut Sig Sig Sig
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (\Sig
x -> Sig -> Sig -> D -> D -> D -> D -> Sig
dam Sig
x Sig
0.45 D
2 D
2 D
0.01 D
0.01) (Sig -> AtOut Sig Sig Sig) -> Sig -> AtOut Sig Sig Sig
forall a b. (a -> b) -> a -> b
$  Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> D -> D -> Sig
xeg D
0.005 D
0.6 D
1 D
0.05) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [Sig] -> Sig
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum [(Int -> (Sig -> Sig -> Sig -> Sig) -> Sig -> Sig -> Sig -> Sig
filt Int
2 Sig -> Sig -> Sig -> Sig
lp Sig
275 Sig
0.25) (Sig -> Sig
saw (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig
q Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.5), Sig -> Sig
osc (Sig
q Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.5)]

impulseMarimba1 :: Sig -> Sig
impulseMarimba1 :: Sig -> Sig
impulseMarimba1 Sig
cps = Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
4 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ (Sig -> Sig) -> Sig -> AtOut Sig Sig Sig
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (Sig -> Sig -> Sig -> Sig
mlp Sig
cps Sig
0.95) (Sig -> AtOut Sig Sig Sig) -> Sig -> AtOut Sig Sig Sig
forall a b. (a -> b) -> a -> b
$ D -> Sig
impulse D
0

impulseMarimba2 :: Sig -> Sig
impulseMarimba2 :: Sig -> Sig
impulseMarimba2 Sig
cps = (Sig -> Sig) -> Sig -> AtOut Sig Sig Sig
forall a b. At Sig a b => (Sig -> a) -> b -> AtOut Sig a b
bat (Sig -> Sig -> Sig -> Sig
bp  Sig
cps  Sig
120) (Sig -> AtOut Sig Sig Sig) -> Sig -> AtOut Sig Sig Sig
forall a b. (a -> b) -> a -> b
$ D -> Sig
impulse D
0


celloWave :: (D, Sig) -> SE Sig
celloWave :: (D, Sig) -> SE Sig
celloWave = (D, Sig) -> SE Sig
go
    where
        go :: (D, Sig) -> SE Sig
go = (\(D
amp, Sig
cps) -> ((Sig -> SE Sig) -> Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig
cps) ((Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig -> SE Sig -> SE Sig) -> Sig -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig D
amp) (SE Sig -> SE Sig) -> (Sig -> SE Sig) -> Sig -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> SE Sig -> AtOut Sig Sig (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (
                Sig -> Sig -> Sig -> Sig
mlp (Sig
800) Sig
0.45 (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
                Sig -> Sig -> Sig -> Sig
hp Sig
50 Sig
10 (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
                (Sig -> Sig) -> Sig -> AtOut Sig Sig Sig
forall a b. At Sig a b => (Sig -> a) -> b -> AtOut Sig a b
bat (\Sig
q -> [Sig] -> Sig
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum [
                    Sig -> Sig -> Sig -> Sig
bp (Sig
300 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
200 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig
p Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- Sig
0.5)) Sig
60 Sig
x,
                    Sig -> Sig -> Sig -> Sig
bp (Sig
700 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
300 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig
t Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- Sig
0.5)) Sig
40 Sig
x,
                    Sig -> Sig -> Sig -> Sig
bp (Sig
1500 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
600 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig
q Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- Sig
0.5)) Sig
30 Sig
x]) (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
            Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> D -> D -> Sig
leg (D
0.1 D -> D -> D
forall a. Num a => a -> a -> a
+ D
0.5 D -> D -> D
forall a. Num a => a -> a -> a
* (D
1 D -> D -> D
forall a. Num a => a -> a -> a
- D
amp)) D
0.5 D
0.8 D
0.1)) (SE Sig -> SE Sig) -> (Sig -> SE Sig) -> Sig -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
            Sig -> SE Sig
rndSaw (Sig -> SE Sig) -> (Sig -> Sig) -> Sig -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
            (\Sig
q -> Sig
q Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig
1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
y Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.07 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* [D] -> D -> D -> Sig
linsegr [D
0, D
0.2, D
0.3, D
0.2, D
0.85, D
5, D
1] D
0.2 D
1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
osc (Sig
12 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
z)))))
        p :: Sig
p = Sig
0.25
        t :: Sig
t = Sig
0.3
        x :: Sig
x = Sig
0.45
        y :: Sig
y = Sig
0.15
        z :: Sig
z = Sig
0.45