-- |  Drums of the Korg Mini Pops 7 drum machine (recoded from  Iain McCurdy).
module Csound.Catalog.Drum.MiniPops(
  MpSpec(..),

  bass, snare1, snare2, rimShot, cymbal1, cymbal2, bongo1, bongo2, bongo3,
  claves, cowbell, guiro, maracas, quijada, tamb,

  -- * Generic
  bass', bdSpec, snare1', snSpec1, snare2', snSpec2, rimShot', rimSpec,
  cymbal1', cymSpec1, cymbal2', cymSpec2, bongo1', bonSpec1, bongo2', bonSpec2, bongo3', bonSpec3,
  claves', clSpec, cowbell', cowSpec, guiro', groSpec, maracas', marSpec, quijada', qjSpec, tamb', tamSpec,

  -- * Sample
  bd, sn1, sn2, rim, cym1, cym2, bon1, bon2, bon3, cl, cow, gro, mar, qj, tam,

  -- ** Generic
  bd', sn1', sn2', rim', cym1', cym2', bon1', bon2', bon3', cl', cow', gro', mar', qj', tam'
) where

import Csound.Base hiding (guiro, dur)
import Csound.Sam

data MpSpec = MpSpec {
    MpSpec -> D
mpDur   :: D
  , MpSpec -> D
mpCps   :: D
  , MpSpec -> Maybe D
mpRnd     :: 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 (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)

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

toDrum :: Sig -> SE Sig
toDrum :: Sig -> SE Sig
toDrum Sig
a = 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
a

defSpec :: D -> D -> MpSpec
defSpec :: D -> D -> MpSpec
defSpec D
dur D
cps = MpSpec :: D -> D -> Maybe D -> MpSpec
MpSpec
  { mpDur :: D
mpDur   = D
dur
  , mpCps :: D
mpCps   = D
cps
  , mpRnd :: Maybe D
mpRnd   = 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 :: 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

rndSpec :: MpSpec -> SE MpSpec
rndSpec :: MpSpec -> SE MpSpec
rndSpec MpSpec
spec = do
  D
dur  <- SE D
rndDur'
  D
cps  <- SE D
rndCps'
  MpSpec -> SE MpSpec
forall (m :: * -> *) a. Monad m => a -> m a
return (MpSpec -> SE MpSpec) -> MpSpec -> SE MpSpec
forall a b. (a -> b) -> a -> b
$ MpSpec
spec
    { mpDur :: D
mpDur  = D
dur
    , mpCps :: D
mpCps  = 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
$ (MpSpec -> Maybe D
mpRnd MpSpec
spec)) (D -> SE D) -> D -> SE D
forall a b. (a -> b) -> a -> b
$ MpSpec -> D
mpDur MpSpec
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
$ (MpSpec -> Maybe D
mpRnd MpSpec
spec)) (D -> SE D) -> D -> SE D
forall a b. (a -> b) -> a -> b
$ MpSpec -> D
mpCps MpSpec
spec

rezz :: Sig -> Sig -> Sig
rezz :: Sig -> Sig -> Sig
rezz Sig
cps Sig
bw = Sig -> Sig -> Sig -> Sig
reson (Sig -> Sig -> Sig
mpulse Sig
1 Sig
0) Sig
cps (Sig
cps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
bw) Sig -> D -> Sig
forall a. Tuple a => a -> D -> a
`withD` D
2

bass :: SE Sig
bass :: SE Sig
bass = MpSpec -> SE Sig
bass' MpSpec
bdSpec

bdSpec :: MpSpec
bdSpec :: MpSpec
bdSpec = D -> D -> MpSpec
defSpec D
0.43 D
64

bass' :: MpSpec -> SE Sig
bass' :: MpSpec -> SE Sig
bass' MpSpec
spec = MpSpec -> SE Sig
pureBass' (MpSpec -> SE Sig) -> SE MpSpec -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MpSpec -> SE MpSpec
rndSpec MpSpec
spec

-- dur = 1.7
-- cps = 64
pureBass' :: MpSpec -> SE Sig
pureBass' :: MpSpec -> SE Sig
pureBass' MpSpec
spec = Sig -> SE Sig
toDrum Sig
aout
  where
    dur :: D
dur = MpSpec -> D
mpDur MpSpec
spec
    cps :: Sig
cps = D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ MpSpec -> D
mpCps MpSpec
spec

    aout :: Sig
aout = Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
env Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
225 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
fadeOut D
dur) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
lp1 Sig
500 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
rezz Sig
cps Sig
0.001
    env :: Sig
