-- | Drums defined by Hans Mikelson.
module Csound.Catalog.Drum.Hm(
    -- * Subtractive
    dumb, dumbBass, pluckSnare, sortaKnockSweep, metalBoink,

    -- * Fullkit

    -- ** Non-pitched drums
    snare, openHihat, closedHihat,

    -- ** Pitched drums
    --
    -- The instrument turns a pitch (in Hz) to the signal.
    bassDrum, crash, handClap,
    bassDrum', crash', handClap',

    -- * Sampler
    bd1, bd2, sn1, sweep, boink, sn2, ohh, chh, bd3, cr, clap
) where

import Csound.Base
import Csound.Sam

-- subtractive

bpb :: Sig -> Sig -> Sig -> Sig
bpb :: Sig -> Sig -> Sig -> Sig
bpb Sig
cfq Sig
q Sig
asig = Sig -> Sig -> Sig
balance (Sig -> Sig -> Sig -> Sig
bp Sig
cfq Sig
q Sig
asig) Sig
asig

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

-- | A \"dumb\" drum.
dumb :: SE Sig
dumb :: SE Sig
dumb = (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 -> Sig) -> SE Sig -> SE Sig
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sig -> Sig -> Sig -> Sig
bpb Sig
1000 Sig
100) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> SE Sig
rand (Sig -> SE Sig) -> Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
expseg [D
0.0001, D
0.01, D
1, D
0.04, D
0.01]

dumbBass :: SE Sig
dumbBass :: SE Sig
dumbBass = (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 -> Sig) -> SE Sig -> SE Sig
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sig -> Sig -> Sig -> Sig
bpb Sig
kfreqenv (Sig
kfreqenv Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
8)) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> SE Sig
rand (Sig -> SE Sig) -> Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
expseg [D
0.0001, D
0.01, D
1, D
0.08, D
0.01]
    where kfreqenv :: Sig
kfreqenv = [D] -> Sig
expseg [D
50, D
0.01, D
200, D
0.08, D
50]

pluckSnare :: SE Sig
pluckSnare :: SE Sig
pluckSnare = Sig -> SE Sig
toDrum (Sig -> SE Sig) -> Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> D -> Tab -> D -> Sig
pluck Sig
kampenv4 Sig
kptchenv D
50 ([Double] -> Tab
elins [Double
1, Double
1]) D
4 Sig -> [D] -> Sig
forall a. Tuple a => a -> [D] -> a
`withDs` [D
0.8, D
3]
    where
        kampenv4 :: Sig
kampenv4 = [D] -> Sig
linseg [D
0, D
0.001, D
1, D
xdur D -> D -> D
forall a. Num a => a -> a -> a
- D
0.21, D
1, D
0.02, D
0]
        kptchenv :: Sig
kptchenv = [D] -> Sig
linseg [D
100, D
0.01, D
300, D
0.2, D
200, D
0.01, D
200]
        xdur :: D
xdur     = D
1.25


sortaKnockSweep :: SE Sig
sortaKnockSweep :: SE Sig
sortaKnockSweep = (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 -> Sig) -> SE Sig -> SE Sig
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Sig -> Sig -> Sig -> Sig) -> [(Sig, Sig)] -> Sig -> Sig
forall cps bw.
(cps -> bw -> Sig -> Sig) -> [(cps, bw)] -> Sig -> Sig
resonsBy Sig -> Sig -> Sig -> Sig
bpb
            [ (Sig
kfreqenv41, Sig
kfreqenv41 Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
8)
            , (Sig
kfreqenv42, Sig
kfreqenv42 Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
4)
            ]
         ) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> SE Sig
rand Sig
kampenv4
    where
        kfreqenv41 :: Sig
kfreqenv41  = [D] -> Sig
expseg [ D
50, D
0.01, D
200, D
0.08, D
50]
        kfreqenv42 :: Sig
