module Csound.Catalog.Drum.Tr808(
TrSpec(..),
bass, bass2, snare, openHiHat, closedHiHat,
lowTom, midTom, highTom, cymbal, claves, rimShot,
maraca, highConga, midConga, lowConga, cowbell,
bass', bass2', bdSpec, bdSpec2, snare', snSpec, openHiHat', ohSpec, closedHiHat', chSpec,
lowTom', ltSpec, midTom', mtSpec, highTom', htSpec, cymbal', cymSpec, claves', clSpec, rimShot', rimSpec,
maraca', marSpec, highConga', hcSpec, midConga', mcSpec, lowConga', lcSpec, cowSpec, cowbell',
bd, bd2, sn1, ohh, chh, htom, mtom, ltom, cym, cl, rim, mar, hcon, mcon, lcon, cbell,
bd', bd2', sn1', ohh', chh', htom', mtom', ltom', cym', cl', rim', mar', hcon', mcon', lcon', cbell'
) where
import Control.Monad
import Csound.Base hiding (dur)
import Csound.Sam
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 (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)
data TrSpec = TrSpec {
TrSpec -> D
trDur :: D
, TrSpec -> D
trTune :: D
, TrSpec -> D
trCps :: D
, TrSpec -> Maybe D
trRnd :: Maybe D
}
cpsSpec :: D -> TrSpec
cpsSpec :: D -> TrSpec
cpsSpec D
cps = TrSpec :: D -> D -> D -> Maybe D -> TrSpec
TrSpec
{ trDur :: D
trDur = D
0.8
, trTune :: D
trTune = D
0
, trCps :: D
trCps = D
cps
, trRnd :: Maybe D
trRnd = D -> Maybe D
forall a. a -> Maybe a
Just D
0.085 }
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 (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 (m :: * -> *) a. Monad m => a -> m a
return (TrSpec -> SE TrSpec) -> TrSpec -> SE TrSpec
forall a b. (a -> b) -> a -> b
$ TrSpec
spec
{ trDur :: D
trDur = D
dur
, trTune :: D
trTune = D
tune
, trCps :: D
trCps = D
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 (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 (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 (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
bdSpec :: TrSpec
bdSpec :: TrSpec
bdSpec = TrSpec :: D -> D -> D -> Maybe D -> TrSpec
TrSpec
{ trDur :: D
trDur = D
0.95
, trTune :: D
trTune = D
1
, trCps :: D
trCps = D
55
, trRnd :: Maybe D
trRnd = D -> Maybe D
forall a. a -> Maybe a
Just D
0.05 }
addDur' :: D -> a -> SE a
addDur' :: D -> a -> SE a
addDur' D
dt a
x = D -> SE ()
xtratim D
dt SE () -> SE a -> SE a
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return a
x
addDur :: a -> SE a
addDur :: a -> SE a
addDur = D -> a -> SE a
forall a. D -> a -> SE a
addDur' D
0.1
bass :: SE Sig
bass :: SE Sig
bass = TrSpec -> SE Sig
bass' TrSpec
bdSpec
bass' :: TrSpec -> SE Sig
bass' :: TrSpec -> SE Sig
bass' TrSpec
spec = TrSpec -> SE Sig
pureBass' (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
pureBass' :: TrSpec -> SE Sig
pureBass' :: TrSpec -> SE Sig
pureBass' 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
forall a. a -> SE a
addDur Sig
amix
where
dur :: D
dur = TrSpec -> D
trDur TrSpec
spec
cps :: D
cps = TrSpec -> D
trCps TrSpec
spec
kmul :: Sig
kmul = [D] -> D -> D -> D -> Sig
transegr [D
0.2, D
dur D -> D -> D
forall a. Num a => a -> a -> a
* D
0.5, -D
15, D
0.01, D
dur D -> D -> D
forall a. Num a => a -> a -> a
* D
0.5, D
0, D
0] D
dur D
0 D
0
kbend :: Sig
kbend = [D] -> D -> D -> D -> Sig
transegr [D
0.5, D
1.2, -D
4, D
0, D
1, D
0, D
0] D
dur D
0 D
0
asig :: Sig
asig = Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Sig
gbuzz Sig
0.5 (D -> Sig
sig D
cps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
forall a. SigOrD a => a -> a
semitone Sig
kbend) Sig
20 Sig
1 Sig
kmul Tab
cosine
aenv :: Sig
aenv = [D] -> Sig
transeg [D
1, D
dur D -> D -> D
forall a. Num a => a -> a -> a
- D
0.004, -D
6, D
0]
att :: Sig
att = [D] -> Sig
linseg [D
0, D
0.004, D
1]
asig1 :: Sig
asig1 = Sig
asig Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
aenv Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
att
aenv1 :: Sig
aenv1 = [D] -> Sig
linseg [D
1, D
0.07, D
0]
acps :: Sig
acps = [D] -> Sig
expsega [D
8 D -> D -> D
forall a. Num a => a -> a -> a
* D
cps,D
0.07,D
0.001]
aimp :: Sig
aimp = Sig -> Sig -> Tab -> Sig
oscili Sig
aenv1 Sig
acps Tab
sine
amix :: Sig
amix = Sig
asig1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.7 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
aimp Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.25
bdSpec2 :: TrSpec
bdSpec2 :: TrSpec
bdSpec2 = TrSpec :: D -> D -> D -> Maybe D -> TrSpec
TrSpec
{ trDur :: D
trDur = D
1.3
, trTune :: D
trTune = D
1
, trCps :: D
trCps = D
57
, trRnd :: Maybe D
trRnd = D -> Maybe D
forall a. a -> Maybe a
Just D
0.05 }
bass2 :: SE Sig
bass2 :: SE Sig
bass2 = TrSpec -> SE Sig
bass2' TrSpec
bdSpec2
bass2' :: TrSpec -> SE Sig
bass2' :: TrSpec -> SE Sig
bass2' TrSpec
spec = TrSpec -> SE Sig
pureBass2' (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
pureBass2' :: TrSpec -> SE Sig
pureBass2' :: TrSpec -> SE Sig
pureBass2' TrSpec
spec = (Sig -> SE Sig
rndAmp (Sig -> SE Sig) -> (Sig -> SE Sig) -> Sig -> SE Sig
forall (m :: * -> *) b c a.
Monad m =>
(b -> m c) -> (a -> m b) -> a -> m c
<=< Sig -> SE Sig
forall a. a -> SE a
addDur) (Sig -> SE Sig) -> Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig
compr (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul ([D] -> D -> D -> Sig
expsegr [D
1, D
0.6 D -> D -> D
forall a. Num a => a -> a -> a
* D
dur, D
0.1, D
0.4 D -> D -> D
forall a. Num a => a -> a -> a
* D
dur, D
0.001] (D
0.4 D -> D -> D
forall a. Num a => a -> a -> a
* D
dur) D
0.001) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$
Sig -> Sig -> Sig -> Sig -> Sig
fosc Sig
1 Sig
2 (Sig
0.5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> D -> D -> Sig
xeg D
0.01 D
0.1 D
0.2 D
0.5) (Sig
cps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
forall a. SigOrD a => a -> a
semitone ([D] -> Sig
expseg [D
12, D
0.01, D
27, D
0.3, D
0.001]))
where
compr :: Sig -> Sig
compr Sig
x = Sig -> Sig -> D -> D -> D -> D -> Sig
dam Sig
x Sig
0.65 D
2.4 D
2.3 D
0.05 D
0.1
dur :: D
dur = TrSpec -> D
trDur TrSpec
spec
cps :: Sig
cps = D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ TrSpec -> D
trCps TrSpec
spec
snSpec :: TrSpec
snSpec :: TrSpec
snSpec = D -> TrSpec
cpsSpec D
342
snare :: SE Sig
snare :: SE Sig
snare = TrSpec -> SE Sig
snare' TrSpec
snSpec
snare' :: TrSpec -> SE Sig
snare' :: TrSpec -> SE Sig
snare' TrSpec
spec = TrSpec -> SE Sig
pureSnare' (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
pureSnare' :: TrSpec -> SE Sig
pureSnare' :: TrSpec -> SE Sig
pureSnare' 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
forall a. a -> SE a
addDur (Sig -> SE Sig) -> SE Sig -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< (SE Sig
apitch 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
iNseDur :: D
iNseDur = D
dur D -> D -> D
forall a. Num a => a -> a -> a
* D
0.3
iPchDur :: D
iPchDur = D
dur D -> D -> D
forall a. Num a => a -> a -> a
* D
0.1
aenv1 :: Sig
aenv1 = [D] -> D -> D -> Sig
expsegr [D
1, D
iPchDur, D
0.0001] D
iNseDur D
0.0001
apitch1 :: SE Sig
apitch1 = Sig -> SE Sig
rndOsc (D -> Sig
sig D
cps)
apitch2 :: SE Sig
apitch2 = Sig -> SE Sig
rndOsc (Sig
0.5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
sig D
cps)
apitch :: SE Sig
apitch = Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.75 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
aenv1) (SE Sig
apitch1 SE Sig -> SE Sig -> SE Sig
forall a. Num a => a -> a -> a
+ SE Sig
apitch2)
aenv2 :: Sig
aenv2 = D -> D -> D -> Sig
expon D
1 D
iNseDur D
0.0005
kcf :: Sig
kcf = [D] -> D -> D -> Sig
expsegr [D
5000, D
0.1, D
3000] D
iNseDur D
0.0001
anoise :: SE Sig
anoise = Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
aenv2 (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ do
Sig
x <- Sig -> Sig -> SE Sig
noise Sig
0.75 Sig
0
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
blp Sig
kcf (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
bhp Sig
1000 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig
bbp (Sig
10000 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
forall a. SigOrD a => a -> a
octave (D -> Sig
sig D
tune)) Sig
10000 Sig
x
ohSpec, chSpec :: TrSpec
ohSpec :: TrSpec
ohSpec = D -> TrSpec
cpsSpec D
296
chSpec :: TrSpec
chSpec = D -> TrSpec
cpsSpec D
296
openHiHat, closedHiHat :: SE Sig
openHiHat :: SE Sig
openHiHat = TrSpec -> SE Sig
openHiHat' TrSpec
ohSpec
closedHiHat :: SE Sig
closedHiHat = TrSpec -> SE Sig
closedHiHat' TrSpec
chSpec
openHiHat' :: TrSpec -> SE Sig
openHiHat' :: TrSpec -> SE Sig
openHiHat' TrSpec
spec = Sig -> TrSpec -> SE Sig
genHiHat ([D] -> D -> D -> Sig
linsegr [D
1, (D
durD -> D -> D
forall a. Fractional a => a -> a -> a
/D
2) D -> D -> D
forall a. Num a => a -> a -> a
- D
0.05, D
0.1, D
0.05, D
0] D
dur D
0) TrSpec
spec
where dur :: D
dur = TrSpec -> D
trDur TrSpec
spec
closedHiHat' :: TrSpec -> SE Sig
closedHiHat' :: TrSpec -> SE Sig
closedHiHat' TrSpec
spec = Sig -> TrSpec -> SE Sig
genHiHat ([D] -> Sig
expsega [D
1, (D
dur D -> D -> D
forall a. Fractional a => a -> a -> a
/ D
2), D
0.001]) TrSpec
spec
where dur :: D
dur = TrSpec -> D
trDur TrSpec
spec
genHiHat :: Sig -> TrSpec -> SE Sig
genHiHat :: Sig -> TrSpec -> SE Sig
genHiHat Sig
pitchedEnv 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
forall a. a -> SE a
addDur (Sig -> SE Sig) -> SE Sig -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< (SE Sig
amix1 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
halfDur :: D
halfDur = D
dur D -> D -> D
forall a. Num a => a -> a -> a
* D
0.5
harmonics :: [D]
harmonics = [D
1.0, D
0.962, D
1.233, D
1.175,D
1.419, D
2.821]
amix :: SE Sig
amix = Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.5 (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ ([Sig] -> Sig) -> SE [Sig] -> SE Sig
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [Sig] -> Sig
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum (SE [Sig] -> SE Sig) -> SE [Sig] -> SE Sig
forall a b. (a -> b) -> a -> b
$ (D -> SE Sig) -> [D] -> SE [Sig]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (Sig -> Sig -> SE Sig
rndPw Sig
0.25 (Sig -> SE Sig) -> (D -> Sig) -> D -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> Sig
sig (D -> Sig) -> (D -> D) -> D -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D -> D -> D
forall a. Num a => a -> a -> a
* (D
cps D -> D -> D
forall a. Num a => a -> a -> a
* D -> D
forall a. SigOrD a => a -> a
octave D
tune))) [D]
harmonics
amix1 :: SE Sig
amix1 = Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
pitchedEnv (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
asig -> Sig -> Sig -> Sig
bhp Sig
5000 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
bhp Sig
5000 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig
reson Sig
asig (Sig
5000 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
forall a. SigOrD a => a -> a
octave (D -> Sig
sig D
tune)) Sig
5000 Sig -> D -> Sig
forall a. Tuple a => a -> D -> a
`withD` D
1) SE Sig
amix
kcf :: Sig
kcf = [D] -> Sig
expseg [D
20000, D
0.7, D
9000, D
halfDurD -> D -> D
forall a. Num a => a -> a -> a
-D
0.1, D
9000]
anoise :: SE Sig
anoise = Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
pitchedEnv (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ do
Sig
x <- Sig -> Sig -> SE Sig
noise Sig
0.8 Sig
0
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
bhp Sig
8000 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
blp Sig
kcf Sig
x
htSpec, mtSpec, ltSpec :: TrSpec
htSpec :: TrSpec
htSpec = D -> TrSpec
cpsSpec D
200
mtSpec :: TrSpec
mtSpec = D -> TrSpec
cpsSpec D
133
ltSpec :: TrSpec
ltSpec = D -> TrSpec
cpsSpec D
90
lowTom, midTom, highTom :: SE Sig
lowTom :: SE Sig
lowTom = TrSpec -> SE Sig
lowTom' TrSpec
ltSpec
midTom :: SE Sig
midTom = TrSpec -> SE Sig
midTom' TrSpec
mtSpec
highTom :: SE Sig
highTom = TrSpec -> SE Sig
highTom' TrSpec
htSpec
highTom' :: TrSpec -> SE Sig
highTom' :: TrSpec -> SE Sig
highTom' = D -> (Sig, Sig, Sig) -> TrSpec -> SE Sig
genTom D
0.5 (Sig
400, Sig
100, Sig
1000)
midTom' :: TrSpec -> SE Sig
midTom' :: TrSpec -> SE Sig
midTom' = D -> (Sig, Sig, Sig) -> TrSpec -> SE Sig
genTom D
0.6 (Sig
400, Sig
100, Sig
600)
lowTom' :: TrSpec -> SE Sig
lowTom' :: TrSpec -> SE Sig
lowTom' = D -> (Sig, Sig, Sig) -> TrSpec -> SE Sig
genTom D
0.6 (Sig
40, Sig
100, Sig
600)
genTom :: D -> (Sig, Sig, Sig) -> TrSpec -> SE Sig
genTom :: D -> (Sig, Sig, Sig) -> TrSpec -> SE Sig
genTom D
durDt (Sig
resonCf, Sig
hpCf, Sig
lpCf) 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
forall a. a -> SE a
addDur (Sig -> SE Sig) -> SE Sig -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< (SE Sig
asig 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
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
halfDur :: D
halfDur = D
durDt D -> D -> D
forall a. Num a => a -> a -> a
* D
dur
aAmpEnv :: Sig
aAmpEnv = D -> Sig
fadeIn D
0.04 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* [D] -> Sig
transeg [D
1, D
halfDur, -D
10, D
0.001]
afmod :: Sig
afmod = [D] -> Sig
expsega [D
5, D
0.125D -> 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
aAmpEnv) (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)
aEnvNse :: Sig
aEnvNse = [D] -> Sig
transeg [D
1, D
halfDur, -D
6 , D
0.001]
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
anoise :: SE Sig
anoise = Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
aEnvNse (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ do
Sig
x <- Sig -> Sig -> SE Sig
noise Sig
1 Sig
0.4
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
blp (Sig
lpCf Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
otune) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
bhp (Sig
hpCf Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
otune) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig
reson Sig
x (Sig
resonCf Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
otune) Sig
800 Sig -> D -> Sig
forall a. Tuple a => a -> D -> a
`withD` D
1
cymSpec :: TrSpec
cymSpec :: TrSpec
cymSpec = D -> TrSpec
cpsSpec D
296
cymbal :: SE Sig
cymbal :: SE Sig
cymbal = TrSpec -> SE Sig
cymbal' TrSpec
cymSpec
cymbal' :: TrSpec -> SE Sig
cymbal' :: TrSpec -> SE Sig
cymbal' 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
forall a. a -> SE a
addDur (Sig -> SE Sig) -> SE Sig -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< ((Sig -> Sig) -> SE Sig -> SE Sig
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sig
amix1 Sig -> Sig -> 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
dur D -> D -> D
forall a. Num a => a -> a -> a
* D
2
harmonics :: [D]
harmonics = [D
1.0, D
0.962, D
1.233, D
1.175,D
1.419, D
2.821]
aenv :: Sig
aenv = D -> D -> D -> Sig
expon D
1 D
fullDur D
0.0001
amix :: Sig
amix = 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
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum ([Sig] -> Sig) -> [Sig] -> Sig
forall a b. (a -> b) -> a -> b
$ (D -> Sig) -> [D] -> [Sig]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sig -> Sig -> Sig
pw Sig
0.25 (Sig -> Sig) -> (D -> Sig) -> D -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> Sig
sig (D -> Sig) -> (D -> D) -> D -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D -> D -> D
forall a. Num a => a -> a -> a
* (D
cps D -> D -> D
forall a. Num a => a -> a -> a
* D -> D
forall a. SigOrD a => a -> a
octave D
tune))) [D]
harmonics
amix1 :: Sig
amix1 = Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
aenv (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
blp Sig
12000 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
blp Sig
12000 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
bhp Sig
10000 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig
reson Sig
amix (Sig
5000 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
forall a. SigOrD a => a -> a
octave (D -> Sig
sig D
tune)) Sig
5000 Sig -> D -> Sig
forall a. Tuple a => a -> D -> a
`withD` D
1
aenv2 :: Sig
aenv2 = [D] -> Sig
expsega [D
1,D
0.3,D
0.07,D
fullDurD -> D -> D
forall a. Num a => a -> a -> a
-D
0.1,D
0.00001]
kcf :: Sig
kcf = [D] -> Sig
expseg [D
14000, D
0.7, D
7000, D
fullDurD -> D -> D
forall a. Num a => a -> a -> a
-D
0.1, D
5000]
anoise :: SE Sig
anoise = Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
aenv2 (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ do
Sig
x <- Sig -> Sig -> SE Sig
noise Sig
0.8 Sig
0
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
bhp Sig
8000 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
blp Sig
kcf Sig
x
clSpec :: TrSpec
clSpec :: TrSpec
clSpec = D -> TrSpec
cpsSpec D
2500
claves :: SE Sig
claves :: SE Sig
claves = TrSpec -> SE Sig
claves' TrSpec
clSpec
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
forall a. a -> SE a
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)
rimSpec :: TrSpec
rimSpec :: TrSpec
rimSpec = D -> TrSpec
cpsSpec D
1700
rimShot :: SE Sig
rimShot :: SE Sig
rimShot = TrSpec -> SE Sig
rimShot' TrSpec
rimSpec
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
forall a. a -> SE a
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 (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
$ [PartialStrength] -> Tab
sines [PartialStrength
0.971,PartialStrength
0.269,PartialStrength
0.041,PartialStrength
0.054,PartialStrength
0.011,PartialStrength
0.013,PartialStrength
0.08,PartialStrength
0.0065,PartialStrength
0.005,PartialStrength
0.004,PartialStrength
0.003,PartialStrength
0.003,PartialStrength
0.002,PartialStrength
0.002,PartialStrength
0.002,PartialStrength
0.002,PartialStrength
0.002,PartialStrength
0.001,PartialStrength
0.001,PartialStrength
0.001,PartialStrength
0.001,PartialStrength
0.001,PartialStrength
0.002,PartialStrength
0.001,PartialStrength
0.001]
cowSpec :: TrSpec
cowSpec :: TrSpec
cowSpec = D -> TrSpec
cpsSpec D
562
cowbell :: SE Sig
cowbell :: SE Sig
cowbell = TrSpec -> SE Sig
cowbell' TrSpec
cowSpec
cowbell' :: TrSpec -> SE Sig
cowbell' :: TrSpec -> SE Sig
cowbell' 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
forall a. a -> SE a
addDur (Sig -> SE Sig) -> SE Sig -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< SE Sig
ares
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
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
ifrq2 :: Sig
ifrq2 = Sig
1.5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
ifrq1
fullDur :: D
fullDur = D
0.7 D -> D -> D
forall a. Num a => a -> a -> a
* D
dur
ishape :: D
ishape = -D
30
kenv1 :: Sig
kenv1 = [D] -> Sig
transeg [D
1,D
fullDurD -> D -> D
forall a. Num a => a -> a -> a
*D
0.3,D
ishape,D
0.2, D
fullDurD -> D -> D
forall a. Num a => a -> a -> a
*D
0.7,D
ishape,D
0.2]
kenv2 :: Sig
kenv2 = D -> D -> D -> Sig
expon D
1 D
fullDur D
0.0005
kenv :: Sig
kenv = Sig
kenv1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
kenv2
amix :: SE Sig
amix = Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.65 (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> SE Sig
rndPw Sig
0.5 Sig
ifrq1 SE Sig -> SE Sig -> SE Sig
forall a. Num a => a -> a -> a
+ Sig -> Sig -> SE Sig
rndPw Sig
0.5 Sig
ifrq2
iLPF2 :: D
iLPF2 = D
10000
kcf :: Sig
kcf = [D] -> Sig
expseg [D
12000,D
0.07,D
iLPF2,D
1,D
iLPF2]
alpf :: AtOut Sig Sig (SE Sig)
alpf = (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
blp Sig
kcf) SE Sig
amix
abpf :: AtOut Sig Sig (SE Sig)
abpf = (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
x -> Sig -> Sig -> Sig -> Sig
reson Sig
x Sig
ifrq2 Sig
25) SE Sig
amix
ares :: SE Sig
ares = Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.08 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
kenv) (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
dcblock2 (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 (Sig
0.06 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
kenv1) SE Sig
abpf 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.5 SE Sig
alpf 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.9 SE Sig
amix
marSpec :: TrSpec
marSpec :: TrSpec
marSpec = D -> TrSpec
cpsSpec D
450
maraca :: SE Sig
maraca :: SE Sig
maraca = TrSpec -> SE Sig
maraca' TrSpec
marSpec
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
forall a. a -> SE a
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 (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
hcSpec, mcSpec, lcSpec :: TrSpec
hcSpec :: TrSpec
hcSpec = D -> TrSpec
cpsSpec D
420
mcSpec :: TrSpec
mcSpec = D -> TrSpec
cpsSpec D
310
lcSpec :: TrSpec
lcSpec = D -> TrSpec
cpsSpec D
227
highConga, midConga, lowConga :: SE Sig
highConga :: SE Sig
highConga = TrSpec -> SE Sig
highConga' TrSpec
hcSpec
midConga :: SE Sig
midConga = TrSpec -> SE Sig
midConga' TrSpec
mcSpec
lowConga :: SE Sig
lowConga = TrSpec -> SE Sig
lowConga' TrSpec
lcSpec
highConga' :: TrSpec -> SE Sig
highConga' :: TrSpec -> SE Sig
highConga' = D -> TrSpec -> SE Sig
genConga D
0.22
midConga' :: TrSpec -> SE Sig
midConga' :: TrSpec -> SE Sig
midConga' = D -> TrSpec -> SE Sig
genConga D
0.33
lowConga' :: TrSpec -> SE Sig
lowConga' :: TrSpec -> SE Sig
lowConga' = D -> TrSpec -> SE Sig
genConga D
0.41
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
forall a. a -> SE a
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)
mkSam :: SE Sig -> Sam
mkSam :: SE Sig -> Sam
mkSam = Sig -> SE Sig -> Sam
forall a. ToSam a => Sig -> a -> Sam
limSam Sig
4
bd :: Sam
bd :: Sam
bd = SE Sig -> Sam
mkSam SE Sig
bass
bd2 :: Sam
bd2 :: Sam
bd2 = SE Sig -> Sam
mkSam SE Sig
bass2
sn1 :: Sam
sn1 :: Sam
sn1 = SE Sig -> Sam
mkSam SE Sig
snare
ohh :: Sam
ohh :: Sam
ohh = Sig -> SE Sig -> Sam
forall a. ToSam a => Sig -> a -> Sam
limSam Sig
8 SE Sig
openHiHat
chh :: Sam
chh :: Sam
chh = SE Sig -> Sam
mkSam SE Sig
closedHiHat
htom :: Sam
htom :: Sam
htom = SE Sig -> Sam
mkSam SE Sig
highTom
mtom :: Sam
mtom :: Sam
mtom = SE Sig -> Sam
mkSam SE Sig
midTom
ltom :: Sam
ltom :: Sam
ltom = SE Sig -> Sam
mkSam SE Sig
lowTom
cym :: Sam
cym :: Sam
cym = Sig -> SE Sig -> Sam
forall a. ToSam a => Sig -> a -> Sam
limSam Sig
8 SE Sig
cymbal
cl :: Sam
cl :: Sam
cl = SE Sig -> Sam
mkSam SE Sig
claves
rim :: Sam
rim :: Sam
rim = SE Sig -> Sam
mkSam SE Sig
rimShot
mar :: Sam
mar :: Sam
mar = SE Sig -> Sam
mkSam SE Sig
maraca
hcon :: Sam
hcon :: Sam
hcon = SE Sig -> Sam
mkSam SE Sig
highConga
mcon :: Sam
mcon :: Sam
mcon = SE Sig -> Sam
mkSam SE Sig
midConga
lcon :: Sam
lcon :: Sam
lcon = SE Sig -> Sam
mkSam SE Sig
lowConga
cbell :: Sam
cbell :: Sam
cbell = SE Sig -> Sam
mkSam SE Sig
cowbell
mkSam' :: (t -> SE Sig) -> t -> Sam
mkSam' :: (t -> SE Sig) -> t -> Sam
mkSam' t -> SE Sig
f t
spec = SE Sig -> Sam
mkSam (SE Sig -> Sam) -> SE Sig -> Sam
forall a b. (a -> b) -> a -> b
$ t -> SE Sig
f t
spec
bd' :: TrSpec -> Sam
bd' :: TrSpec -> Sam
bd' = (TrSpec -> SE Sig) -> TrSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' TrSpec -> SE Sig
bass'
bd2' :: TrSpec -> Sam
bd2' :: TrSpec -> Sam
bd2' = (TrSpec -> SE Sig) -> TrSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' TrSpec -> SE Sig
bass2'
sn1' :: TrSpec -> Sam
sn1' :: TrSpec -> Sam
sn1' = (TrSpec -> SE Sig) -> TrSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' TrSpec -> SE Sig
snare'
ohh' :: TrSpec -> Sam
ohh' :: TrSpec -> Sam
ohh' = (TrSpec -> SE Sig) -> TrSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' TrSpec -> SE Sig
openHiHat'
chh' :: TrSpec -> Sam
chh' :: TrSpec -> Sam
chh' = (TrSpec -> SE Sig) -> TrSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' TrSpec -> SE Sig
closedHiHat'
htom' :: TrSpec -> Sam
htom' :: TrSpec -> Sam
htom' = (TrSpec -> SE Sig) -> TrSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' TrSpec -> SE Sig
highTom'
mtom' :: TrSpec -> Sam
mtom' :: TrSpec -> Sam
mtom' = (TrSpec -> SE Sig) -> TrSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' TrSpec -> SE Sig
midTom'
ltom' :: TrSpec -> Sam
ltom' :: TrSpec -> Sam
ltom' = (TrSpec -> SE Sig) -> TrSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' TrSpec -> SE Sig
lowTom'
cym' :: TrSpec -> Sam
cym' :: TrSpec -> Sam
cym' = (TrSpec -> SE Sig) -> TrSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' TrSpec -> SE Sig
cymbal'
cl' :: TrSpec -> Sam
cl' :: TrSpec -> Sam
cl' = (TrSpec -> SE Sig) -> TrSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' TrSpec -> SE Sig
claves'
rim' :: TrSpec -> Sam
rim' :: TrSpec -> Sam
rim' = (TrSpec -> SE Sig) -> TrSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' TrSpec -> SE Sig
rimShot'
mar' :: TrSpec -> Sam
mar' :: TrSpec -> Sam
mar' = (TrSpec -> SE Sig) -> TrSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' TrSpec -> SE Sig
maraca'
hcon' :: TrSpec -> Sam
hcon' :: TrSpec -> Sam
hcon' = (TrSpec -> SE Sig) -> TrSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' TrSpec -> SE Sig
highConga'
mcon' :: TrSpec -> Sam
mcon' :: TrSpec -> Sam
mcon' = (TrSpec -> SE Sig) -> TrSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' TrSpec -> SE Sig
midConga'
lcon' :: TrSpec -> Sam
lcon' :: TrSpec -> Sam
lcon' = (TrSpec -> SE Sig) -> TrSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' TrSpec -> SE Sig
lowConga'
cbell' :: TrSpec -> Sam
cbell' :: TrSpec -> Sam
cbell' = (TrSpec -> SE Sig) -> TrSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' TrSpec -> SE Sig
cowbell'