env  = [D] -> Sig
transeg [D
1, D
dur, -D
14, D
0]


snare1 :: SE Sig
snare1 :: SE Sig
snare1 = MpSpec -> SE Sig
snare1' MpSpec
snSpec1

snSpec1 :: MpSpec
snSpec1 :: MpSpec
snSpec1 = D -> D -> MpSpec
defSpec D
0.38 D
800

snare1' :: MpSpec -> SE Sig
snare1' :: MpSpec -> SE Sig
snare1' MpSpec
spec = MpSpec -> SE Sig
pureSnare1' (MpSpec -> SE Sig) -> SE MpSpec -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MpSpec -> SE MpSpec
rndSpec MpSpec
spec

-- cps = 800
pureSnare1' :: MpSpec -> SE Sig
pureSnare1' :: MpSpec -> SE Sig
pureSnare1' MpSpec
spec = Sig -> SE Sig
toDrum (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 (D -> Sig
fadeOut D
dur) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ SE Sig
aout)
  where
    dur :: D
dur = MpSpec -> D
mpDur MpSpec
spec
    cps :: D
cps = MpSpec -> D
mpCps MpSpec
spec

    anoise :: SE Sig
anoise = SE Sig
pink
    asig :: SE Sig
asig   = (Sig -> Sig) -> SE Sig -> SE Sig
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Sig
x -> Sig -> Sig -> Sig -> Sig
reson Sig
x Sig
6250 Sig
9000 Sig -> D -> Sig
forall a. Tuple a => a -> D -> a
`withD` D
1) SE Sig
anoise
    aenv :: Sig
aenv   = [D] -> Sig
transeg [D
1, D
dur ,-D
5 , D
0]
    asig1 :: AtOut Sig Sig (SE Sig)
asig1  = (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
bhp Sig
3000) (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
aenv SE Sig
asig

    xdur :: D
xdur   = D
0.006
    astrike :: Sig
astrike = Sig -> Sig
osc ([D] -> Sig
transeg [D
cps,D
xdur,-D
4,D
60])
    aenv2 :: Sig
aenv2 = [D] -> Sig
transeg [D
1,D
xdur,-D
2,D
0]
    astrike1 :: Sig
astrike1 = Sig
aenv2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
astrike

    aout :: SE Sig
aout = (Sig -> Sig) -> SE Sig -> SE Sig
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Sig
0.7 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
astrike1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ ) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
2 (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ SE Sig
asig1

snare2 :: SE Sig
snare2 :: SE Sig
snare2 = MpSpec -> SE Sig
snare2' MpSpec
snSpec2

snSpec2 :: MpSpec
snSpec2 :: MpSpec
snSpec2 = D -> D -> MpSpec
defSpec D
0.4 D
800

snare2' :: MpSpec -> SE Sig
snare2' :: MpSpec -> SE Sig
snare2' MpSpec
spec = MpSpec -> SE Sig
pureSnare2' (MpSpec -> SE Sig) -> SE MpSpec -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MpSpec -> SE MpSpec
rndSpec MpSpec
spec

pureSnare2' :: MpSpec -> SE Sig
pureSnare2' :: MpSpec -> SE Sig
pureSnare2' MpSpec
spec = Sig -> SE Sig
toDrum (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 (D -> Sig
fadeOut D
dur) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ SE Sig
aout)
  where
    dur :: D
dur = MpSpec -> D
mpDur MpSpec
spec
    cps :: D
cps = MpSpec -> D
mpCps MpSpec
spec

    anoise :: SE Sig
anoise = SE Sig
pink
    asig :: SE Sig
asig   = (Sig -> Sig) -> SE Sig -> SE Sig
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Sig
x -> Sig -> Sig -> Sig -> Sig
butbp Sig
x Sig
5200 Sig
5200 Sig -> D -> Sig
forall a. Tuple a => a -> D -> a
`withD` D
1) SE Sig
anoise
    aenv :: Sig
aenv   = [D] -> Sig
transeg [D
1, D
dur ,-D
8 , D
0]
    asig1 :: AtOut Sig Sig (SE Sig)