kfreqenv42  = [D] -> Sig
linseg [ D
150, D
0.01, D
1000, D
0.08, D
250]
        kampenv4 :: Sig
kampenv4  = [D] -> Sig
linseg [ D
0, D
0.01, D
1, D
0.08, D
0, D
0.01, D
0]

metalBoink :: SE Sig
metalBoink :: SE Sig
metalBoink = Sig -> SE Sig
toDrum (Sig -> SE Sig) -> Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Sig
foscil Sig
kampenv61 Sig
30 Sig
1 Sig
6.726 Sig
kampenv62 Tab
sine
    where
        kampenv61 :: Sig
kampenv61   = [D] -> Sig
expseg [ D
0.01, D
0.01, D
1, D
0.2, D
0.1, D
0.1, D
0.001 ]
        kampenv62 :: Sig
kampenv62   = [D] -> Sig
linseg [ D
1, D
0.1, D
10, D
0.1, D
0.5, D
0.01, D
1 ]

-- fullkit

bassDrum :: SE Sig
bassDrum :: SE Sig
bassDrum = D -> SE Sig
bassDrum' D
64

bassDrum' :: D -> SE Sig
bassDrum' :: D -> SE Sig
bassDrum' D
cps = Sig -> SE Sig
toDrum (Sig -> SE Sig) -> Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig
env Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
osc (D -> Sig
sig D
cps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
kgliss Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.5)
    where env :: Sig
env = [D] -> Sig
linseg [D
0, D
0.00245, D
1, D
0.1225, D
0]
          kgliss :: Sig
kgliss = [D] -> Sig
expseg [D
10, D
0.625, D
1, D
0.25, D
1]


openHihat :: SE Sig
openHihat :: SE Sig
openHihat = Sig -> SE Sig
hihat (Sig -> SE Sig) -> Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg [D
0, D
0.004, D
1, D
0.121, D
0]

closedHihat :: SE Sig
closedHihat :: SE Sig
closedHihat = Sig -> SE Sig
hihat (Sig -> SE Sig) -> Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ [D] -> Sig
linseg [D
0, D
0.00245, D
1, D
0.1225, D
0]

hihat :: Sig -> SE Sig
hihat :: Sig -> SE Sig
hihat Sig
kenv = 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 -> SE Sig
rand Sig
kenv
    let a1 :: Sig
a1 = Sig -> Sig -> Sig -> Sig
moogvcf (Sig -> Sig -> Sig -> Sig
butbp Sig
asig Sig
cf (Sig
cf Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
2)) Sig
cf Sig
0.7
        a2 :: Sig
a2 = Sig -> Sig -> D -> Sig
comb Sig
a1 Sig
0.5 (D
1D -> D -> D
forall a. Fractional a => a -> a -> a
/D -> D
forall a. SigOrD a => a -> a
cpspch(D
8))
    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
a2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.05 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
a1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.93
    where cf :: Sig
cf = Sig -> Sig
forall a. SigOrD a => a -> a
cpspch (Sig
5.08 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
8)

snare :: SE Sig
snare :: SE Sig
snare = 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
asound <- Sig -> SE Sig
rand Sig
1
    let as1 :: Sig
as1 = Sig -> Sig -> Sig -> Sig
butbp Sig
asound Sig
210 Sig
55
    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
kenv2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig
as1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.9 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
asound Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.8 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
kenv1)
    where
        kenv1 :: Sig
kenv1 = [D] -> Sig
linseg [D
0, D
0.00176, D
1, D
0.1232, D
0]
        kenv2 :: Sig
kenv2 = [D] -> Sig
expseg [D
0.01, D
0.0002, D
1, D
0.0297, D
0.01, D
0.09, D
0.01]

crash :: SE Sig
crash :: SE Sig
crash = D -> SE Sig
crash' (D -> SE Sig) -> D -> SE Sig
forall a b. (a -> b) -> a -> b
$ D -> D
forall a. SigOrD a => a -> a
cpspch D
13.05

