{-# Language FlexibleContexts #-}
module Csound.Air.Misc(
mean, vibrate, randomPitch, chorusPitch, resons, resonsBy, modes, dryWet,
once, onceBy, several, fromMono,
odds, evens,
rndPan, rndPan2, rndVol, gaussVol,
selector,
writeHifi,
arpeggi, arpBy,
lpJoy,
delaySig, delay1k,
wshaper, genSaturator, saturator, mildSaturator, hardSaturator, hardSaturator2,
funSeq, funPar,
ticks, nticks,
ticks2, nticks2,
ticks3, nticks3,
ticks4, nticks4,
testDrone, testDrone2, testDrone3, testDrone4,
attackTrig,
attackTrigSig,
ambiEnv
) where
import Data.Boolean
import Data.Default
import Csound.Typed
import Csound.Typed.Opcode hiding (metro)
import Csound.Control.Gui
import Csound.Control.Evt
import Csound.Control.Instr
import Csound.Tab
import Csound.Air.Wave
import Csound.Air.Patch
import Csound.Air.Envelope
import Csound.Air.Filter
import Csound.IO(writeSndBy)
import Csound.Options(setRates)
import Csound.Typed.Plugins(delay1k)
odds :: [a] -> [a]
odds :: forall a. [a] -> [a]
odds [a]
as = ((Bool, a) -> a) -> [(Bool, a)] -> [a]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Bool, a) -> a
forall a b. (a, b) -> b
snd ([(Bool, a)] -> [a]) -> [(Bool, a)] -> [a]
forall a b. (a -> b) -> a -> b
$ ((Bool, a) -> Bool) -> [(Bool, a)] -> [(Bool, a)]
forall a. (a -> Bool) -> [a] -> [a]
filter (Bool, a) -> Bool
forall a b. (a, b) -> a
fst ([(Bool, a)] -> [(Bool, a)]) -> [(Bool, a)] -> [(Bool, a)]
forall a b. (a -> b) -> a -> b
$ [Bool] -> [a] -> [(Bool, a)]
forall a b. [a] -> [b] -> [(a, b)]
zip ([Bool] -> [Bool]
forall a. HasCallStack => [a] -> [a]
cycle [Bool
True, Bool
False]) [a]
as
evens :: [a] -> [a]
evens :: forall a. [a] -> [a]
evens [a]
as
| [a] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [a]
as = []
| Bool
otherwise = [a] -> [a]
forall a. [a] -> [a]
odds ([a] -> [a]) -> [a] -> [a]
forall a b. (a -> b) -> a -> b
$ [a] -> [a]
forall a. HasCallStack => [a] -> [a]
tail [a]
as
once :: Tab -> Sig
once :: Tab -> Sig
once = D -> Tab -> Sig
onceBy D
idur
onceBy :: D -> Tab -> Sig
onceBy :: D -> Tab -> Sig
onceBy D
dt Tab
tb = Sig -> Sig
kr (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Tab -> Sig -> Sig
oscBy Tab
tb (Sig
1 Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ D -> Sig
sig D
dt)
several :: Tab -> Sig -> Sig
several :: Tab -> Sig -> Sig
several Tab
tb Sig
rate = Sig -> Sig
kr (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Tab -> Sig
oscil3 Sig
1 (Sig
rate Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ D -> Sig
sig D
idur) Tab
tb
mean :: Fractional a => [a] -> a
mean :: forall a. Fractional a => [a] -> a
mean [a]
xs = [a] -> a
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum [a]
xs a -> a -> a
forall a. Fractional a => a -> a -> a
/ (Int -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> a) -> Int -> a
forall a b. (a -> b) -> a -> b
$ [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
xs)
vibrate :: Sig -> Sig -> (Sig -> a) -> (Sig -> a)
vibrate :: forall a. Sig -> Sig -> (Sig -> a) -> Sig -> a
vibrate Sig
vibDepth Sig
vibRate Sig -> a
f Sig
cps = Sig -> a
f (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
kvib))
where kvib :: Sig
kvib = Sig
vibDepth Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
kr (Sig -> Sig
osc Sig
vibRate)
randomPitch :: Sig -> Sig -> (Sig -> a) -> (Sig -> SE a)
randomPitch :: forall a. Sig -> Sig -> (Sig -> a) -> Sig -> SE a
randomPitch Sig
randAmp Sig
randCps Sig -> a
f Sig
cps = (Sig -> a) -> SE Sig -> SE a
forall a b. (a -> b) -> SE a -> SE b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> a
go (SE Sig -> SE a) -> SE Sig -> SE a
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> SE Sig
randh (Sig
cps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
randAmp) Sig
randCps
where go :: Sig -> a
go Sig
krand = Sig -> a
f (Sig
cps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
krand)
chorusPitch :: Int -> Sig -> (Sig -> Sig) -> Sig -> Sig
chorusPitch :: Int -> Sig -> (Sig -> Sig) -> Sig -> Sig
chorusPitch Int
n Sig
wid = [Sig] -> (Sig -> Sig) -> Sig -> Sig
phi [Sig]
dts
where
phi :: [Sig] -> (Sig -> Sig) -> Sig -> Sig
phi :: [Sig] -> (Sig -> Sig) -> Sig -> Sig
phi [Sig]
ks Sig -> Sig
f = \Sig
cps -> [Sig] -> Sig
forall a. Fractional a => [a] -> a
mean ([Sig] -> Sig) -> [Sig] -> Sig
forall a b. (a -> b) -> a -> b
$ (Sig -> Sig) -> [Sig] -> [Sig]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sig -> Sig
f (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
cps)) [Sig]
ks
dts :: [Sig]
dts = (Int -> Sig) -> [Int] -> [Sig]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Int
x -> - Sig
wid Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Int -> Sig
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
x Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
dt) [Int
0 .. Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1]
dt :: Sig
dt = Sig
2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
wid Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Int -> Sig
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n
resons :: [(Sig, Sig)] -> Sig -> Sig
resons :: [Sig2] -> Sig -> Sig
resons = (Sig -> Sig -> Sig -> Sig) -> [Sig2] -> Sig -> Sig
forall cps bw.
(cps -> bw -> Sig -> Sig) -> [(cps, bw)] -> Sig -> Sig
resonsBy Sig -> Sig -> Sig -> Sig
bp
resonsBy :: (cps -> bw -> Sig -> Sig) -> [(cps, bw)] -> Sig -> Sig
resonsBy :: forall cps bw.
(cps -> bw -> Sig -> Sig) -> [(cps, bw)] -> Sig -> Sig
resonsBy cps -> bw -> Sig -> Sig
flt [(cps, bw)]
ps Sig
asig = [Sig] -> Sig
forall a. Fractional a => [a] -> a
mean ([Sig] -> Sig) -> [Sig] -> Sig
forall a b. (a -> b) -> a -> b
$ ((cps, bw) -> Sig) -> [(cps, bw)] -> [Sig]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (( (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig
asig) ((Sig -> Sig) -> Sig)
-> ((cps, bw) -> Sig -> Sig) -> (cps, bw) -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (cps -> bw -> Sig -> Sig) -> (cps, bw) -> Sig -> Sig
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry cps -> bw -> Sig -> Sig
flt) [(cps, bw)]
ps
dryWet :: Sig -> (Sig -> Sig) -> Sig -> Sig
dryWet :: Sig -> (Sig -> Sig) -> Sig -> Sig
dryWet Sig
k Sig -> Sig
ef Sig
asig = Sig
k Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
asig Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ (Sig
1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- Sig
k) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
ef Sig
asig
modes :: [(Sig, Sig)] -> Sig -> Sig -> Sig
modes :: [Sig2] -> Sig -> Sig -> Sig
modes = (Sig -> Sig -> Sig -> Sig) -> [Sig2] -> Sig -> Sig -> Sig
forall a.
(Sig -> a -> Sig -> Sig) -> [(Sig, a)] -> Sig -> Sig -> Sig
relResonsBy (\Sig
cf Sig
q Sig
asig -> Sig -> Sig -> Sig -> Sig
mode Sig
asig Sig
cf Sig
q)
relResonsBy :: (Sig -> a -> Sig -> Sig) -> [(Sig, a)] -> Sig -> Sig -> Sig
relResonsBy :: forall a.
(Sig -> a -> Sig -> Sig) -> [(Sig, a)] -> Sig -> Sig -> Sig
relResonsBy Sig -> a -> Sig -> Sig
resonator [(Sig, a)]
ms Sig
baseCps Sig
apulse = (Sig -> Sig
forall a. Fractional a => a -> a
recip Sig
normFactor Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* ) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ [Sig] -> Sig
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum ([Sig] -> Sig) -> [Sig] -> Sig
forall a b. (a -> b) -> a -> b
$ ((Sig, a) -> Sig) -> [(Sig, a)] -> [Sig]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(Sig
cf, a
q) -> Sig -> a -> Sig -> Sig
harm Sig
cf a
q Sig
apulse) [(Sig, a)]
ms
where
gate :: Sig -> Sig
gate :: Sig -> Sig
gate Sig
cps = BoolSig -> Sig -> Sig -> Sig
forall bool. (bool ~ BooleanOf Sig) => bool -> Sig -> Sig -> Sig
forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a
ifB (D -> Sig
sig D
getSampleRate Sig -> Sig -> BoolSig
forall bool. (bool ~ BooleanOf Sig) => Sig -> Sig -> bool
forall a bool. (OrdB a, bool ~ BooleanOf a) => a -> a -> bool
>* Sig
forall a. Floating a => a
pi Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
cps) Sig
1 Sig
0
normFactor :: Sig
normFactor = [Sig] -> Sig
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum ([Sig] -> Sig) -> [Sig] -> Sig
forall a b. (a -> b) -> a -> b
$ ((Sig, a) -> Sig) -> [(Sig, a)] -> [Sig]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sig -> Sig
gate (Sig -> Sig) -> ((Sig, a) -> Sig) -> (Sig, a) -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
baseCps) (Sig -> Sig) -> ((Sig, a) -> Sig) -> (Sig, a) -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, a) -> Sig
forall a b. (a, b) -> a
fst) [(Sig, a)]
ms
harm :: Sig -> a -> Sig -> Sig
harm Sig
cf a
q Sig
x = Sig
g Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> a -> Sig -> Sig
resonator (Sig
1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- Sig
g Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
g Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
cps) a
q Sig
x
where cps :: Sig
cps = Sig
cf Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
baseCps
g :: Sig
g = Sig -> Sig
gate Sig
cps
fromMono :: Sig -> (Sig, Sig)
fromMono :: Sig -> Sig2
fromMono Sig
a = (Sig
a, Sig
a)
rndPan2 :: Sig2 -> SE Sig2
rndPan2 :: Sig2 -> SE Sig2
rndPan2 (Sig
a, Sig
b) = Sig -> SE Sig2
rndPan (Sig -> SE Sig2) -> Sig -> SE Sig2
forall a b. (a -> b) -> a -> b
$ [Sig] -> Sig
forall a. Fractional a => [a] -> a
mean [Sig
a, Sig
b]
rndPan :: Sig -> SE Sig2
rndPan :: Sig -> SE Sig2
rndPan Sig
a = do
(D -> Sig2) -> SE D -> SE Sig2
forall a b. (a -> b) -> SE a -> SE b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sig -> Sig -> Sig2
pan2 Sig
a (Sig -> Sig2) -> (D -> Sig) -> D -> Sig2
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> Sig
sig) (D -> SE D
forall a. SigOrD a => a -> SE a
rnd (D
1 :: D))
gaussVol :: SigSpace a => D -> a -> SE a
gaussVol :: forall a. SigSpace a => D -> a -> SE a
gaussVol D
k a
a = do
D
level <- (Sig -> D) -> SE Sig -> SE D
forall a b. (a -> b) -> SE a -> SE b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> D
ir (SE Sig -> SE D) -> SE Sig -> SE D
forall a b. (a -> b) -> a -> b
$ Sig -> SE Sig
gauss (D -> Sig
sig D
k)
a -> SE a
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (a -> SE a) -> a -> SE a
forall a b. (a -> b) -> a -> b
$ Sig -> a -> a
forall a. SigSpace a => Sig -> a -> a
mul (D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ D
level D -> D -> D
forall a. Num a => a -> a -> a
+ D
1) a
a
rndVol :: SigSpace a => (D, D) -> a -> SE a
rndVol :: forall a. SigSpace a => (D, D) -> a -> SE a
rndVol (D
kMin, D
kMax) a
a = do
D
level <- D -> SE D
forall a. SigOrD a => a -> SE a
rnd (D
1 :: D)
a -> SE a
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (a -> SE a) -> a -> SE a
forall a b. (a -> b) -> a -> b
$ Sig -> a -> a
forall a. SigSpace a => Sig -> a -> a
mul (D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ D
kMin D -> D -> D
forall a. Num a => a -> a -> a
+ (D
kMax D -> D -> D
forall a. Num a => a -> a -> a
- D
kMin) D -> D -> D
forall a. Num a => a -> a -> a
* D
level) a
a
writeHifi :: D -> String -> SE Sig2 -> IO ()
writeHifi :: D -> String -> SE Sig2 -> IO ()
writeHifi D
n String
fileName SE Sig2
a = Options -> String -> SE Sig2 -> IO ()
forall a. RenderCsd a => Options -> String -> a -> IO ()
writeSndBy (Int -> Int -> Options
setRates Int
48000 Int
10) String
fileName (SE Sig2 -> IO ()) -> SE Sig2 -> IO ()
forall a b. (a -> b) -> a -> b
$ (Sig2 -> Sig2) -> SE Sig2 -> SE Sig2
forall a b. (a -> b) -> SE a -> SE b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (D -> Sig2 -> Sig2
forall a. Sigs a => D -> a -> a
setDur (D -> Sig2 -> Sig2) -> D -> Sig2 -> Sig2
forall a b. (a -> b) -> a -> b
$ D
n) SE Sig2
a
selector :: (Num a, SigSpace a) => [a] -> Sig -> a
selector :: forall a. (Num a, SigSpace a) => [a] -> Sig -> a
selector [a]
as Sig
k = [a] -> a
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum ([a] -> a) -> [a] -> a
forall a b. (a -> b) -> a -> b
$ (Int -> a -> a) -> [Int] -> [a] -> [a]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith Int -> a -> a
forall {a}. SigSpace a => Int -> a -> a
choice [Int
0..] [a]
as
where choice :: Int -> a -> a
choice Int
n a
a = Sig -> a -> a
forall a. SigSpace a => Sig -> a -> a
mul (Sig -> D -> Sig
port (BoolSig -> Sig -> Sig -> Sig
forall bool. (bool ~ BooleanOf Sig) => bool -> Sig -> Sig -> Sig
forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a
ifB (D -> Sig
sig (Int -> D
int Int
n) Sig -> Sig -> BoolSig
forall bool. (bool ~ BooleanOf Sig) => Sig -> Sig -> bool
forall a bool. (EqB a, bool ~ BooleanOf a) => a -> a -> bool
==* Sig
k) Sig
1 Sig
0) D
0.02) a
a
arpeggi :: SigSpace a => [Sig] -> [Sig] -> (Sig -> a) -> Sig -> a
arpeggi :: forall a. SigSpace a => [Sig] -> [Sig] -> (Sig -> a) -> Sig -> a
arpeggi = ([Sig] -> Sig -> Sig)
-> ([Sig] -> Sig -> Sig)
-> [Sig]
-> [Sig]
-> (Sig -> a)
-> Sig
-> a
forall a.
SigSpace a =>
([Sig] -> Sig -> Sig)
-> ([Sig] -> Sig -> Sig)
-> [Sig]
-> [Sig]
-> (Sig -> a)
-> Sig
-> a
arpBy [Sig] -> Sig -> Sig
triSeq [Sig] -> Sig -> Sig
sqrSeq
arpBy :: SigSpace a => ([Sig] -> Sig -> Sig) -> ([Sig] -> Sig -> Sig) -> [Sig] -> [Sig] -> (Sig -> a) -> Sig -> a
arpBy :: forall a.
SigSpace a =>
([Sig] -> Sig -> Sig)
-> ([Sig] -> Sig -> Sig)
-> [Sig]
-> [Sig]
-> (Sig -> a)
-> Sig
-> a
arpBy [Sig] -> Sig -> Sig
ampWave [Sig] -> Sig -> Sig
cpsWave [Sig]
amps [Sig]
cpss Sig -> a
wave Sig
dt = Sig -> a -> a
forall a. SigSpace a => Sig -> a -> a
mul ([Sig] -> Sig -> Sig
ampWave [Sig]
amps Sig
dt) (a -> a) -> a -> a
forall a b. (a -> b) -> a -> b
$ Sig -> a
wave (Sig -> a) -> Sig -> a
forall a b. (a -> b) -> a -> b
$ [Sig] -> Sig -> Sig
cpsWave [Sig]
cpss Sig
dt
lpJoy :: Source (Sig -> Sig)
lpJoy :: Source (Sig -> Sig)
lpJoy = (Sig2 -> Sig -> Sig) -> Source Sig2 -> Source (Sig -> Sig)
forall a b. (a -> b) -> Source a -> Source b
lift1 (\(Sig
cps, Sig
res) -> Sig -> Sig -> Sig -> Sig
mlp Sig
cps Sig
res) (Source Sig2 -> Source (Sig -> Sig))
-> Source Sig2 -> Source (Sig -> Sig)
forall a b. (a -> b) -> a -> b
$ ValSpan -> ValSpan -> (Double, Double) -> Source Sig2
joy (Double -> Double -> ValSpan
expSpan Double
100 Double
17000) (Double -> Double -> ValSpan
linSpan Double
0.05 Double
0.95) (Double
1400, Double
0.5)
funSeq :: [a -> a] -> a -> a
funSeq :: forall a. [a -> a] -> a -> a
funSeq = ((a -> a) -> (a -> a) -> a -> a) -> (a -> a) -> [a -> a] -> a -> a
forall b a. (b -> a -> b) -> b -> [a] -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl (a -> a) -> (a -> a) -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
(.) a -> a
forall a. a -> a
id
funPar :: Num a => [a -> a] -> a -> a
funPar :: forall a. Num a => [a -> a] -> a -> a
funPar [a -> a]
fs a
a = [a] -> a
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum ([a] -> a) -> [a] -> a
forall a b. (a -> b) -> a -> b
$ ((a -> a) -> a) -> [a -> a] -> [a]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((a -> a) -> a -> a
forall a b. (a -> b) -> a -> b
$ a
a) [a -> a]
fs
delaySig :: D -> Sig -> Sig
delaySig :: D -> Sig -> Sig
delaySig D
nsamples Sig
asig = Sig -> D -> Sig
delay Sig
asig D
nsamples
data TrSpec = TrSpec {
TrSpec -> D
trDur :: D
, TrSpec -> D
trTune :: D
, TrSpec -> D
trCps :: D
, TrSpec -> Maybe D
trRnd :: Maybe D
}
rndAmp :: Sig -> SE Sig
rndAmp :: Sig -> SE Sig
rndAmp Sig
a = do
D
k <- D -> SE D
forall a. SigOrD a => a -> SE a
birnd D
0.09
Sig -> SE Sig
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig -> SE Sig) -> Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig
a Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig
1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ D -> Sig
sig D
k)
rndVal :: D -> D -> D -> SE D
rndVal :: D -> D -> D -> SE D
rndVal D
total D
amount D
x = do
D
k <- D -> SE D
forall a. SigOrD a => a -> SE a
birnd D
amount
D -> SE D
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (D -> SE D) -> D -> SE D
forall a b. (a -> b) -> a -> b
$ D
x D -> D -> D
forall a. Num a => a -> a -> a
+ D
k D -> D -> D
forall a. Num a => a -> a -> a
* D
total
rndDur, rndCps, rndTune :: D -> D -> SE D
rndDur :: D -> D -> SE D
rndDur D
amt D
x = D -> D -> D -> SE D
rndVal D
x D
amt D
x
rndCps :: D -> D -> SE D
rndCps D
amt D
x = D -> D -> D -> SE D
rndVal D
x (D
amt D -> D -> D
forall a. Fractional a => a -> a -> a
/ D
10) D
x
rndTune :: D -> D -> SE D
rndTune D
amt D
x = D -> D -> D -> SE D
rndVal D
0.7 D
amt D
x
rndSpec ::TrSpec -> SE TrSpec
rndSpec :: TrSpec -> SE TrSpec
rndSpec TrSpec
spec = do
D
dur' <- SE D
rndDur'
D
tune <- SE D
rndTune'
D
cps <- SE D
rndCps'
TrSpec -> SE TrSpec
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (TrSpec -> SE TrSpec) -> TrSpec -> SE TrSpec
forall a b. (a -> b) -> a -> b
$ TrSpec
spec
{ trDur = dur'
, trTune = tune
, trCps = cps }
where
rndDur' :: SE D
rndDur' = ((D -> SE D) -> (D -> D -> SE D) -> Maybe D -> D -> SE D
forall b a. b -> (a -> b) -> Maybe a -> b
maybe D -> SE D
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return D -> D -> SE D
rndDur (Maybe D -> D -> SE D) -> Maybe D -> D -> SE D
forall a b. (a -> b) -> a -> b
$ (TrSpec -> Maybe D
trRnd TrSpec
spec)) (D -> SE D) -> D -> SE D
forall a b. (a -> b) -> a -> b
$ TrSpec -> D
trDur TrSpec
spec
rndTune' :: SE D
rndTune' = ((D -> SE D) -> (D -> D -> SE D) -> Maybe D -> D -> SE D
forall b a. b -> (a -> b) -> Maybe a -> b
maybe D -> SE D
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return D -> D -> SE D
rndTune (Maybe D -> D -> SE D) -> Maybe D -> D -> SE D
forall a b. (a -> b) -> a -> b
$ (TrSpec -> Maybe D
trRnd TrSpec
spec)) (D -> SE D) -> D -> SE D
forall a b. (a -> b) -> a -> b
$ TrSpec -> D
trTune TrSpec
spec
rndCps' :: SE D
rndCps' = ((D -> SE D) -> (D -> D -> SE D) -> Maybe D -> D -> SE D
forall b a. b -> (a -> b) -> Maybe a -> b
maybe D -> SE D
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return D -> D -> SE D
rndCps (Maybe D -> D -> SE D) -> Maybe D -> D -> SE D
forall a b. (a -> b) -> a -> b
$ (TrSpec -> Maybe D
trRnd TrSpec
spec)) (D -> SE D) -> D -> SE D
forall a b. (a -> b) -> a -> b
$ TrSpec -> D
trCps TrSpec
spec
addDur' :: D -> Sig -> SE Sig
addDur' :: D -> Sig -> SE Sig
addDur' D
dt Sig
x = D -> SE ()
xtratim D
dt SE () -> SE Sig -> SE Sig
forall a b. SE a -> SE b -> SE b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Sig -> SE Sig
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return Sig
x
addDur :: Sig -> SE Sig
addDur :: Sig -> SE Sig
addDur = D -> Sig -> SE Sig
addDur' D
0.1
getAccent :: Int -> [D]
getAccent :: Int -> [D]
getAccent Int
n = D
1 D -> [D] -> [D]
forall a. a -> [a] -> [a]
: Int -> D -> [D]
forall a. Int -> a -> [a]
replicate (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) D
0.5
nticks :: [Int] -> Sig -> Sig
nticks :: [Int] -> Sig -> Sig
nticks = (TrSpec -> SE Sig) -> [Int] -> Sig -> Sig
nticks' TrSpec -> SE Sig
rimShot'
nticks2 :: [Int] -> Sig -> Sig
nticks2 :: [Int] -> Sig -> Sig
nticks2 = (TrSpec -> SE Sig) -> [Int] -> Sig -> Sig
nticks' TrSpec -> SE Sig
claves'
nticks3 :: [Int] -> Sig -> Sig
nticks3 :: [Int] -> Sig -> Sig
nticks3 = (TrSpec -> SE Sig) -> [Int] -> Sig -> Sig
nticks' TrSpec -> SE Sig
maraca'
nticks4 :: [Int] -> Sig -> Sig
nticks4 :: [Int] -> Sig -> Sig
nticks4 = (TrSpec -> SE Sig) -> [Int] -> Sig -> Sig
nticks' TrSpec -> SE Sig
highConga'
nticks' :: (TrSpec -> SE Sig) -> [Int] -> Sig -> Sig
nticks' :: (TrSpec -> SE Sig) -> [Int] -> Sig -> Sig
nticks' TrSpec -> SE Sig
drum [Int]
ns = (TrSpec -> SE Sig) -> (Tick -> Evt D) -> Sig -> Sig
genTicks TrSpec -> SE Sig
drum ([D] -> Tick -> Evt D
forall a b. (Tuple a, Arg a) => [a] -> Evt b -> Evt a
cycleE ([D] -> Tick -> Evt D) -> [D] -> Tick -> Evt D
forall a b. (a -> b) -> a -> b
$ [Int]
ns [Int] -> (Int -> [D]) -> [D]
forall a b. [a] -> (a -> [b]) -> [b]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> [D]
getAccent)
ticks :: Int -> Sig -> Sig
ticks :: Int -> Sig -> Sig
ticks = (TrSpec -> SE Sig) -> Int -> Sig -> Sig
ticks' TrSpec -> SE Sig
rimShot'
ticks2 :: Int -> Sig -> Sig
ticks2 :: Int -> Sig -> Sig
ticks2 = (TrSpec -> SE Sig) -> Int -> Sig -> Sig
ticks' TrSpec -> SE Sig
claves'
ticks3 :: Int -> Sig -> Sig
ticks3 :: Int -> Sig -> Sig
ticks3 = (TrSpec -> SE Sig) -> Int -> Sig -> Sig
ticks' TrSpec -> SE Sig
maraca'
ticks4 :: Int -> Sig -> Sig
ticks4 :: Int -> Sig -> Sig
ticks4 = (TrSpec -> SE Sig) -> Int -> Sig -> Sig
ticks' TrSpec -> SE Sig
highConga'
ticks' :: (TrSpec -> SE Sig) -> Int -> Sig -> Sig
ticks' :: (TrSpec -> SE Sig) -> Int -> Sig -> Sig
ticks' TrSpec -> SE Sig
drum Int
n
| Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
1 = (TrSpec -> SE Sig) -> (Tick -> Evt D) -> Sig -> Sig
genTicks TrSpec -> SE Sig
drum (D -> Tick -> Evt D
forall a. D -> Evt a -> Evt D
devt D
0.5)
| Bool
otherwise = (TrSpec -> SE Sig) -> (Tick -> Evt D) -> Sig -> Sig
genTicks TrSpec -> SE Sig
drum ([D] -> Tick -> Evt D
forall a b. (Tuple a, Arg a) => [a] -> Evt b -> Evt a
cycleE ([D] -> Tick -> Evt D) -> [D] -> Tick -> Evt D
forall a b. (a -> b) -> a -> b
$ Int -> [D]
getAccent Int
n)
genTicks :: (TrSpec -> SE Sig) -> (Tick -> Evt D) -> Sig -> Sig
genTicks :: (TrSpec -> SE Sig) -> (Tick -> Evt D) -> Sig -> Sig
genTicks TrSpec -> SE Sig
drum Tick -> Evt D
f Sig
x = Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
3 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig
mlp Sig
4000 Sig
0.1 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$
(D -> SE Sig) -> Evt (Sco D) -> Sig
forall a b. (Arg a, Sigs b) => (a -> SE b) -> Evt (Sco a) -> b
sched (\D
amp -> Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> Sig
sig D
amp) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ TrSpec -> SE Sig
drum (D -> D -> D -> Maybe D -> TrSpec
TrSpec (D
amp D -> D -> D
forall a. Num a => a -> a -> a
+ D
1) D
0 (D
1200 D -> D -> D
forall a. Num a => a -> a -> a
* (D
amp D -> D -> D
forall a. Num a => a -> a -> a
+ D
0.5)) (D -> Maybe D
forall a. a -> Maybe a
Just D
0.05))) (Evt (Sco D) -> Sig) -> Evt (Sco D) -> Sig
forall a b. (a -> b) -> a -> b
$
Sig -> Evt D -> Evt (Sco D)
forall a. Sig -> Evt a -> Evt (Sco a)
withDur Sig
0.5 (Evt D -> Evt (Sco D)) -> Evt D -> Evt (Sco D)
forall a b. (a -> b) -> a -> b
$ Tick -> Evt D
f (Tick -> Evt D) -> Tick -> Evt D
forall a b. (a -> b) -> a -> b
$ Sig -> Tick
metro (Sig
x Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
60)
rimShot' :: TrSpec -> SE Sig
rimShot' :: TrSpec -> SE Sig
rimShot' TrSpec
spec = TrSpec -> SE Sig
pureRimShot' (TrSpec -> SE Sig) -> SE TrSpec -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< TrSpec -> SE TrSpec
rndSpec TrSpec
spec
pureRimShot' :: TrSpec -> SE Sig
pureRimShot' :: TrSpec -> SE Sig
pureRimShot' TrSpec
spec = Sig -> SE Sig
rndAmp (Sig -> SE Sig) -> SE Sig -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Sig -> SE Sig
addDur (Sig -> SE Sig) -> SE Sig -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< (Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.8 (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ SE Sig
aring SE Sig -> SE Sig -> SE Sig
forall a. Num a => a -> a -> a
+ SE Sig
anoise)
where
dur' :: D
dur' = TrSpec -> D
trDur TrSpec
spec
tune :: D
tune = TrSpec -> D
trTune TrSpec
spec
cps :: D
cps = TrSpec -> D
trCps TrSpec
spec
fullDur :: D
fullDur = D
0.027 D -> D -> D
forall a. Num a => a -> a -> a
* D
dur'
aenv1 :: Sig
aenv1 = [D] -> Sig
expsega [D
1,D
fullDur,D
0.001]
ifrq1 :: Sig
ifrq1 = D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ D
cps D -> D -> D
forall a. Num a => a -> a -> a
* D -> D
forall a. SigOrD a => a -> a
octave D
tune
aring :: SE Sig
aring = Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig
aenv1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- Sig
0.001)) (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
bbp Sig
ifrq1 (Sig
ifrq1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
8)) (SE Sig -> AtOut Sig Sig (SE Sig))
-> SE Sig -> AtOut Sig Sig (SE Sig)
forall a b. (a -> b) -> a -> b
$ Tab -> Sig -> SE Sig
rndOscBy Tab
tabTR808RimShot Sig
ifrq1
aenv2 :: Sig
aenv2 = [D] -> Sig
expsega [D
1, D
0.002, D
0.8, D
0.005, D
0.5, D
fullDurD -> D -> D
forall a. Num a => a -> a -> a
-D
0.002D -> D -> D
forall a. Num a => a -> a -> a
-D
0.005, D
0.0001]
kcf :: Sig
kcf = [D] -> D -> D -> Sig
expsegr [D
4000, D
fullDur, D
20] D
fullDur D
20
anoise :: SE Sig
anoise = Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
aenv2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- Sig
0.001) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ (Sig -> Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> SE a -> SE b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sig -> Sig -> Sig
blp Sig
kcf) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> SE Sig
noise Sig
1 Sig
0
tabTR808RimShot :: Tab
tabTR808RimShot = Int -> Tab -> Tab
setSize Int
1024 (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ [Double] -> Tab
sines [Double
0.971,Double
0.269,Double
0.041,Double
0.054,Double
0.011,Double
0.013,Double
0.08,Double
0.0065,Double
0.005,Double
0.004,Double
0.003,Double
0.003,Double
0.002,Double
0.002,Double
0.002,Double
0.002,Double
0.002,Double
0.001,Double
0.001,Double
0.001,Double
0.001,Double
0.001,Double
0.002,Double
0.001,Double
0.001]
claves' :: TrSpec -> SE Sig
claves' :: TrSpec -> SE Sig
claves' TrSpec
spec = Sig -> SE Sig
rndAmp (Sig -> SE Sig) -> SE Sig -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Sig -> SE Sig
addDur (Sig -> SE Sig) -> SE Sig -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< SE Sig
asig
where
dur' :: D
dur' = TrSpec -> D
trDur TrSpec
spec
tune :: D
tune = TrSpec -> D
trTune TrSpec
spec
cps :: D
cps = TrSpec -> D
trCps TrSpec
spec
ifrq :: D
ifrq = D
cps D -> D -> D
forall a. Num a => a -> a -> a
* D -> D
forall a. SigOrD a => a -> a
octave D
tune
dt :: D
dt = D
0.045 D -> D -> D
forall a. Num a => a -> a -> a
* D
dur'
aenv :: Sig
aenv = [D] -> Sig
expsega [D
1, D
dt, D
0.001]
afmod :: Sig
afmod = [D] -> Sig
expsega [D
3,D
0.00005,D
1]
asig :: SE Sig
asig = Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (- Sig
0.4 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig
aenvSig -> Sig -> Sig
forall a. Num a => a -> a -> a
-Sig
0.001)) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> SE Sig
rndOsc (D -> Sig
sig D
ifrq Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
afmod)
highConga' :: TrSpec -> SE Sig
highConga' :: TrSpec -> SE Sig
highConga' = D -> TrSpec -> SE Sig
genConga D
0.22
genConga :: D -> TrSpec -> SE Sig
genConga :: D -> TrSpec -> SE Sig
genConga D
dt TrSpec
spec = Sig -> SE Sig
rndAmp (Sig -> SE Sig) -> SE Sig -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Sig -> SE Sig
addDur (Sig -> SE Sig) -> SE Sig -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< SE Sig
asig
where
dur' :: D
dur' = TrSpec -> D
trDur TrSpec
spec
tune :: D
tune = TrSpec -> D
trTune TrSpec
spec
cps :: D
cps = TrSpec -> D
trCps TrSpec
spec
ifrq :: D
ifrq = D
cps D -> D -> D
forall a. Num a => a -> a -> a
* D -> D
forall a. SigOrD a => a -> a
octave D
tune
fullDur :: D
fullDur = D
dt D -> D -> D
forall a. Num a => a -> a -> a
* D
dur'
aenv :: Sig
aenv = [D] -> Sig
transeg [D
0.7,D
1D -> D -> D
forall a. Fractional a => a -> a -> a
/D
ifrq,D
1,D
1,D
fullDur,-D
6,D
0.001]
afmod :: Sig
afmod = [D] -> Sig
expsega [D
3,D
0.25D -> D -> D
forall a. Fractional a => a -> a -> a
/D
ifrq,D
1]
asig :: SE Sig
asig = Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (-Sig
0.25 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
aenv) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> SE Sig
rndOsc (D -> Sig
sig D
ifrq Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
afmod)
maraca' :: TrSpec -> SE Sig
maraca' :: TrSpec -> SE Sig
maraca' TrSpec
spec = Sig -> SE Sig
rndAmp (Sig -> SE Sig) -> SE Sig -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Sig -> SE Sig
addDur (Sig -> SE Sig) -> SE Sig -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< SE Sig
anoise
where
dur' :: D
dur' = TrSpec -> D
trDur TrSpec
spec
tune :: D
tune = TrSpec -> D
trTune TrSpec
spec
otune :: Sig
otune = D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ D -> D
forall a. SigOrD a => a -> a
octave D
tune
iHPF :: Sig
iHPF = Sig -> Sig -> Sig -> Sig
limit (Sig
6000 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
otune) Sig
20 (D -> Sig
sig D
getSampleRate Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
2)
iLPF :: Sig
iLPF = Sig -> Sig -> Sig -> Sig
limit (Sig
12000 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
otune) Sig
20 (D -> Sig
sig D
getSampleRate Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
3)
aenv :: Sig
aenv = [D] -> Sig
expsega [D
0.4,D
0.014D -> D -> D
forall a. Num a => a -> a -> a
* D
dur',D
1,D
0.01 D -> D -> D
forall a. Num a => a -> a -> a
* D
dur', D
0.05, D
0.05 D -> D -> D
forall a. Num a => a -> a -> a
* D
dur', D
0.001]
anoise :: SE Sig
anoise = Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
aenv (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ (Sig -> Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> SE a -> SE b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sig -> Sig -> Sig
blp Sig
iLPF (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig
bhp Sig
iHPF) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> SE Sig
noise Sig
0.75 Sig
0
testDrone, testDrone2, testDrone3, testDrone4 :: D -> SE Sig2
testDrone :: D -> SE Sig2
testDrone D
cps = Patch Sig2 -> (D, D) -> SE Sig2
forall a. (SigSpace a, Sigs a) => Patch a -> (D, D) -> SE a
atNote (Patch Sig2 -> Patch Sig2
forall b. (SigSpace b, Sigs b) => Patch b -> Patch b
deepPad Patch Sig2
razorPad) (D
0.8, D
cps)
where
razorPad :: Patch Sig2
razorPad = RazorPad -> Patch Sig2
razorPad' RazorPad
forall a. Default a => a
def
razorPad' :: RazorPad -> Patch Sig2
razorPad' (RazorPad Sig
speed) = Sig -> Patch Sig2 -> Patch Sig2
withLargeHall' Sig
0.35 (Patch Sig2 -> Patch Sig2) -> Patch Sig2 -> Patch Sig2
forall a b. (a -> b) -> a -> b
$ ((D, D) -> SE Sig2) -> Patch Sig2
forall a. Instr D a -> Patch a
polySynt (((D, D) -> SE Sig2) -> Patch Sig2)
-> ((D, D) -> SE Sig2) -> Patch Sig2
forall a b. (a -> b) -> a -> b
$ (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 (SE Sig -> SE Sig2) -> ((D, D) -> SE Sig) -> (D, D) -> SE Sig2
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.6 (SE Sig -> SE Sig) -> ((D, D) -> SE Sig) -> (D, D) -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig2 -> SE Sig) -> (D, D) -> SE (CpsInstrOut (Sig2 -> SE Sig))
forall a. CpsInstr a => a -> (D, D) -> SE (CpsInstrOut a)
onCps ((Sig -> Sig -> SE Sig) -> Sig2 -> SE Sig
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry ((Sig -> Sig -> SE Sig) -> Sig2 -> SE Sig)
-> (Sig -> Sig -> SE Sig) -> Sig2 -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> SE Sig
impRazorPad Sig
speed)
testDrone2 :: D -> SE Sig2
testDrone2 D
cps = Patch Sig2 -> (D, D) -> SE Sig2
forall a. (SigSpace a, Sigs a) => Patch a -> (D, D) -> SE a
atNote (Patch Sig2 -> Patch Sig2
forall b. (SigSpace b, Sigs b) => Patch b -> Patch b
deepPad Patch Sig2
nightPad) (D
0.8, D
cps)
where
nightPad :: Patch Sig2
nightPad = Patch Sig2 -> Patch Sig2
withLargeHall (Patch Sig2 -> Patch Sig2) -> Patch Sig2 -> Patch Sig2
forall a b. (a -> b) -> a -> b
$ ((D, D) -> SE Sig2) -> Patch Sig2
forall a. Instr D a -> Patch a
polySynt (((D, D) -> SE Sig2) -> Patch Sig2)
-> ((D, D) -> SE Sig2) -> Patch Sig2
forall a b. (a -> b) -> a -> b
$ Sig -> SE Sig2 -> SE Sig2
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.48 (SE Sig2 -> SE Sig2) -> ((D, D) -> SE Sig2) -> (D, D) -> 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 (SE Sig -> SE Sig2) -> ((D, D) -> SE Sig) -> (D, D) -> SE Sig2
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> (D, D) -> SE (CpsInstrOut (Sig -> Sig))
forall a. CpsInstr a => a -> (D, D) -> SE (CpsInstrOut a)
onCps (Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> Sig
fadeOut D
1) (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> Sig -> Sig
impNightPad D
0.5)
testDrone3 :: D -> SE Sig2
testDrone3 D
cps = Patch Sig2 -> (D, D) -> SE Sig2
forall a. (SigSpace a, Sigs a) => Patch a -> (D, D) -> SE a
atNote (Patch Sig2 -> Patch Sig2
forall b. (SigSpace b, Sigs b) => Patch b -> Patch b
deepPad Patch Sig2
caveOvertonePad) (D
0.8, D
cps)
where
caveOvertonePad :: Patch Sig2
caveOvertonePad = [GenFxSpec Sig2] -> Patch Sig2 -> Patch Sig2
forall a. [GenFxSpec a] -> Patch a -> Patch a
FxChain (Sig -> (Sig2 -> Sig2) -> [GenFxSpec Sig2]
forall a. Sig -> (a -> a) -> [GenFxSpec a]
fx1 Sig
0.2 (Sig2 -> Sig2
magicCave2 (Sig2 -> Sig2) -> (Sig2 -> Sig2) -> Sig2 -> Sig2
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig2 -> Sig2
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.8)) (Patch Sig2 -> Patch Sig2) -> Patch Sig2 -> Patch Sig2
forall a b. (a -> b) -> a -> b
$ ((D, D) -> SE Sig2) -> Patch Sig2
forall a. Instr D a -> Patch a
polySynt (D, D) -> SE Sig2
overtoneInstr
testDrone4 :: D -> SE Sig2
testDrone4 D
cps = Patch Sig2 -> (D, D) -> SE Sig2
forall a. (SigSpace a, Sigs a) => Patch a -> (D, D) -> SE a
atNote (Patch Sig2 -> Patch Sig2
forall b. (SigSpace b, Sigs b) => Patch b -> Patch b
deepPad Patch Sig2
pwEnsemble) (D
0.8, D
cps)
where
pwEnsemble :: Patch Sig2
pwEnsemble = Patch Sig2 -> Patch Sig2
withSmallHall (Patch Sig2 -> Patch Sig2) -> Patch Sig2 -> Patch Sig2
forall a b. (a -> b) -> a -> b
$ ((D, D) -> SE Sig2) -> Patch Sig2
forall a. Instr D a -> Patch a
polySynt (((D, D) -> SE Sig2) -> Patch Sig2)
-> ((D, D) -> SE Sig2) -> Patch Sig2
forall a b. (a -> b) -> a -> b
$ (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 (SE Sig -> SE Sig2) -> ((D, D) -> SE Sig) -> (D, D) -> SE Sig2
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.55 (SE Sig -> SE Sig) -> ((D, D) -> SE Sig) -> (D, D) -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> (D, D) -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> (D, D) -> SE (CpsInstrOut a)
onCps Sig -> SE Sig
impPwEnsemble
data RazorPad = RazorPad Sig
instance Default RazorPad where
def :: RazorPad
def = Sig -> RazorPad
RazorPad Sig
0.5
overtoneInstr :: CsdNote D -> SE Sig2
overtoneInstr :: (D, D) -> SE Sig2
overtoneInstr = Sig -> SE Sig2 -> SE Sig2
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.65 (SE Sig2 -> SE Sig2) -> ((D, D) -> SE Sig2) -> (D, D) -> 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 (SE Sig -> SE Sig2) -> ((D, D) -> SE Sig) -> (D, D) -> SE Sig2
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> (Sig -> Sig) -> SE Sig -> AtOut Sig Sig (SE Sig)
forall a b c. MixAt a b c => Sig -> (a -> b) -> c -> AtOut a b c
mixAt Sig
0.25 (Sig -> Sig -> Sig -> Sig
mlp Sig
1500 Sig
0.1) (SE Sig -> SE Sig) -> ((D, D) -> SE Sig) -> (D, D) -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D -> Sig) -> (D, D) -> SE (CpsInstrOut (D -> Sig))
forall a. CpsInstr a => a -> (D, D) -> SE (CpsInstrOut a)
onCps (\D
cps -> Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> Sig
fades D
0.25 D
1.2) (Int -> Sig -> D -> Sig
tibetan Int
11 Sig
0.012 D
cps) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> Sig
fades D
0.25 D
1) (Int -> Sig -> D -> Sig
tibetan Int
13 Sig
0.015 (D
cps D -> D -> D
forall a. Num a => a -> a -> a
* D
0.5)))
impPwEnsemble :: Sig -> SE Sig
impPwEnsemble :: Sig -> SE Sig
impPwEnsemble Sig
x = Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.3 (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
mlp (Sig
3500 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
x Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
2) Sig
0.1) (SE Sig -> AtOut Sig Sig (SE Sig))
-> SE Sig -> AtOut Sig Sig (SE Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> D -> D -> Sig
leg D
0.5 D
0 D
1 D
1) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ [SE Sig] -> SE Sig
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum
[ Sig -> Sig -> Sig -> Sig -> SE Sig
f Sig
0.2 Sig
0.11 Sig
2 (Sig
x Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
forall a. SigOrD a => a -> a
cent (-Sig
6))
, Sig -> Sig -> Sig -> Sig -> SE Sig
f Sig
0.8 (-Sig
0.1) Sig
1.8 (Sig
x Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
forall a. SigOrD a => a -> a
cent Sig
6)
, Sig -> Sig -> Sig -> Sig -> SE Sig
f Sig
0.2 Sig
0.11 Sig
2 (Sig
x Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.5) ]
where f :: Sig -> Sig -> Sig -> Sig -> SE Sig
f Sig
a Sig
b Sig
c = Sig -> Sig -> SE Sig
rndPw (Sig
a Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
b Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
tri Sig
c)
tibetan :: Int -> Sig -> D -> Sig
tibetan :: Int -> Sig -> D -> Sig
tibetan Int
n Sig
off D
cps = Int -> Sig -> (Sig -> Sig) -> Sig -> Sig
chorusPitch Int
n (Sig
2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
off Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Int -> Sig
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n) (Tab -> Sig -> Sig
oscBy Tab
wave) (D -> Sig
sig D
cps)
where wave :: Tab
wave = BoolD -> Tab -> Tab -> Tab
forall bool. (bool ~ BooleanOf Tab) => bool -> Tab -> Tab -> Tab
forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a
ifB (D
cps D -> D -> BooleanOf D
forall a. OrdB a => a -> a -> BooleanOf a
`lessThan` D
230) (Int -> Tab
waveBy Int
5) (BoolD -> Tab -> Tab -> Tab
forall bool. (bool ~ BooleanOf Tab) => bool -> Tab -> Tab -> Tab
forall a bool. (IfB a, bool ~ BooleanOf a) => bool -> a -> a -> a
ifB (D
cps D -> D -> BooleanOf D
forall a. OrdB a => a -> a -> BooleanOf a
`lessThan` D
350) (Int -> Tab
waveBy Int
3) (Int -> Tab
waveBy Int
1))
waveBy :: Int -> Tab
waveBy Int
x = [Double] -> Tab
sines ([Double] -> Tab) -> [Double] -> Tab
forall a b. (a -> b) -> a -> b
$ [Double
0.3, Double
0, Double
0, Double
0] [Double] -> [Double] -> [Double]
forall a. [a] -> [a] -> [a]
++ Int -> Double -> [Double]
forall a. Int -> a -> [a]
replicate Int
x Double
0.1
impRazorPad :: Sig -> Sig -> Sig -> SE Sig
impRazorPad :: Sig -> Sig -> Sig -> SE Sig
impRazorPad Sig
speed' Sig
amp' Sig
cps' = Sig -> SE Sig
g Sig
cps' SE Sig -> SE Sig -> SE Sig
forall a. Num a => a -> a -> a
+ SE Sig
0.75 SE Sig -> SE Sig -> SE Sig
forall a. Num a => a -> a -> a
* Sig -> SE Sig
g (Sig
cps' Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.5)
where
g :: Sig -> SE Sig
g Sig
cps = Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> D -> D -> Sig
leg D
0.5 D
0 D
1 D
1) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ (Sig -> Sig -> Sig -> Sig) -> Sig -> Sig -> Sig -> SE Sig
forall {b} {t}.
(SigSpace (SE b), Fractional t) =>
(Sig -> t -> Sig -> b) -> Sig -> Sig -> Sig -> SE b
genRazor (Int -> (Sig -> Sig -> Sig -> Sig) -> Sig -> Sig -> Sig -> Sig
filt Int
1 Sig -> Sig -> Sig -> Sig
mlp) Sig
speed' Sig
amp' Sig
cps
genRazor :: (Sig -> t -> Sig -> b) -> Sig -> Sig -> Sig -> SE b
genRazor Sig -> t -> Sig -> b
f Sig
speed Sig
amp Sig
cps = Sig -> SE b -> SE b
forall a. SigSpace a => Sig -> a -> a
mul Sig
amp (SE b -> SE b) -> SE b -> SE b
forall a b. (a -> b) -> a -> b
$ do
Sig
a1 <- Sig -> SE Sig
ampSpline Sig
0.01
Sig
a2 <- Sig -> SE Sig
ampSpline Sig
0.02
b -> SE b
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (b -> SE b) -> b -> SE b
forall a b. (a -> b) -> a -> b
$ Sig -> t -> Sig -> b
f (Sig
1000 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
cps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
500 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
amp) t
0.1 (Sig -> b) -> Sig -> b
forall a b. (a -> b) -> a -> b
$ [Sig] -> Sig
forall a. Fractional a => [a] -> a
mean [
Sig -> Sig -> Sig -> Sig -> Sig
fosc Sig
1 Sig
3 (Sig
a1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
uosc (Sig
speed)) Sig
cps
, Sig -> Sig -> Sig -> Sig -> Sig
fosc Sig
3 Sig
1 (Sig
a2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
uosc (Sig
speed Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
0.2)) Sig
cps
, Sig -> Sig -> Sig -> Sig -> Sig
fosc Sig
1 Sig
7 (Sig
a1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
uosc (Sig
speed Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- Sig
0.15)) Sig
cps ]
where ampSpline :: Sig -> SE Sig
ampSpline Sig
c = Sig -> Sig -> Sig -> Sig -> SE Sig
rspline ( Sig
amp) (Sig
3.5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
amp) ((Sig
speed Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
4) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig
c Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- Sig
0.1)) ((Sig
speed Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
4) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig
c Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
0.1))
impNightPad :: D -> Sig -> Sig
impNightPad :: D -> Sig -> Sig
impNightPad D
dt = (D -> Sig
fadeIn D
dt Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* ) (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig
stringPad Sig
1
stringPad :: Sig -> Sig -> Sig
stringPad :: Sig -> Sig -> Sig
stringPad Sig
amp Sig
cps = Sig -> Sig -> Sig
blp (Sig
900 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
amp Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
300) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Int -> Sig -> (Sig -> Sig) -> Sig -> Sig
chorusPitch Int
3 Sig
0.1 Sig -> Sig
f Sig
cps
where f :: Sig -> Sig
f Sig
x = Sig -> Sig -> Tab -> Sig
poscil Sig
1 Sig
x Tab
giwave
giwave :: Tab
giwave :: Tab
giwave = [Double] -> Tab
sines [Double
1, Double
0.5, Double
0.33, Double
0.25, Double
0.0, Double
0.1, Double
0.1, Double
0.1]
fx1 :: Sig -> (a -> a) -> [GenFxSpec a]
fx1 :: forall a. Sig -> (a -> a) -> [GenFxSpec a]
fx1 Sig
dw a -> a
f = [FxSpec a -> GenFxSpec a
forall a. a -> ReaderT (Sig -> Sig -> Sig -> Sig) Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (FxSpec a -> GenFxSpec a) -> FxSpec a -> GenFxSpec a
forall a b. (a -> b) -> a -> b
$ Sig -> Fx a -> FxSpec a
forall a. Sig -> Fx a -> FxSpec a
FxSpec Sig
dw (Fx a
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return Fx a -> (a -> a) -> Fx a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> a
f)]
magicCave2 :: Sig2 -> Sig2
magicCave2 :: Sig2 -> Sig2
magicCave2 = Sig -> Sig2 -> Sig2
rever2 Sig
0.99
rever2 :: Feedback -> Sig2 -> Sig2
rever2 :: Sig -> Sig2 -> Sig2
rever2 Sig
fbk (Sig
a1, Sig
a2) = (Sig
a1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
wa1, Sig
a2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
wa2)
where (Sig
wa1, Sig
wa2) = Sig -> Sig -> Sig -> Sig -> Sig2
reverbsc Sig
a1 Sig
a2 Sig
fbk Sig
12000
type Feedback = Sig
wshaper :: Tab -> Sig -> Sig -> Sig
wshaper :: Tab -> Sig -> Sig -> Sig
wshaper Tab
t Sig
amt Sig
asig = Sig -> Tab -> Sig
forall a. SigOrD a => a -> Tab -> a
tablei (Sig
10 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
amt Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
asig Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
20) Tab
t Sig -> [D] -> Sig
forall a. Tuple a => a -> [D] -> a
`withDs` [D
1, D
0.5]
genSaturator :: Double -> Sig -> Sig -> Sig
genSaturator :: Double -> Sig -> Sig -> Sig
genSaturator Double
rad Sig
amt = Tab -> Sig -> Sig -> Sig
wshaper (Double -> Tab
tanhSigmoid Double
rad) Sig
amt
mildSaturator :: Sig -> Sig -> Sig
mildSaturator :: Sig -> Sig -> Sig
mildSaturator = Double -> Sig -> Sig -> Sig
genSaturator Double
1
saturator :: Sig -> Sig -> Sig
saturator :: Sig -> Sig -> Sig
saturator = Double -> Sig -> Sig -> Sig
genSaturator Double
1.5
hardSaturator :: Sig -> Sig -> Sig
hardSaturator :: Sig -> Sig -> Sig
hardSaturator = Double -> Sig -> Sig -> Sig
genSaturator Double
3.5
hardSaturator2 :: Sig -> Sig -> Sig
hardSaturator2 :: Sig -> Sig -> Sig
hardSaturator2 = Double -> Sig -> Sig -> Sig
genSaturator Double
6.5
attackTrig :: Sig -> Sig -> SE (Evt Unit)
attackTrig :: Sig -> Sig -> SE Tick
attackTrig Sig
thresh Sig
ain = (Sig -> Tick) -> SE Sig -> SE Tick
forall a b. (a -> b) -> SE a -> SE b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> Tick
sigToEvt (SE Sig -> SE Tick) -> SE Sig -> SE Tick
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> SE Sig
attackTrigSig Sig
thresh Sig
ain
attackTrigSig :: Sig -> Sig -> SE Sig
attackTrigSig :: Sig -> Sig -> SE Sig
attackTrigSig Sig
thresh Sig
a = do
Ref Sig
kTime <- Sig -> SE (Ref Sig)
forall a. Tuple a => a -> SE (Ref a)
newCtrlRef (Sig
iWait Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
1)
Ref Sig
kTrig <- Sig -> SE (Ref Sig)
forall a. Tuple a => a -> SE (Ref a)
newCtrlRef Sig
0
Ref Sig -> Sig -> SE ()
forall a. Tuple a => Ref a -> a -> SE ()
writeRef Ref Sig
kTrig Sig
0
Sig
timeVal <- Ref Sig -> SE Sig
forall a. Tuple a => Ref a -> SE a
readRef Ref Sig
kTime
BoolSig -> SE () -> SE ()
when1 (Sig
da Sig -> Sig -> BoolSig
forall bool. (bool ~ BooleanOf Sig) => Sig -> Sig -> bool
forall a bool. (OrdB a, bool ~ BooleanOf a) => a -> a -> bool
>* Sig
thresh BoolSig -> BoolSig -> BoolSig
forall b. Boolean b => b -> b -> b
&&* Sig
timeVal Sig -> Sig -> BoolSig
forall bool. (bool ~ BooleanOf Sig) => Sig -> Sig -> bool
forall a bool. (OrdB a, bool ~ BooleanOf a) => a -> a -> bool
>* Sig
iWait) (SE () -> SE ()) -> SE () -> SE ()
forall a b. (a -> b) -> a -> b
$ do
D -> Sig -> SE ()
printk D
0 Sig
timeVal
Ref Sig -> Sig -> SE ()
forall a. Tuple a => Ref a -> a -> SE ()
writeRef Ref Sig
kTrig Sig
1
Ref Sig -> Sig -> SE ()
forall a. Tuple a => Ref a -> a -> SE ()
writeRef Ref Sig
kTime Sig
0
Ref Sig -> (Sig -> Sig) -> SE ()
forall a. Tuple a => Ref a -> (a -> a) -> SE ()
modifyRef Ref Sig
kTime (Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+Sig
1)
Ref Sig -> SE Sig
forall a. Tuple a => Ref a -> SE a
readRef Ref Sig
kTrig
where
da :: Sig
da = D -> Sig -> Sig
diffSig D
0.01 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig
rms Sig
a
iWait :: Sig
iWait :: Sig
iWait = Sig
100
diffSig :: D -> Sig -> Sig
diffSig :: D -> Sig -> Sig
diffSig D
dt Sig
x = Sig
x Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- D -> Sig -> Sig
delaySig D
dt Sig
x
ambiEnv :: Sig -> Sig -> SE Sig
ambiEnv :: Sig -> Sig -> SE Sig
ambiEnv Sig
thresh Sig
ain = do
Sig
attacks <- Sig -> Sig -> SE Sig
attackTrigSig Sig
thresh Sig
ain
Sig -> SE Sig
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig -> SE Sig) -> Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ D -> Sig -> Sig
delaySig D
0.1 (Sig -> Sig
env Sig
attacks) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
ain
where
env :: Sig -> Sig
env Sig
tr = Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig
adsr140 (Sig -> Sig
rms Sig
ain Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- Sig
0.05) Sig
tr Sig
4 Sig
1 Sig
1 Sig
3