asig1  = (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
bhp Sig
3000) (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
aenv SE Sig
asig

    xdur :: D
xdur   = D
0.005
    astrike :: Sig
astrike = Sig -> Sig
osc ([D] -> Sig
transeg [D
cps,D
xdur,-D
4,D
cps D -> D -> D
forall a. Fractional a => a -> a -> a
/ D
4])
    aenv2 :: Sig
aenv2 = [D] -> Sig
transeg [D
1,D
xdur,-D
2,D
0]
    astrike1 :: Sig
astrike1 = Sig
aenv2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
astrike

    aout :: SE Sig
aout = (Sig -> Sig) -> SE Sig -> SE Sig
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Sig
0.5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
astrike1) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ ) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
2.3 (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ SE Sig
asig1


rimShot :: SE Sig
rimShot :: SE Sig
rimShot = MpSpec -> SE Sig
rimShot' MpSpec
rimSpec

rimSpec :: MpSpec
rimSpec :: MpSpec
rimSpec = D -> D -> MpSpec
defSpec D
0.005 D
1700

rimShot' :: MpSpec -> SE Sig
rimShot' :: MpSpec -> SE Sig
rimShot' MpSpec
spec = MpSpec -> SE Sig
pureRimShot' (MpSpec -> SE Sig) -> SE MpSpec -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MpSpec -> SE MpSpec
rndSpec MpSpec
spec

-- cps = 1700
-- dur = 0.005
pureRimShot' :: MpSpec -> SE Sig
pureRimShot' :: MpSpec -> SE Sig
pureRimShot' MpSpec
spec = Sig -> SE Sig
toDrum (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 -> Sig
fadeOut D
dur) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig
asig
  where
    dur :: D
dur = MpSpec -> D
mpDur MpSpec
spec
    cps :: Sig
cps = D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ MpSpec -> D
mpCps MpSpec
spec

    asig1 :: Sig
asig1 = D -> Sig -> Sig
osc' D
0.2 Sig
cps
    asig2 :: Sig
asig2 = Sig -> Sig -> Sig -> Sig
reson Sig
asig1 Sig
cps Sig
1500 Sig -> D -> Sig
forall a. Tuple a => a -> D -> a
`withD` D
2
    asig :: Sig
asig  = Sig -> Sig -> Sig
bhp Sig
500 (Sig
asig1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
asig2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.4 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.3)

cymbal1 :: SE Sig
cymbal1 :: SE Sig
cymbal1 = MpSpec -> SE Sig
cymbal1' MpSpec
cymSpec1

cymSpec1 :: MpSpec
cymSpec1 :: MpSpec
cymSpec1 = D -> D -> MpSpec
defSpec D
0.304 D
6000

cymbal1' :: MpSpec -> SE Sig
cymbal1' :: MpSpec -> SE Sig
cymbal1' MpSpec
spec = MpSpec -> SE Sig
pureCymbal1' (MpSpec -> SE Sig) -> SE MpSpec -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MpSpec -> SE MpSpec
rndSpec MpSpec
spec

-- dur = 0.304
-- cps = 6000
pureCymbal1' :: MpSpec -> SE Sig
pureCymbal1' :: MpSpec -> SE Sig
pureCymbal1' MpSpec
spec = (Sig -> SE Sig
toDrum (Sig -> SE Sig) -> SE Sig -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< ) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> Sig
fadeOut D
dur) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ do
  Sig
anoise <- SE Sig
white
  let asig1 :: Sig
asig1 = Sig -> Sig -> Sig
blp Sig
14000 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig
reson (Sig
anoiseSig -> Sig -> Sig
forall a. Num a => a -> a -> a
*Sig
aenv) Sig
icf (Sig
icfSig -> Sig -> Sig
forall a. Num a => a -> a -> a
*Sig
0.7) Sig -> D -> Sig
forall a. Tuple a => a -> D -> a
`withD` D
1
      asig2 :: Sig
asig2 = Sig -> Sig -> Sig
bhp Sig
6000 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ (Sig
asig1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
anoise Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.001)
  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
0.25 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
aenv Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
asig2
  where
    dur :: D
dur = MpSpec -> D
mpDur MpSpec
spec
    cps :: Sig
cps = D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ MpSpec -> D
mpCps MpSpec
spec

    aenv :: Sig
aenv = [D] -> Sig
transeg  [D
1,D
dur,-D
2,D
0]
    icf :: Sig
icf = Sig
cps