-- | Recommended values cpspch(13.03) - cpspch(13.10)
crash' :: D -> SE Sig
crash' :: D -> SE Sig
crash' D
cps = 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 -> SE Sig
rand Sig
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
0.5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig
0.5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
aall Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig -> Sig
resonator (Sig
aall Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
asig Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
kenv2))
    where
        kenv2 :: Sig
kenv2 = [D] -> Sig
expseg [D
0.001, D
0.0466, D
1, D
3.95, D
0.001]

        resonator :: Sig -> Sig
resonator Sig
asig = Sig
0.7 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
0.6 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
kenv18 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
a2
            where
                flt :: D -> Sig
flt D
a = Sig -> Sig -> Sig -> Sig
butbp Sig
asig (D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ D
a D -> D -> D
forall a. Num a => a -> a -> a
* D
cps) (D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ D
0.5 D -> D -> D
forall a. Num a => a -> a -> a
* D
cps)
                a1 :: Sig
a1 = [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 D -> Sig
flt [D
1, D
2.1, D
2.8]
                a2 :: Sig
a2 = Sig -> Sig -> D -> Sig
comb Sig
a1 Sig
0.5 (D
0.5 D -> D -> D
forall a. Fractional a => a -> a -> a
/ D
cps)
                kenv18 :: Sig
kenv18 = [D] -> Sig
expseg [D
0.01, D
0.02, D
1, D
3.98, D
0.01]

        harm :: Sig -> Sig -> [D] -> Sig
harm Sig
k Sig
amp [D]
hs = Sig
k Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
amp Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* [Sig] -> Sig
forall a. Fractional a => [a] -> a
mean ((D -> Sig) -> [D] -> [Sig]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sig -> Sig
osc (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]
hs)

        aall :: Sig
aall = [Sig] -> Sig
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum ([Sig] -> Sig) -> [Sig] -> Sig
forall a b. (a -> b) -> a -> b
$ (Sig -> Sig -> [D] -> Sig) -> [Sig] -> [Sig] -> [[D]] -> [Sig]
forall a b c d. (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d]
zipWith3 Sig -> Sig -> [D] -> Sig
harm [Sig]
weights [Sig]
envelopes [[D]]
harmonics

        harmonics :: [[D]]
harmonics =
            [ [D
1, D
0.89, D
1.12341]
            , [D
2.24, D
2.4 D -> D -> D
forall a. Num a => a -> a -> a
* D
0.98, D
2.14 D -> D -> D
forall a. Num a => a -> a -> a
* D
1.02]
            , [D
3.312, D
3.513312D -> D -> D
forall a. Num a => a -> a -> a
*D
0.89, D
3.123312D -> D -> D
forall a. Num a => a -> a -> a
*D
1.11]
            , [D
4.89, D
5.89D -> D -> D
forall a. Num a => a -> a -> a
*D
0.89, D
6.89 D -> D -> D
forall a. Num a => a -> a -> a
* D
1.03]
            , [D
5.12, D
5.5612D -> D -> D
forall a. Num a => a -> a -> a
*D
1.02, D
7.7312 D -> D -> D
forall a. Num a => a -> a -> a
* D
0.998]
            , [D
6.97, D
6.97 D -> D -> D
forall a. Num a => a -> a -> a
* D
1.02, D
6.97 D -> D -> D
forall a. Num a => a -> a -> a
* D
0.98]
            , [D
7.89, D
7.89 D -> D -> D
forall a. Num a => a -> a -> a
* D
1.02, D
7.89 D -> D -> D
forall a. Num a => a -> a -> a
* D
0.98]
            , [D
1.25, D
1.125 D -> D -> D
forall a. Num a => a -> a -> a
* D
1.004, D
1.134 D -> D -> D
forall a. Num a => a -> a -> a
* D
0.996]
            ]

        weights :: [Sig]
weights = Int -> Sig -> [Sig]
forall a. Int -> a -> [a]
replicate Int
7 Sig
0.2 [Sig] -> [Sig] -> [Sig]
forall a. [a] -> [a] -> [a]
++ [Sig
0.1]

        envelopes :: [Sig]
envelopes = ((D, D) -> Sig) -> [(D, D)] -> [Sig]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(D
a, D
b) -> [D] -> Sig
expseg [D
0.01, D
a, D
1, D
b, D
0.01])
            [ (D
0.0274, D
3.972)
            , (D
0.0264, D
3.973)
            , (D
0.0209, D
3.979)
            , (D
0.0248, D
3.975)
            , (D
0.0283, D
3.971)
            , (D
0.0330, D
3.966)
            , (D
0.0396, D
3.960)
            , (D
0.0209, D
3.979)
            ]