cymbal2 :: SE Sig
cymbal2 :: SE Sig
cymbal2 = MpSpec -> SE Sig
cymbal2' MpSpec
cymSpec2

cymSpec2 :: MpSpec
cymSpec2 :: MpSpec
cymSpec2 = D -> D -> MpSpec
defSpec D
1.404 D
1000

cymbal2' :: MpSpec -> SE Sig
cymbal2' :: MpSpec -> SE Sig
cymbal2' MpSpec
spec = MpSpec -> SE Sig
pureCymbal2' (MpSpec -> SE Sig) -> SE MpSpec -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MpSpec -> SE MpSpec
rndSpec MpSpec
spec

pureCymbal2' :: MpSpec -> SE Sig
pureCymbal2' :: MpSpec -> SE Sig
pureCymbal2' MpSpec
spec = (Sig -> SE Sig
toDrum (Sig -> SE Sig) -> SE Sig -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< ) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> Sig
fadeOut D
dur) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ do
  Sig
anoise <- SE Sig
white
  let asig :: Sig
asig = 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
bhp Sig
6000 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ 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
lp1 Sig
12000 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig
reson (Sig
anoise Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
aenv) Sig
icf (Sig
icf Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.9) Sig -> D -> Sig
forall a. Tuple a => a -> D -> a
`withD` D
1
  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
astrike Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
asig Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
1.5
  where
    dur :: D
dur = MpSpec -> D
mpDur MpSpec
spec
    cps :: D
cps = MpSpec -> D
mpCps MpSpec
spec

    icf :: Sig
icf = 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
5
    aenv :: Sig
aenv = [D] -> Sig
transeg  [D
1,D
dur,-D
2,D
0]
    xdur :: D
xdur = D
0.004
    aenv2 :: Sig
aenv2 = [D] -> Sig
transeg [D
1,D
xdur,-D
2,D
0]
    astrike :: Sig
astrike = Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
aenv2 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig
osc ([D] -> Sig
transeg  [D
cps,D
xdur,-D
4,D
0.4D -> D -> D
forall a. Num a => a -> a -> a
*D
cps])

-- dur = 0.2
-- cps = 630
bongo1 :: SE Sig
bongo1 :: SE Sig
bongo1 = MpSpec -> SE Sig
bongo1' MpSpec
bonSpec1

bonSpec1 :: MpSpec
bonSpec1 :: MpSpec
bonSpec1 = D -> D -> MpSpec
defSpec D
0.2 D
630

bongo1' :: MpSpec -> SE Sig
bongo1' :: MpSpec -> SE Sig
bongo1' MpSpec
spec = MpSpec -> SE Sig
pureBongo1' (MpSpec -> SE Sig) -> SE MpSpec -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MpSpec -> SE MpSpec
rndSpec MpSpec
spec

pureBongo1' :: MpSpec -> SE Sig
pureBongo1' :: MpSpec -> SE Sig
pureBongo1' MpSpec
spec = Sig -> SE Sig
toDrum (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 -> Sig
fadeOut D
dur) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig
asig
  where
    dur :: D
dur = MpSpec -> D
mpDur MpSpec
spec
    cps :: Sig
cps = D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ MpSpec -> D
mpCps MpSpec
spec

    asig :: Sig
asig = Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
4 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
aenv ) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
blp Sig
8000 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
bhp Sig
300 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
rezz Sig
cps Sig
0.03
    aenv :: Sig
aenv = [D] -> Sig
transeg  [D
1,D
dur,D
13,D
0]

bongo2 :: SE Sig
bongo2 :: SE Sig
bongo2 = MpSpec -> SE Sig
bongo2' MpSpec
bonSpec2

bonSpec2 :: MpSpec
bonSpec2 :: MpSpec
bonSpec2 = D -> D -> MpSpec
defSpec D
0.2 D
400

bongo2' :: MpSpec -> SE Sig
bongo2' :: MpSpec -> SE Sig
bongo2' MpSpec
spec = MpSpec -> SE Sig
pureBongo2' (MpSpec -> SE Sig) -> SE MpSpec -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MpSpec -> SE MpSpec
rndSpec MpSpec
spec

-- dur = 0.2
-- cps = 400
pureBongo2' :: MpSpec -> SE Sig
pureBongo2' :: MpSpec -> SE Sig
pureBongo2' MpSpec
spec = Sig -> SE Sig
toDrum (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 -> Sig
fadeOut D
dur) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig
asig
  where
    dur :: D
dur = MpSpec -> D
mpDur MpSpec
spec
    cps :: D
cps = MpSpec -> D
mpCps MpSpec
spec

    kcps :: Sig
kcps =  D -> D -> D -> Sig
expon D
cps D
dur (D
cps D -> D -> D
forall a. Num a => a -> a -> a
* D
0.975)
    aenv :: Sig
aenv =  [D] -> Sig
transeg [D
1,D
durD -> D -> D
forall a. Num a => a -> a -> a
-D
0.005,D
0,D
0.1,D
0.005,D
0, D
0]
    asig :: Sig
asig = Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
4 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
aenv) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
bhp Sig
100 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
lp1 Sig
5000 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
rezz Sig
kcps Sig
0.03


bongo3 :: SE Sig
bongo3 :: SE Sig
bongo3 = MpSpec -> SE Sig
bongo3' MpSpec
bonSpec3

bonSpec3 :: MpSpec
bonSpec3 :: MpSpec
bonSpec3 = D -> D -> MpSpec
defSpec D
1.229 D
194

bongo3' :: MpSpec -> SE Sig
bongo3' :: MpSpec -> SE Sig
bongo3' MpSpec
spec = MpSpec -> SE Sig
pureBongo3' (MpSpec -> SE Sig) -> SE MpSpec -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MpSpec -> SE MpSpec
rndSpec MpSpec
spec

-- dur = 1.229
-- cps = 194
pureBongo3' :: MpSpec -> SE Sig
pureBongo3' :: MpSpec -> SE Sig
pureBongo3' MpSpec
spec = Sig -> SE Sig
toDrum (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 -> Sig
fadeOut D
dur) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig
asig
  where
    dur :: D
dur = MpSpec -> D
mpDur MpSpec
spec
    cps :: Sig
cps = D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ MpSpec -> D
mpCps MpSpec
spec

    aenv :: Sig
aenv  = [D] -> Sig
transeg [D
0, D
0.001, -D
2, D
1, D
durD -> D -> D
forall a. Num a => a -> a -> a
-D
0.001, -D
2, D
0]
    kbw :: Sig
kbw   = [D] -> Sig
linseg  [D
0.05,D
0.01,D
0.008]
    asig :: Sig
asig  = Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
aenv) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
blp Sig
11000 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
rezz Sig
cps Sig
kbw

claves :: SE Sig
claves :: SE Sig
claves = MpSpec -> SE Sig
claves' MpSpec
clSpec

clSpec :: MpSpec
clSpec :: MpSpec
clSpec = D -> D -> MpSpec
defSpec D
0.186 D
400

claves' :: MpSpec -> SE Sig
claves' :: MpSpec -> SE Sig
claves' MpSpec
spec = MpSpec -> SE Sig
pureClaves' (MpSpec -> SE Sig) -> SE MpSpec -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MpSpec -> SE MpSpec
rndSpec MpSpec
spec

pureClaves' :: MpSpec -> SE Sig
pureClaves' :: MpSpec -> SE Sig
pureClaves' MpSpec
spec = Sig -> SE Sig
toDrum Sig
aout
  where
    dur :: D
dur = MpSpec -> D
mpDur MpSpec
spec
    cps :: Sig
cps = D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ MpSpec -> D
mpCps MpSpec
spec

    aenv :: Sig
aenv = [D] -> Sig
linseg [D
1, D
dur, D
0]
    asig1 :: Sig
asig1 = Sig -> Sig -> Sig
rezz Sig
cps Sig
0.025
    asig2 :: Sig
asig2 = Sig -> Sig -> Sig
rezz (Sig
cps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
5.45) Sig
0.03
    aout :: Sig
aout  = Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
3.2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
aenv Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
fadeOut D
dur) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig
asig1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
1.3 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
asig2

cowbell :: SE Sig
cowbell :: SE Sig
cowbell = MpSpec -> SE Sig
cowbell' MpSpec
cowSpec

cowSpec :: MpSpec
cowSpec :: MpSpec
cowSpec = D -> D -> MpSpec
defSpec D
0.3 D
850

cowbell' :: MpSpec -> SE Sig
cowbell' :: MpSpec -> SE Sig
cowbell' MpSpec
spec = MpSpec -> SE Sig
pureCowbell' (MpSpec -> SE Sig) -> SE MpSpec -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MpSpec -> SE MpSpec
rndSpec MpSpec
spec