handClap :: SE Sig
handClap :: SE Sig
handClap = D -> SE Sig
handClap' D
400

handClap' :: D -> SE Sig
handClap' :: D -> SE Sig
handClap' D
cps = (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 -> Sig) -> SE Sig -> SE Sig
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> Sig
onNoise (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> SE Sig
rand Sig
1
    where
        kenv1 :: Sig
kenv1 = [D] -> Sig
expseg [D
1.25, D
0.03, D
0.0001]
        kenv2 :: Sig
kenv2 = [D] -> Sig
expseg [D
0.001, D
0.005, D
1, D
0.35, D
0.001]

        onNoise :: Sig -> Sig
onNoise Sig
asig = Sig
aout
            where
                anoise1 :: Sig
anoise1 = Sig
kenv1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
asig
                anoise2 :: Sig
anoise2 = Sig
kenv2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
asig

                adel1 :: Sig
adel1   = Sig
anoise1
                adel2 :: Sig
adel2   = D -> Sig -> Sig
delaySig D
0.01 Sig
anoise1
                adel3 :: Sig
adel3   = D -> Sig -> Sig
delaySig D
0.02 Sig
anoise1
                adel4 :: Sig
adel4   = D -> Sig -> Sig
delaySig D
0.03 Sig
anoise2

                aout :: Sig
aout    = [Sig] -> Sig
forall a. Fractional a => [a] -> a
mean
                    [ Sig -> D -> Sig
rz Sig
adel1 D
2
                    , Sig -> D -> Sig
rz Sig
adel2 D
3
                    , Sig -> D -> Sig
rz Sig
adel3 D
4
                    , Sig -> D -> Sig
rz Sig
adel4 D
5.5
                    ]

                rz :: Sig -> D -> Sig
rz Sig
x D
y = Sig -> Sig -> Sig -> Sig
resonz Sig
x (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
y) (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.5)

--------------------------------------------------
-- sampler

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

bd1, bd2, sn1, sweep, boink, sn2, ohh, chh, bd3, cr, clap :: Sam

bd1 :: Sam
bd1 = SE Sig -> Sam
mkSam SE Sig
dumb
bd2 :: Sam
bd2 = SE Sig -> Sam
mkSam SE Sig
dumbBass

sn1 :: Sam
sn1 = SE Sig -> Sam
mkSam SE Sig
pluckSnare
sweep :: Sam
sweep = SE Sig -> Sam
mkSam SE Sig
sortaKnockSweep
boink :: Sam
boink = SE Sig -> Sam
mkSam SE Sig
metalBoink

sn2 :: Sam
sn2 = SE Sig -> Sam
mkSam SE Sig
snare
ohh :: Sam
ohh = SE Sig -> Sam
mkSam SE Sig
openHihat
chh :: Sam
chh = SE Sig -> Sam
mkSam SE Sig
closedHihat

bd3 :: Sam
bd3 = SE Sig -> Sam
mkSam SE Sig
bassDrum
cr :: Sam
cr  = SE Sig -> Sam
mkSam SE Sig
crash
clap :: Sam
clap = SE Sig -> Sam
mkSam SE Sig
handClap