pureCowbell' :: MpSpec -> SE Sig
pureCowbell' :: MpSpec -> SE Sig
pureCowbell' MpSpec
spec = Sig -> SE Sig
toDrum Sig
asig
  where
    dur :: D
dur = MpSpec -> D
mpDur MpSpec
spec
    cps :: Sig
cps = D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ MpSpec -> D
mpCps MpSpec
spec

    asig :: Sig
asig = Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
aenv Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
3 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
fadeOut D
dur) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
bhp Sig
100 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$
        Sig -> Sig -> Sig
rezz Sig
cps Sig
0.007
      Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
0.8 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig -> Sig
rezz (Sig
cps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
5.537) Sig
0.03
    aenv :: Sig
aenv = [D] -> Sig
linseg [D
1, D
dur, D
0]

guiro :: SE Sig
guiro :: SE Sig
guiro = MpSpec -> SE Sig
guiro' MpSpec
groSpec

groSpec :: MpSpec
groSpec :: MpSpec
groSpec = D -> D -> MpSpec
defSpec D
0.256 D
66

guiro' :: MpSpec -> SE Sig
guiro' :: MpSpec -> SE Sig
guiro' MpSpec
spec = MpSpec -> SE Sig
pureGuiro' (MpSpec -> SE Sig) -> SE MpSpec -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MpSpec -> SE MpSpec
rndSpec MpSpec
spec

pureGuiro' :: MpSpec -> SE Sig
pureGuiro' :: MpSpec -> SE Sig
pureGuiro' MpSpec
spec = Sig -> SE Sig
toDrum Sig
asig
  where
    dur :: D
dur = MpSpec -> D
mpDur MpSpec
spec
    cps :: D
cps = MpSpec -> D
mpCps MpSpec
spec

    aenv :: Sig
aenv =  [D] -> Sig
linseg  [D
0,D
0.001,D
1,D
durD -> D -> D
forall a. Num a => a -> a -> a
-D
0.111,D
0.6,D
0.1,D
1,D
0.01,D
0]
    asig :: Sig
asig = Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
3 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
aenv Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
fadeOut D
dur) (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
reson (Sig
0.1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
sqr Sig
kcps) Sig
4300 Sig
3000 Sig -> D -> Sig
forall a. Tuple a => a -> D -> a
`withD` D
1
    kcps :: Sig
kcps =  [D] -> Sig
transeg [D
cps,D
dur,D
2,(D
1.1 D -> D -> D
forall a. Num a => a -> a -> a
* D
cps)]

maracas :: SE Sig
maracas :: SE Sig
maracas = MpSpec -> SE Sig
maracas' MpSpec
marSpec

marSpec :: MpSpec
marSpec :: MpSpec
marSpec = D -> D -> MpSpec
defSpec D
0.05 D
5000

maracas' :: MpSpec -> SE Sig
maracas' :: MpSpec -> SE Sig
maracas' MpSpec
spec = MpSpec -> SE Sig
pureMaracas' (MpSpec -> SE Sig) -> SE MpSpec -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MpSpec -> SE MpSpec
rndSpec MpSpec
spec

pureMaracas' :: MpSpec -> SE Sig
pureMaracas' :: MpSpec -> SE Sig
pureMaracas' MpSpec
spec = Sig -> SE Sig
toDrum (Sig -> SE Sig) -> SE Sig -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< do
  Sig
asig <- Sig -> Sig -> SE Sig
noise Sig
1 Sig
0.04
  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 (Sig
0.35 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
aenv Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
fadeOut D
dur) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
bhp Sig
2000 (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig
reson Sig
asig Sig
9000 Sig
4000 Sig -> D -> Sig
forall a. Tuple a => a -> D -> a
`withD` D
2
  where
    dur :: D
dur = MpSpec -> D
mpDur MpSpec
spec
    aenv :: Sig
aenv =  [D] -> Sig
transeg [D
1,D
dur,-D
4,D
0]


quijada :: SE Sig
quijada :: SE Sig
quijada = MpSpec -> SE Sig
quijada' MpSpec
qjSpec

qjSpec :: MpSpec
qjSpec :: MpSpec
qjSpec = D -> D -> MpSpec
defSpec D
0.817 D
550

quijada' :: MpSpec -> SE Sig
quijada' :: MpSpec -> SE Sig
quijada' MpSpec
spec = MpSpec -> SE Sig
pureQuijada' (MpSpec -> SE Sig) -> SE MpSpec -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MpSpec -> SE MpSpec
rndSpec MpSpec
spec

pureQuijada' :: MpSpec -> SE Sig
pureQuijada' :: MpSpec -> SE Sig
pureQuijada' MpSpec
spec = Sig -> SE Sig
toDrum (Sig -> SE Sig) -> Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
bhp Sig
cps (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
6 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
fadeOut D
dur) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ D -> Sig -> Sig
phi D
dur (Sig
1Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/Sig
22.7272) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ D -> Sig -> Sig
phi (D
dur D -> D -> D
forall a. Num a => a -> a -> a
* D
0.39) (Sig
1Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/Sig
13.1579)
  where
    dur :: D
dur = MpSpec -> D
mpDur MpSpec
spec
    cps :: Sig
cps = D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ MpSpec -> D
mpCps MpSpec
spec

    phi :: D -> Sig -> Sig
phi D
dt Sig
freq = Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
kenv (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig
reson (Sig -> Sig -> Sig
mpulse  Sig
1 Sig
freq) Sig
2727 Sig
400 Sig -> D -> Sig
forall a. Tuple a => a -> D -> a
`withD` D
1
      where kenv :: Sig
kenv = [D] -> Sig
transeg  [D
0.8,D
0.05,D
1, D
1,D
dtD -> D -> D
forall a. Num a => a -> a -> a
-D
0.05,-D
6,D
0]


tamb :: SE Sig
tamb :: SE Sig
tamb = MpSpec -> SE Sig
tamb' MpSpec
tamSpec

tamSpec :: MpSpec
tamSpec :: MpSpec
tamSpec = D -> D -> MpSpec
defSpec D
0.271 D
7000

tamb', pureTamb' :: MpSpec -> SE Sig

tamb' :: MpSpec -> SE Sig
tamb' MpSpec
spec = MpSpec -> SE Sig
pureTamb' (MpSpec -> SE Sig) -> SE MpSpec -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< MpSpec -> SE MpSpec
rndSpec MpSpec
spec

pureTamb' :: MpSpec -> SE Sig
pureTamb' MpSpec
spec = Sig -> SE Sig
toDrum (Sig -> SE Sig) -> SE Sig -> SE Sig
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< do
  Sig
anoise <- Sig -> Sig -> SE Sig
noise Sig
1 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
forall a. SigSpace a => Sig -> a -> a
mul (Sig
1.5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
aenv Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
fadeOut D
dur)
    (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig
reson (Sig -> Sig -> Sig
bhp Sig
cps (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ (Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ (Sig
anoise Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
aenv)) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig
reson (Sig
anoise Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
aenv) Sig
4600 Sig
100 Sig -> D -> Sig
forall a. Tuple a => a -> D -> a
`withD` D
2) Sig
9000 Sig
3000 Sig -> D -> Sig
forall a. Tuple a => a -> D -> a
`withD` D
1
  where
    dur :: D
dur = MpSpec -> D
mpDur MpSpec
spec
    cps :: Sig
cps = D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ MpSpec -> D
mpCps MpSpec
spec
    aenv :: Sig
aenv = [D] -> Sig
transeg  [D
1,D
dur,-D
8,D
0]

-------------------------------------------------------
-- Sampler

mkSam :: SE Sig -> Sam
mkSam :: SE Sig -> Sam
mkSam = Sig -> SE Sig -> Sam
forall a. ToSam a => Sig -> a -> Sam
limSam Sig
4

-- | Bass drum
bd :: Sam
bd :: Sam
bd = SE Sig -> Sam
mkSam SE Sig
bass

-- | Snare 1
sn1 :: Sam
sn1 :: Sam
sn1 = SE Sig -> Sam
mkSam SE Sig
snare1

-- | Snare 2
sn2 :: Sam
sn2 :: Sam
sn2 = Sig -> SE Sig -> Sam
forall a. ToSam a => Sig -> a -> Sam
limSam Sig
2 SE Sig
snare2

-- | Rim shot
rim :: Sam
rim :: Sam
rim = Sig -> SE Sig -> Sam
forall a. ToSam a => Sig -> a -> Sam
limSam Sig
1 SE Sig
rimShot

-- | Cymbal 1
cym1 :: Sam
cym1 :: Sam
cym1 = SE Sig -> Sam
mkSam SE Sig
cymbal1

-- | Cymbal 2
cym2 :: Sam
cym2 :: Sam
cym2 = SE Sig -> Sam
mkSam SE Sig
cymbal2

-- | Bongo 1
bon1 :: Sam
bon1 :: Sam
bon1 = SE Sig -> Sam
mkSam SE Sig
bongo1

-- | Bongo 2
bon2 :: Sam
bon2 :: Sam
bon2 = SE Sig -> Sam
mkSam SE Sig
bongo2

-- | Bongo 3
bon3 :: Sam
bon3 :: Sam
bon3 = SE Sig -> Sam
mkSam SE Sig
bongo3

-- | Claves
cl :: Sam
cl :: Sam
cl = SE Sig -> Sam
mkSam SE Sig
claves

-- | Cowbell
cow :: Sam
cow :: Sam
cow = SE Sig -> Sam
mkSam SE Sig
cowbell

-- | Guiro
gro :: Sam
gro :: Sam
gro = SE Sig -> Sam
mkSam SE Sig
guiro

-- | Maracas
mar :: Sam
mar :: Sam
mar = SE Sig -> Sam
mkSam SE Sig
maracas

-- | Quijada
qj :: Sam
qj :: Sam
qj = SE Sig -> Sam
mkSam SE Sig
quijada

-- | Tambourine
tam :: Sam
tam :: Sam
tam = SE Sig -> Sam
mkSam SE Sig
tamb

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' :: MpSpec -> Sam
bd' :: MpSpec -> Sam
bd' = (MpSpec -> SE Sig) -> MpSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' MpSpec -> SE Sig
bass'

sn1' :: MpSpec -> Sam
sn1' :: MpSpec -> Sam
sn1' = (MpSpec -> SE Sig) -> MpSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' MpSpec -> SE Sig
snare1'

sn2' :: MpSpec -> Sam
sn2' :: MpSpec -> Sam
sn2' = (MpSpec -> SE Sig) -> MpSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' MpSpec -> SE Sig
snare2'

rim' :: MpSpec -> Sam
rim' :: MpSpec -> Sam
rim' = (MpSpec -> SE Sig) -> MpSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' MpSpec -> SE Sig
rimShot'

cym1' :: MpSpec -> Sam
cym1' :: MpSpec -> Sam
cym1' = (MpSpec -> SE Sig) -> MpSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' MpSpec -> SE Sig
cymbal1'

cym2' :: MpSpec -> Sam
cym2' :: MpSpec -> Sam
cym2' = (MpSpec -> SE Sig) -> MpSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' MpSpec -> SE Sig
cymbal2'

bon1' :: MpSpec -> Sam
bon1' :: MpSpec -> Sam
bon1' = (MpSpec -> SE Sig) -> MpSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' MpSpec -> SE Sig
bongo1'

bon2' :: MpSpec -> Sam
bon2' :: MpSpec -> Sam
bon2' = (MpSpec -> SE Sig) -> MpSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' MpSpec -> SE Sig
bongo2'

bon3' :: MpSpec -> Sam
bon3' :: MpSpec -> Sam
bon3' = (MpSpec -> SE Sig) -> MpSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' MpSpec -> SE Sig
bongo3'

cl' :: MpSpec -> Sam
cl' :: MpSpec -> Sam
cl' = (MpSpec -> SE Sig) -> MpSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' MpSpec -> SE Sig
claves'

cow' :: MpSpec -> Sam
cow' :: MpSpec -> Sam
cow' = (MpSpec -> SE Sig) -> MpSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' MpSpec -> SE Sig
cowbell'

gro' :: MpSpec -> Sam
gro' :: MpSpec -> Sam
gro' = (MpSpec -> SE Sig) -> MpSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' MpSpec -> SE Sig
guiro'

mar' :: MpSpec -> Sam
mar' :: MpSpec -> Sam
mar' = (MpSpec -> SE Sig) -> MpSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' MpSpec -> SE Sig
maracas'

qj' :: MpSpec -> Sam
qj' :: MpSpec -> Sam
qj' = (MpSpec -> SE Sig) -> MpSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' MpSpec -> SE Sig
quijada'

tam' :: MpSpec -> Sam
tam' :: MpSpec -> Sam
tam' = (MpSpec -> SE Sig) -> MpSpec -> Sam
forall t. (t -> SE Sig) -> t -> Sam
mkSam' MpSpec -> SE Sig
tamb'