diff --git a/csound-catalog.cabal b/csound-catalog.cabal
--- a/csound-catalog.cabal
+++ b/csound-catalog.cabal
@@ -1,5 +1,5 @@
 Name:          csound-catalog
-Version:       0.4.0
+Version:       0.5.0
 Cabal-Version: >= 1.6
 License:       BSD3
 License-file:  LICENSE
@@ -27,7 +27,7 @@
 Library
   Ghc-Options:    -Wall
   Build-Depends:
-        base >= 4, base < 5, transformers >= 0.3, csound-expression >= 4.9.0, csound-sampler >=0.0.6.4, sharc-timbre
+        base >= 4, base < 5, transformers >= 0.3, csound-expression >= 5.0.0, csound-sampler >=0.0.6.5, sharc-timbre
   Hs-Source-Dirs:      src/
   Exposed-Modules:
         Csound.Catalog
diff --git a/src/Csound/Catalog/Wave.hs b/src/Csound/Catalog/Wave.hs
--- a/src/Csound/Catalog/Wave.hs
+++ b/src/Csound/Catalog/Wave.hs
@@ -77,7 +77,8 @@
 
     simpleBass, 
 
-    EpianoOsc(..), epiano, 
+    ReleaseTime,
+    EpianoOsc(..), epiano, pianoEnv, xpianoEnv,
 
     noisyChoir, thorWind, mildWind, boom, windWall, 
 
@@ -100,6 +101,10 @@
     -- ** Oscillators
     sharcOsc, sigSharcOsc, rndSharcOsc, rndSigSharcOsc,
     soloSharcOsc, orcSharcOsc, purePadSharcOsc, padSharcOsc,
+
+    -- ** Padsynth
+    PadSharcSpec(..), padsynthSharcOsc, padsynthSharcOsc2,
+    padsynthSharcOsc', padsynthSharcOsc2',
 
     -- ** Instriments
     SharcInstr(..),
diff --git a/src/Csound/Catalog/Wave/Sharc.hs b/src/Csound/Catalog/Wave/Sharc.hs
--- a/src/Csound/Catalog/Wave/Sharc.hs
+++ b/src/Csound/Catalog/Wave/Sharc.hs
@@ -3,6 +3,10 @@
     sharcOsc, sigSharcOsc, rndSharcOsc, rndSigSharcOsc,
     soloSharcOsc, orcSharcOsc, purePadSharcOsc, padSharcOsc,
 
+    -- * Padsynth
+    PadSharcSpec(..), padsynthSharcOsc, padsynthSharcOsc2,
+    padsynthSharcOsc', padsynthSharcOsc2',
+
     -- * Instriments
     SharcInstr(..),
     shViolin, shViolinPizzicato, shViolinMuted, shViolinMarteleBowing, shViolinsEnsemble, shViola, shViolaPizzicato, shViolaMuted,
@@ -30,7 +34,7 @@
 
 harmonics2tab harmonics = sines3 $ fmap (\h -> (fromIntegral $ Sh.harmonicId h, Sh.harmonicAmplitude h, deg $ Sh.harmonicPhase h)) harmonics
 
--- | Get instrument wae table by midi pitch number.
+-- | Get instrument wave table by midi pitch number.
 getInstrTab :: SharcInstr -> Int -> Tab
 getInstrTab (SharcInstr instr) n = note2tab $ Sh.instrNotes instr !! idx
     where
@@ -95,6 +99,75 @@
 -- | Plays orchestrated instrument with pad-like envelope
 padSharcOsc :: SharcInstr -> D -> SE Sig
 padSharcOsc instr cps = mul (fades 0.65 0.75) $ uni (rndSharcOsc instr . ir) (sig cps)
+
+---------------------------------------------------------------------------
+-- padsynth
+
+data PadSharcSpec = PadSharcSpec {
+        padSharcBandwidth :: Double,
+        padSharcSize      :: Int
+    }
+
+instance Default PadSharcSpec where
+    def = PadSharcSpec 15 8
+
+padsynthSharcOsc :: SharcInstr -> D -> SE Sig
+padsynthSharcOsc = padsynthSharcOsc' def
+
+padsynthSharcOsc2 :: SharcInstr -> D -> SE Sig2
+padsynthSharcOsc2 = padsynthSharcOsc2' def
+
+padsynthSharcOsc2' :: PadSharcSpec -> SharcInstr -> D -> SE Sig2
+padsynthSharcOsc2' spec instr freq = padsynthOscMultiCps2 (getSpecIntervals spec instr) freq
+
+padsynthSharcOsc' :: PadSharcSpec -> SharcInstr -> D -> SE Sig
+padsynthSharcOsc' spec instr freq = padsynthOscMultiCps (getSpecIntervals spec instr) freq
+
+getSpecIntervals spec (SharcInstr instr) = zip borderFreqs specs
+    where 
+        groups = splitTo (padSharcSize spec) (Sh.instrNotes instr)
+        medians = fmap getMedian groups
+        borders = fmap getBorder groups
+
+        specs   = fmap (note2padsynth $ padSharcBandwidth spec) medians
+        borderFreqs = fmap (Sh.pitchFund . Sh.notePitch) borders
+
+
+splitTo :: Int -> [a] -> [[a]]
+splitTo n as = go size as
+    where 
+        size = max 1 (length as `div` n)
+
+        go :: Int -> [a] -> [[a]]
+        go n bs
+            | null ys   = [xs]
+            | otherwise = xs : go n ys
+            where
+                (xs, ys) = splitAt n bs
+
+getMedian :: [a] -> a
+getMedian as
+    | null as   = error "getMedian: Csound.Catalog.Wave.Sharc.hs empty list"
+    | otherwise = as !! (length as `div` 2)
+
+getBorder :: [a] -> a
+getBorder as
+    | null as   = error "getMedian: Csound.Catalog.Wave.Sharc.hs empty list"
+    | otherwise = last as
+
+note2padsynth :: Double -> Sh.Note -> PadsynthSpec
+note2padsynth bandwidth note = (defPadsynthSpec bandwidth normAmps) { padsynthFundamental = Sh.pitchFund (Sh.notePitch note) }
+    where 
+        normAmps = fmap ( / maxAmp) amps
+        amps = fmap Sh.harmonicAmplitude $ Sh.noteHarmonics note
+        maxAmp = maximum amps
+
+
+toStereoOsc :: (a -> SE Sig) -> (a -> SE Sig2)
+toStereoOsc f x = do
+    left  <- f x
+    right <- f x
+    return (left, right)
 
 ---------------------------------------------------------------------------
 -- sharc instr
diff --git a/src/Csound/Catalog/Wave/Thor.hs b/src/Csound/Catalog/Wave/Thor.hs
--- a/src/Csound/Catalog/Wave/Thor.hs
+++ b/src/Csound/Catalog/Wave/Thor.hs
@@ -8,7 +8,8 @@
 
 	simpleBass, 
 
-	EpianoOsc(..), epiano, 
+	ReleaseTime,
+	EpianoOsc(..), epiano, pianoEnv, xpianoEnv,
 
 	noisyChoir, thorWind, mildWind, boom, windWall, 
 
@@ -95,6 +96,8 @@
 ------------------------------
 -- 4 Multi osc (unision)
 
+type ReleaseTime = D
+
 data EpianoOsc = EpianoOsc 
 	{ epianoOscChorusNum :: Int
 	, epianoOscChorusAmt :: Sig
@@ -102,19 +105,27 @@
 	, epianoOscWeight    :: Sig
 	}
 
-epiano :: [EpianoOsc] -> (D, D) -> SE Sig
-epiano xs (amp, cps) = mul (sig amp * leg 0.001 sust 0 rel) $ at (mlp (2500 + 4500 * (leg 0.085 3 0 0.1)) 0.25) $
-	fmap sum $ mapM (\x -> mul (epianoOscWeight x) $ multiRndSE (epianoOscChorusNum x) (epianoOscChorusAmt x) (detune (epianoOscNum x) rndOsc) (sig cps)) xs
- -- (multiRndSE 4 5 rndOsc + multiRndSE 8 10 (detune (2.01) rndOsc))
- 	where 
- 		sust = amp + 2 + (0.7 - 3 * k ** 2)
- 		rel  = (amp / 10) + 0.05 - (k / 10)
- 		k    = cps / 1000
+xpianoEnv :: ReleaseTime -> (D, D) -> Sig
+xpianoEnv userRelease (amp, cps) = sig amp * xeg 0.01 sust 0.25 rel
+	where
+ 		sust = maxB (amp + 2 + (0.7 - 3 * k ** 2)) 0.1
+ 		rel  = userRelease + maxB ((amp / 5) + 0.05 - (k / 10)) 0.02
+ 		k    = cps / 3500
 
+pianoEnv :: ReleaseTime -> (D, D) -> Sig
+pianoEnv userRelease (amp, cps) = sig amp * leg 0.001 sust 0.25 rel
+	where
+ 		sust = maxB (amp + 2 + (0.7 - 3 * k ** 2)) 0.1
+ 		rel  = userRelease + maxB ((amp / 5) + 0.05 - (k / 10)) 0.02
+ 		k    = cps / 3500
+
+epiano :: ReleaseTime -> [EpianoOsc] -> (D, D) -> SE Sig
+epiano releaseTime xs (amp, cps) = mul (pianoEnv releaseTime (amp, cps)) $ at (mlp (2500 + 4500 * (leg 0.085 3 0 0.1)) 0.25) $
+	fmap sum $ mapM (\x -> mul (epianoOscWeight x) $ multiRndSE (epianoOscChorusNum x) (epianoOscChorusAmt x) (detune (epianoOscNum x) rndOsc) (sig cps)) xs 
+
 ------------------------------
 -- 5 noise
 
--- noisyChor numberOfFilters bandWidthRatio cps
 noisyChoir :: Int -> Sig -> Sig -> SE Sig
 noisyChoir n ratio cps = mul 0.5 $ genGhostChoir white [1, 1] [1, 0.5] n (5 + 300 ** ratio) cps
 
diff --git a/src/Csound/Patch.hs b/src/Csound/Patch.hs
--- a/src/Csound/Patch.hs
+++ b/src/Csound/Patch.hs
@@ -33,6 +33,7 @@
 	Choir(..), choirA', choirO', choirU', choirE',
 
 	windSings, noisyChoir, longNoisyChoir, noisyChoir', longNoisyChoir', NoisyChoir(..),
+	noisyRise, noisySpiral, noisySpiral',
 
 	-- * Pad
 	pwPad, triPad, nightPad, overtonePad, caveOvertonePad,
@@ -142,6 +143,56 @@
 	SharcInstr,
 	soloSharc, orcSharc, padSharc, purePadSharc, dreamSharc, dreamSharc',
 
+	-- ** Padsynth instruments
+	PadSharcSpec(..),
+
+	psOrganSharc, psOrganSharc', psLargeOrganSharc, psLargeOrganSharc', psPianoSharc, psPianoSharc',
+	xpsPianoSharc, xpsPianoSharc',
+	psPadSharc, psPadSharc', psSoftPadSharc, psSoftPadSharc',
+	psMagicPadSharc, psMagicPadSharc', psMagicSoftPadSharc, psMagicSoftPadSharc',
+	psLargePianoSharc, psLargePianoSharc',
+	xpsLargePianoSharc,
+	xpsLargePianoSharc',
+
+	-- *** Deep pads
+	psDeepPadSharc, psDeepPadSharc', psDeepSoftPadSharc, psDeepSoftPadSharc',
+	psDeepMagicPadSharc, psDeepMagicPadSharc', psDeepMagicSoftPadSharc, psDeepMagicSoftPadSharc',
+
+	--- *** Crossfades
+	psPadSharcCfd, psPadSharcCfd', psPadSharcCfd4, psPadSharcCfd4', psDeepPadSharcCfd, psDeepPadSharcCfd', 
+	psDeepPadSharcCfd4, psDeepPadSharcCfd4', psSoftPadSharcCfd, psSoftPadSharcCfd', psSoftPadSharcCfd4, psSoftPadSharcCfd4',
+	psDeepSoftPadSharcCfd, psDeepSoftPadSharcCfd', psDeepSoftPadSharcCfd4, psDeepSoftPadSharcCfd4',
+
+	-- *** High resolution Padsynth instruments
+	psOrganSharcHifi,
+	psLargeOrganSharcHifi,
+	psPianoSharcHifi,
+	xpsPianoSharcHifi,
+	psPadSharcHifi,
+	psSoftPadSharcHifi,
+	psMagicPadSharcHifi,
+	psMagicSoftPadSharcHifi,
+	psLargePianoSharcHifi,	
+	xpsLargePianoSharcHifi,
+
+	-- *** Vedic pads
+	-- | Deep spiritual pads.
+	vedicPad, vedicPadCfd, vedicPadCfd4, vibhu, rishi, agni, prakriti, rajas, avatara, bhumi,
+
+	--- *** High resolution vedic pads
+	-- | Deep spiritual pads.
+	vedicPadHifi, vibhuHifi, rishiHifi, agniHifi, prakritiHifi, rajasHifi, avataraHifi, bhumiHifi,
+
+	--- *** Low resolution vedic pads
+	-- | Deep spiritual pads.
+	vedicPadLofi, vibhuLofi, rishiLofi, agniLofi, prakritiLofi, rajasLofi, avataraLofi, bhumiLofi,
+
+	--- *** Crossfade vedic pads
+	-- | Crossfade between deep spiritual pads. All pads take in padsynthBandwidth and crossfade level as parameters.
+	vibhuRishi, vibhuAgni, vibhuPrakriti, vibhuRajas, vibhuAvatara, vibhuBhumi, rishiAgni, rishiPrakriti,
+	rishiRajas, rishiAvatara, rishiBhumi, agniPrakriti, agniRajas, agniAvatara, agniBhumi, prakritiRajas,
+	prakritiAvatara, prakritiBhumi, rajasAvatara, rajasBhumi, avataraBhumi,
+
 	-- ** concrete instruments
 	shViolin, shViolinPizzicato, shViolinMuted, shViolinMarteleBowing, shViolinsEnsemble, shViola, shViolaPizzicato, shViolaMuted,
     shViolaMarteleBowing, shTuba, shTromboneMuted, shTrombone, shPiccolo, shOboe, shFrenchHornMuted, shFrenchHorn, shFlute,
@@ -177,7 +228,9 @@
     femaleA, femaleE, femaleIY, femaleO, femaleOO)
 
 import Csound.Catalog.Wave(Accordeon(..),
+	ReleaseTime,
 	SharcInstr,
+	PadSharcSpec(..),
 	shViolin, shViolinPizzicato, shViolinMuted, shViolinMarteleBowing, shViolinsEnsemble, shViola, shViolaPizzicato, shViolaMuted,
     shViolaMarteleBowing, shTuba, shTromboneMuted, shTrombone, shPiccolo, shOboe, shFrenchHornMuted, shFrenchHorn, shFlute,
     shEnglishHorn, shClarinetEflat, shTrumpetMutedC, shTrumpetC, shContrabassClarinet, shContrabassoon, shCello, shCelloPizzicato,
@@ -245,16 +298,19 @@
 	{ patchInstr = at fromMono . mul 0.75 . onCps (C.fmFlavio 6 3)
 	, patchFx    = fx1 0.15 smallHall2 }
 
+epianoReleaseTime :: ReleaseTime
+epianoReleaseTime = 0.25
+
 epiano2 = addHammer 0.15 $ Patch 
-	{ patchInstr = mul 1.125 . at fromMono . (onCps $ C.epiano [C.EpianoOsc 4 5 1 1, C.EpianoOsc 8 10 2.01 1])
+	{ patchInstr = mul 1.125 . at fromMono . (onCps $ C.epiano epianoReleaseTime [C.EpianoOsc 4 5 1 1, C.EpianoOsc 8 10 2.01 1])
 	, patchFx    = fx1 0.25 smallHall2 }
 
 epianoHeavy = addHammer 0.15 $ Patch 
-	{ patchInstr = mul 1.125 . at fromMono . (onCps $ C.epiano [C.EpianoOsc 4 5 1 1, C.EpianoOsc 8 10 2.01 1, C.EpianoOsc 8 15 0.5 0.5])
+	{ patchInstr = mul 1.125 . at fromMono . (onCps $ C.epiano epianoReleaseTime [C.EpianoOsc 4 5 1 1, C.EpianoOsc 8 10 2.01 1, C.EpianoOsc 8 15 0.5 0.5])
 	, patchFx    = fx1 0.2 smallHall2 }
 
 epianoBright = addHammer 0.15 $ Patch 
-	{ patchInstr = mul 1.12 . at fromMono . (onCps $ C.epiano [C.EpianoOsc 4 5 1 1, C.EpianoOsc 8 10 3.01 1, C.EpianoOsc 8 15 5 0.5, C.EpianoOsc 8 4 7 0.3])
+	{ patchInstr = mul 1.12 . at fromMono . (onCps $ C.epiano epianoReleaseTime [C.EpianoOsc 4 5 1 1, C.EpianoOsc 8 10 3.01 1, C.EpianoOsc 8 15 5 0.5, C.EpianoOsc 8 4 7 0.3])
 	, patchFx    = fx1 0.2 smallHall2 }
 
 vibraphonePiano1 = addHammer 0.15 $ smallVibraphone1 { patchInstr = mul (1.5 * fadeOut 0.25) . at (mlp 6500 0.1). patchInstr smallVibraphone1 }
@@ -616,7 +672,7 @@
 	, patchFx    = fx1 0.35 smallHall2 }
 
 overtoneLeadFx :: Sig2 -> SE Sig2
-overtoneLeadFx x = fmap magicCave2 $ mixAt 0.2 (echo 0.25 0.45) (return x)
+overtoneLeadFx x = fmap magicCave2 $ mixAt 0.2 (echo 0.25 0.45) x
 
 overtoneLead :: Patch2
 overtoneLead = Patch
@@ -1424,4 +1480,548 @@
 -- | Dream Pad patch made with SHARC oscillators.
 dreamSharc' :: SharcInstr -> Sig -> Patch2
 dreamSharc' instr brightness = dreamPadBy' brightness (\cps -> C.rndSigSharcOsc instr (ir cps) cps) 
+
+
+type PadsynthBandwidth = Double
+
+-- | Padsynth instrument with organ-like amplitude envelope.
+psOrganSharc :: SharcInstr -> Patch2
+psOrganSharc = psOrganSharc' def
+
+hiDef = def { padSharcSize = 35 }
+
+-- | High resolution Padsynth instrument with organ-like amplitude envelope.
+psOrganSharcHifi :: SharcInstr -> Patch2
+psOrganSharcHifi = psOrganSharc' hiDef
+
+-- | Padsynth instrument with organ-like amplitude envelope. We can specify aux parameters.
+psOrganSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+psOrganSharc' spec sh = Patch 
+	{ patchInstr = mul (0.5 * fades 0.01 0.1) . onCps (C.padsynthSharcOsc2' spec sh)
+	, patchFx    = [FxSpec 0.25 (return . smallHall2), FxSpec 1 (return . (at $ mul 1.4 . saturator 0.75))]
+	}
+
+-- | Padsynth instrument with organ-like amplitude envelope and huge reverb.
+psLargeOrganSharc :: SharcInstr -> Patch2
+psLargeOrganSharc = psLargeOrganSharc' def
+
+-- | High resolution Padsynth instrument with organ-like amplitude envelope and huge reverb.
+psLargeOrganSharcHifi :: SharcInstr -> Patch2
+psLargeOrganSharcHifi = psLargeOrganSharc' hiDef
+
+-- | Padsynth instrument with organ-like amplitude envelope and huge reverb.
+psLargeOrganSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+psLargeOrganSharc' spec sh = Patch 
+	{ patchInstr = mul (0.65 * fades 0.01 0.1) . onCps (C.padsynthSharcOsc2' spec sh)
+	, patchFx    = [FxSpec 0.35 (return . largeHall2), FxSpec 1 (return . (at $ mul 1.4 . saturator 0.75))]
+	}
+
+-- | Padsynth instrument with piano-like amplitude envelope.
+psPianoSharc :: ReleaseTime -> SharcInstr -> Patch2
+psPianoSharc = psPianoSharc' def
+
+-- | High resolution Padsynth instrument with piano-like amplitude envelope.
+psPianoSharcHifi :: ReleaseTime -> SharcInstr -> Patch2
+psPianoSharcHifi = psPianoSharc' hiDef
+ 
+-- | Padsynth instrument with piano-like amplitude envelope. We can specify aux parameters.
+psPianoSharc' :: PadSharcSpec -> ReleaseTime -> SharcInstr -> Patch2
+psPianoSharc' spec releaseTime sh = Patch 
+    { patchInstr = \ampCps -> mul (0.75 * C.pianoEnv releaseTime ampCps) $ onCps (C.padsynthSharcOsc2' spec sh) ampCps
+    , patchFx    = [FxSpec 0.15 (return . smallHall2), FxSpec 1 (return . (at $ mul 1.4 . saturator 0.75))]
+    }
+
+
+-- | Padsynth instrument with piano-like amplitude envelope.
+xpsPianoSharc :: ReleaseTime -> SharcInstr -> Patch2
+xpsPianoSharc = xpsPianoSharc' def
+
+-- | High resolution Padsynth instrument with piano-like amplitude envelope.
+xpsPianoSharcHifi :: ReleaseTime -> SharcInstr -> Patch2
+xpsPianoSharcHifi = xpsPianoSharc' hiDef
+
+-- | Padsynth instrument with piano-like amplitude envelope. We can specify aux parameters.
+xpsPianoSharc' :: PadSharcSpec -> ReleaseTime -> SharcInstr -> Patch2
+xpsPianoSharc' spec releaseTime sh = addHammer 0.12 $ Patch 
+    { patchInstr = \ampCps -> mul (0.75 * C.xpianoEnv releaseTime ampCps) $ onCps (C.padsynthSharcOsc2' spec sh) ampCps
+    , patchFx    = [FxSpec 0.15 (return . smallHall2), FxSpec 1 (return . (at $ mul 1.4 . saturator 0.75))]
+    }
+
+
+-- | Padsynth instrument with piano-like amplitude envelope.
+psLargePianoSharc :: ReleaseTime -> SharcInstr -> Patch2
+psLargePianoSharc = psLargePianoSharc' def
+
+-- | High resolution Padsynth instrument with piano-like amplitude envelope.
+psLargePianoSharcHifi :: ReleaseTime -> SharcInstr -> Patch2
+psLargePianoSharcHifi = psLargePianoSharc' hiDef
+
+-- | Padsynth instrument with piano-like amplitude envelope. We can specify aux parameters.
+psLargePianoSharc' :: PadSharcSpec -> ReleaseTime -> SharcInstr -> Patch2
+psLargePianoSharc' spec releaseTime sh = Patch 
+    { patchInstr = \ampCps -> mul (0.75 * C.pianoEnv releaseTime ampCps) $ onCps (C.padsynthSharcOsc2' spec sh) ampCps
+    , patchFx    = [FxSpec 0.15 (return . largeHall2), FxSpec 1 (return . (at $ mul 1.4 . saturator 0.75))]
+    }
+
+-- | Padsynth instrument with piano-like amplitude envelope.
+xpsLargePianoSharc :: ReleaseTime -> SharcInstr -> Patch2
+xpsLargePianoSharc = xpsLargePianoSharc' def
+
+-- | High resolution Padsynth instrument with piano-like amplitude envelope.
+xpsLargePianoSharcHifi :: ReleaseTime -> SharcInstr -> Patch2
+xpsLargePianoSharcHifi = xpsLargePianoSharc' hiDef
+
+-- | Padsynth instrument with piano-like amplitude envelope. We can specify aux parameters.
+xpsLargePianoSharc' :: PadSharcSpec -> ReleaseTime -> SharcInstr -> Patch2
+xpsLargePianoSharc' spec releaseTime sh = Patch 
+    { patchInstr = \ampCps -> mul (0.75 * C.xpianoEnv releaseTime ampCps) $ onCps (C.padsynthSharcOsc2' spec sh) ampCps
+    , patchFx    = [FxSpec 0.15 (return . largeHall2), FxSpec 1 (return . (at $ mul 1.4 . saturator 0.75))]
+    }
+
+psPadFilterBy :: Sig -> Sig -> (Sig -> Sig -> Sig -> Sig) -> (D, D) -> Sig -> Sig
+psPadFilterBy rippleLevel q resonFilter ampCps = resonFilter (0.3 * (sig $ snd ampCps) + 2500 + 2000 * fades 0.15 (0.6 + rel ampCps) + rippleLevel * slope 0.75 0.5 * osc 8) q
+	where rel (amp, cps) = amp - cps / 3500
+
+psPadFilter = psPadFilterBy 75 15 (\cfq q x -> lowpass2 x cfq q) 
+psSoftPadFilter = psPadFilterBy 350 0.15 mlp
+
+deepOsc :: (Num a, SigSpace a) => (D -> a) -> (D -> a)
+deepOsc f x = mul 0.5 (f x + f (x / 2))
+
+psOsc spec sh x = C.padsynthSharcOsc2' spec sh x
+psDeepOsc spec sh = deepOsc (C.padsynthSharcOsc2' spec sh)
+
+psOscCfd koeff (spec1, sh1) (spec2, sh2) x = cfd koeff (C.padsynthSharcOsc2' spec1 sh1 x) (C.padsynthSharcOsc2' spec2 sh2 x)
+psOscCfd4 koeffX koeffY (spec1, sh1) (spec2, sh2) (spec3, sh3) (spec4, sh4) x = cfd4 koeffX koeffY (C.padsynthSharcOsc2' spec1 sh1 x) (C.padsynthSharcOsc2' spec2 sh2 x) (C.padsynthSharcOsc2' spec3 sh3 x) (C.padsynthSharcOsc2' spec4 sh4 x)
+
+psDeepOscCfd koeff (spec1, sh1) (spec2, sh2) = deepOsc (psOscCfd koeff (spec1, sh1) (spec2, sh2))
+psDeepOscCfd4 koeffX koeffY (spec1, sh1) (spec2, sh2) (spec3, sh3) (spec4, sh4) = deepOsc (psOscCfd4 koeffX koeffY (spec1, sh1) (spec2, sh2) (spec3, sh3) (spec4, sh4))
+
+genPsPad :: (Sig2 -> Sig2) -> ((D, D) -> Sig -> Sig) -> (D -> SE Sig2) -> Patch2
+genPsPad effect filter wave =  Patch 
+	{ patchInstr = \ampCps -> mul (0.45 * fades 0.5 (0.6 + rel ampCps)) $ onCps (at (filter ampCps) . wave) ampCps
+	, patchFx    =  [FxSpec 0.25 (return . effect), FxSpec 0.5 (return . (at $ mul 1.6 . saturator 0.75)), FxSpec 0.3 (at $ echo 0.125 0.65)]
+	}
+	where rel (amp, cps) = amp - cps / 3500
+
+-- | Padsynth instrument with pad-like amplitude envelope.
+psPadSharc :: SharcInstr -> Patch2
+psPadSharc = psPadSharc' def
+
+-- | High resolution Padsynth instrument with pad-like amplitude envelope.
+psPadSharcHifi :: SharcInstr -> Patch2
+psPadSharcHifi = psPadSharc' hiDef
+
+-- | Padsynth instrument with pad-like amplitude envelope.
+psPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+psPadSharc' spec sh = genPsPad largeHall2 psPadFilter (psOsc spec sh)
+
+-- | Padsynth instrument with pad-like amplitude envelope. Plays a note and one octave below it.
+psDeepPadSharc :: SharcInstr -> Patch2
+psDeepPadSharc = psDeepPadSharc' def
+
+psDeepPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+psDeepPadSharc' spec sh = genPsPad largeHall2 psPadFilter (psDeepOsc spec sh)
+
+psPadSharcCfd :: Sig -> SharcInstr -> SharcInstr -> Patch2
+psPadSharcCfd k sh1 sh2 = psPadSharcCfd' k (def, sh1) (def, sh2)
+
+-- | Crossfade between timbres.
+psPadSharcCfd' :: Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
+psPadSharcCfd' k spec1 spec2 = genPsPad largeHall2 psPadFilter (psOscCfd k spec1 spec2)
+
+psPadSharcCfd4 :: Sig -> Sig -> SharcInstr -> SharcInstr -> SharcInstr -> SharcInstr -> Patch2
+psPadSharcCfd4 k1 k2 sh1 sh2 sh3 sh4 = psPadSharcCfd4' k1 k2 (def, sh1) (def, sh2) (def, sh3) (def, sh4)
+
+-- | Crossfade between timbres.
+psPadSharcCfd4' :: Sig -> Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
+psPadSharcCfd4' k1 k2  spec1 spec2 spec3 spec4 = genPsPad largeHall2 psPadFilter (psOscCfd4 k1 k2 spec1 spec2 spec3 spec4)
+
+psDeepPadSharcCfd :: Sig -> SharcInstr -> SharcInstr -> Patch2
+psDeepPadSharcCfd k sh1 sh2 = psDeepPadSharcCfd' k (def, sh1) (def, sh2)
+
+-- | Crossfade between timbres.
+psDeepPadSharcCfd' :: Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
+psDeepPadSharcCfd' k spec1 spec2 = genPsPad largeHall2 psPadFilter (psDeepOscCfd k spec1 spec2)
+
+psDeepPadSharcCfd4 :: Sig -> Sig -> SharcInstr -> SharcInstr -> SharcInstr -> SharcInstr -> Patch2
+psDeepPadSharcCfd4 k1 k2 sh1 sh2 sh3 sh4 = psDeepPadSharcCfd4' k1 k2 (def, sh1) (def, sh2) (def, sh3) (def, sh4)
+
+-- | Crossfade between timbres.
+psDeepPadSharcCfd4' :: Sig -> Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
+psDeepPadSharcCfd4' k1 k2  spec1 spec2 spec3 spec4 = genPsPad largeHall2 psPadFilter (psDeepOscCfd4 k1 k2 spec1 spec2 spec3 spec4)
+
+
+-- | Padsynth instrument with pad-like amplitude envelope and moog filter.
+psSoftPadSharc :: SharcInstr -> Patch2
+psSoftPadSharc = psSoftPadSharc' def
+
+-- | High resolution Padsynth instrument with pad-like amplitude envelope and moog filter (resource hungry).
+psSoftPadSharcHifi :: SharcInstr -> Patch2
+psSoftPadSharcHifi = psSoftPadSharc' hiDef
+
+-- | Padsynth instrument with pad-like amplitude envelope and moog filter.
+-- We can specify aux parameters.
+psSoftPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+psSoftPadSharc' spec sh = genPsPad largeHall2 psSoftPadFilter (psOsc spec sh)
+
+-- | Padsynth instrument with pad-like amplitude envelope and moog filter. Plays a note and one octave below it.
+psDeepSoftPadSharc :: SharcInstr -> Patch2
+psDeepSoftPadSharc = psDeepSoftPadSharc' def
+
+psDeepSoftPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+psDeepSoftPadSharc' spec sh = genPsPad largeHall2 psSoftPadFilter (psDeepOsc spec sh)
+
+
+psSoftPadSharcCfd :: Sig -> SharcInstr -> SharcInstr -> Patch2
+psSoftPadSharcCfd k sh1 sh2 = psSoftPadSharcCfd' k (def, sh1) (def, sh2)
+
+-- | Crossfade between timbres.
+psSoftPadSharcCfd' :: Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
+psSoftPadSharcCfd' k spec1 spec2 = genPsPad largeHall2 psSoftPadFilter (psOscCfd k spec1 spec2)
+
+psSoftPadSharcCfd4 :: Sig -> Sig -> SharcInstr -> SharcInstr -> SharcInstr -> SharcInstr -> Patch2
+psSoftPadSharcCfd4 k1 k2 sh1 sh2 sh3 sh4 = psSoftPadSharcCfd4' k1 k2 (def, sh1) (def, sh2) (def, sh3) (def, sh4)
+
+-- | Crossfade between timbres.
+psSoftPadSharcCfd4' :: Sig -> Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
+psSoftPadSharcCfd4' k1 k2  spec1 spec2 spec3 spec4 = genPsPad largeHall2 psSoftPadFilter (psOscCfd4 k1 k2 spec1 spec2 spec3 spec4)
+
+psDeepSoftPadSharcCfd :: Sig -> SharcInstr -> SharcInstr -> Patch2
+psDeepSoftPadSharcCfd k sh1 sh2 = psDeepSoftPadSharcCfd' k (def, sh1) (def, sh2)
+
+-- | Crossfade between timbres.
+psDeepSoftPadSharcCfd' :: Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
+psDeepSoftPadSharcCfd' k spec1 spec2 = genPsPad largeHall2 psSoftPadFilter (psDeepOscCfd k spec1 spec2)
+
+psDeepSoftPadSharcCfd4 :: Sig -> Sig -> SharcInstr -> SharcInstr -> SharcInstr -> SharcInstr -> Patch2
+psDeepSoftPadSharcCfd4 k1 k2 sh1 sh2 sh3 sh4 = psDeepSoftPadSharcCfd4' k1 k2 (def, sh1) (def, sh2) (def, sh3) (def, sh4)
+
+-- | Crossfade between timbres.
+psDeepSoftPadSharcCfd4' :: Sig -> Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
+psDeepSoftPadSharcCfd4' k1 k2  spec1 spec2 spec3 spec4 = genPsPad largeHall2 psSoftPadFilter (psDeepOscCfd4 k1 k2 spec1 spec2 spec3 spec4)
+
+
+-- | Padsynth instrument with pad-like amplitude envelope and @magicCave2@ reverb.
+psMagicPadSharc :: SharcInstr -> Patch2
+psMagicPadSharc = psMagicPadSharc' def
+
+-- | High resolution Padsynth instrument with pad-like amplitude envelope and @magicCave2@ reverb.
+psMagicPadSharcHifi :: SharcInstr -> Patch2
+psMagicPadSharcHifi = psMagicPadSharc' hiDef
+
+-- | Padsynth instrument with pad-like amplitude envelope and @magicCave2@ reverb.
+psMagicPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+psMagicPadSharc' spec sh = genPsPad magicCave2 psPadFilter (psOsc spec sh)
+
+-- | Padsynth instrument with pad-like amplitude envelope and @magicCave2@ reverb. Plays a note and one octave below it.
+psDeepMagicPadSharc :: SharcInstr -> Patch2
+psDeepMagicPadSharc = psDeepMagicPadSharc' def
+
+-- | Padsynth instrument with pad-like amplitude envelope and @magicCave2@ reverb. Plays a note and one octave below it.
+psDeepMagicPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+psDeepMagicPadSharc' spec sh = genPsPad magicCave2 psPadFilter (psDeepOsc spec sh)
+
+-- | Padsynth instrument with pad-like amplitude envelope and moog filter and @magicCave2@ reverb (resource hungry).
+psMagicSoftPadSharc :: SharcInstr -> Patch2
+psMagicSoftPadSharc = psMagicSoftPadSharc' def
+
+-- | High resolution Padsynth instrument with pad-like amplitude envelope and moog filter and @magicCave2@ reverb (resource hungry).
+psMagicSoftPadSharcHifi :: SharcInstr -> Patch2
+psMagicSoftPadSharcHifi = psMagicSoftPadSharc' hiDef
+
+-- | Padsynth instrument with pad-like amplitude envelope and moog filter and @magicCave2@ reverb (resource hungry).
+-- We can specify aux parameters.
+psMagicSoftPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+psMagicSoftPadSharc' spec sh = genPsPad magicCave2 psSoftPadFilter (psOsc spec sh)
+
+
+-- | Padsynth instrument with pad-like amplitude envelope and moog filter and @magicCave2@ reverb (resource hungry).
+psDeepMagicSoftPadSharc :: SharcInstr -> Patch2
+psDeepMagicSoftPadSharc = psDeepMagicSoftPadSharc' def
+
+-- | Padsynth instrument with pad-like amplitude envelope and moog filter and @magicCave2@ reverb (resource hungry).
+-- We can specify aux parameters.
+psDeepMagicSoftPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+psDeepMagicSoftPadSharc' spec sh = genPsPad magicCave2 psSoftPadFilter (psDeepOsc spec sh)
+
+vedicSize = 15
+vedicSizeHifi = 32
+vedicSizeLofi = 4
+
+-- | Deep spiritual drones.
+--
+-- > vedicPad sharcInstrument bandwidth
+--
+-- Good values for bandwidth lies in the interval [0, 120]
+vedicPad :: SharcInstr -> PadsynthBandwidth -> Patch2
+vedicPad instr bandwidth = mul 0.8 $ 
+	addPreFx 0.45 (pingPong 0.25 0.65 0.5) $ 
+	psDeepSoftPadSharc' (def { padSharcBandwidth = bandwidth, padSharcSize = 15 })  instr
+
+-- | Deep spiritual drones. Crossfade between two instruments.
+--
+-- > vedicPadCfd cfdLevel sharcInstrument1 sharcInstrument2 bandwidth
+--
+-- Good values for bandwidth lies in the interval [0, 120]
+vedicPadCfd :: Sig -> SharcInstr -> SharcInstr -> PadsynthBandwidth -> Patch2
+vedicPadCfd k instr1 instr2 bandwidth = mul 0.8 $ 
+	addPreFx 0.45 (pingPong 0.25 0.65 0.5) $ 
+	psDeepSoftPadSharcCfd' k (def { padSharcBandwidth = bandwidth, padSharcSize = 15 },  instr1) (def { padSharcBandwidth = bandwidth, padSharcSize = 15 },  instr2)
+
+-- | Deep spiritual drones. Crossfade between four instruments.
+--
+-- > vedicPadCfd4 cfdLevelX cfdLevelY sharcInstrument1 sharcInstrument2 sharcInstrument3 sharcInstrument4 bandwidth
+--
+-- Good values for bandwidth lies in the interval [0, 120]
+vedicPadCfd4 :: Sig -> Sig -> SharcInstr -> SharcInstr -> SharcInstr -> SharcInstr -> PadsynthBandwidth -> Patch2
+vedicPadCfd4 kX kY instr1 instr2 instr3 instr4 bandwidth = mul 0.8 $ 
+	addPreFx 0.45 (pingPong 0.25 0.65 0.5) $ 
+	psDeepSoftPadSharcCfd4' kX kY 
+		(def { padSharcBandwidth = bandwidth, padSharcSize = 15 },  instr1) (def { padSharcBandwidth = bandwidth, padSharcSize = 15 },  instr2)
+		(def { padSharcBandwidth = bandwidth, padSharcSize = 15 },  instr3) (def { padSharcBandwidth = bandwidth, padSharcSize = 15 },  instr4)
+
+
+-- | Deep spiritual drones. Contains twice as many ftables as for simple @vedicPad@.
+--
+-- > vedicPad sharcInstrument bandwidth
+--
+-- Good values for bandwidth lies in the interval [0, 120]
+vedicPadHifi :: SharcInstr -> PadsynthBandwidth -> Patch2
+vedicPadHifi instr bandwidth = mul 0.8 $ 
+	addPreFx 0.45 (pingPong 0.25 0.65 0.5) $ 
+	deepPad $ 
+	psSoftPadSharc' (def { padSharcBandwidth = bandwidth, padSharcSize = 32 })  instr
+
+-- | Deep spiritual drones. Contains only quater of ftables as for simple @vedicPad@.
+--
+-- > vedicPad sharcInstrument bandwidth
+--
+-- Good values for bandwidth lies in the interval [0, 120]
+vedicPadLofi :: SharcInstr -> PadsynthBandwidth -> Patch2
+vedicPadLofi instr bandwidth = mul 0.8 $ 
+	addPreFx 0.45 (pingPong 0.25 0.65 0.5) $ 
+	deepPad $ 
+	psSoftPadSharc' (def { padSharcBandwidth = bandwidth, padSharcSize = 4 })  instr
+
+-- | Eminent
+vibhu :: PadsynthBandwidth -> Patch2
+vibhu = vedicPad shVibhu
+
+shVibhu = shAltoFlute
+
+-- | Wise
+rishi :: PadsynthBandwidth -> Patch2
+rishi = vedicPad shRishi
+
+shRishi = shFlute
+
+-- | Fire
+agni :: PadsynthBandwidth -> Patch2
+agni  =  vedicPad shAgni
+
+shAgni = shCello
+
+-- | Material nature
+prakriti :: PadsynthBandwidth -> Patch2
+prakriti = vedicPad shPrakriti
+
+shPrakriti = shClarinet
+
+-- | Desire
+rajas :: PadsynthBandwidth -> Patch2
+rajas = vedicPad shRajas
+
+shRajas = shViolin
+
+-- | the hero
+avatara :: PadsynthBandwidth -> Patch2
+avatara = vedicPad shAvatara
+
+shAvatara = shFrenchHorn
+
+-- | Earth
+bhumi :: PadsynthBandwidth -> Patch2
+bhumi = vedicPad shBhumi
+
+shBhumi = shViolinsEnsemble
+
+-- | Eminent
+vibhuHifi :: PadsynthBandwidth -> Patch2
+vibhuHifi = vedicPadHifi shAltoFlute
+
+-- | Wise
+rishiHifi :: PadsynthBandwidth -> Patch2
+rishiHifi = vedicPadHifi shFlute
+
+-- | Fire
+agniHifi :: PadsynthBandwidth -> Patch2
+agniHifi  =  vedicPadHifi shCello
+
+-- | Material nature
+prakritiHifi :: PadsynthBandwidth -> Patch2
+prakritiHifi = vedicPadHifi shClarinet
+
+-- | Desire
+rajasHifi :: PadsynthBandwidth -> Patch2
+rajasHifi = vedicPadHifi shViolin
+
+-- | the hero
+avataraHifi :: PadsynthBandwidth -> Patch2
+avataraHifi = vedicPadHifi shFrenchHorn
+
+-- | Earth
+bhumiHifi :: PadsynthBandwidth -> Patch2
+bhumiHifi = vedicPadHifi shViolinsEnsemble
+
+
+-- | Eminent
+vibhuLofi :: PadsynthBandwidth -> Patch2
+vibhuLofi = vedicPadLofi shAltoFlute
+
+-- | Wise
+rishiLofi :: PadsynthBandwidth -> Patch2
+rishiLofi = vedicPadLofi shFlute
+
+-- | Fire
+agniLofi :: PadsynthBandwidth -> Patch2
+agniLofi  =  vedicPadLofi shCello
+
+-- | Material nature
+prakritiLofi :: PadsynthBandwidth -> Patch2
+prakritiLofi = vedicPadLofi shClarinet
+
+-- | Desire
+rajasLofi :: PadsynthBandwidth -> Patch2
+rajasLofi = vedicPadLofi shViolin
+
+-- | the hero
+avataraLofi :: PadsynthBandwidth -> Patch2
+avataraLofi = vedicPadLofi shFrenchHorn
+
+-- | Earth
+bhumiLofi :: PadsynthBandwidth -> Patch2
+bhumiLofi = vedicPadLofi shViolinsEnsemble
+
+-----------------------------
+-- crossfade pads
+
+vedicCfd :: SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
+vedicCfd inst1 instr2 bandwidth cfdLevel = vedicPadCfd cfdLevel inst1 instr2 bandwidth
+
+vibhuRishi :: PadsynthBandwidth -> Sig  -> Patch2
+vibhuRishi = vedicCfd shVibhu shRishi
+
+vibhuAgni :: PadsynthBandwidth -> Sig  -> Patch2
+vibhuAgni = vedicCfd shVibhu shAgni
+
+vibhuPrakriti :: PadsynthBandwidth -> Sig  -> Patch2
+vibhuPrakriti = vedicCfd shVibhu shPrakriti
+
+vibhuRajas :: PadsynthBandwidth -> Sig  -> Patch2
+vibhuRajas = vedicCfd shVibhu shRajas
+
+vibhuAvatara :: PadsynthBandwidth -> Sig  -> Patch2
+vibhuAvatara = vedicCfd shVibhu shAvatara
+
+vibhuBhumi :: PadsynthBandwidth -> Sig -> Patch2
+vibhuBhumi = vedicCfd shVibhu shBhumi
+
+rishiAgni :: PadsynthBandwidth -> Sig -> Patch2
+rishiAgni = vedicCfd shRishi shAgni
+
+rishiPrakriti :: PadsynthBandwidth -> Sig -> Patch2
+rishiPrakriti = vedicCfd shRishi shPrakriti
+
+rishiRajas :: PadsynthBandwidth -> Sig -> Patch2
+rishiRajas = vedicCfd shRishi shRajas
+
+rishiAvatara :: PadsynthBandwidth -> Sig -> Patch2
+rishiAvatara = vedicCfd shRishi shAvatara
+
+rishiBhumi :: PadsynthBandwidth -> Sig -> Patch2
+rishiBhumi = vedicCfd shRishi shRajas
+
+agniPrakriti :: PadsynthBandwidth -> Sig -> Patch2
+agniPrakriti = vedicCfd shAgni shPrakriti
+
+agniRajas :: PadsynthBandwidth -> Sig -> Patch2
+agniRajas = vedicCfd shAgni shRajas
+
+agniAvatara :: PadsynthBandwidth -> Sig -> Patch2
+agniAvatara = vedicCfd shAgni shAvatara
+
+agniBhumi :: PadsynthBandwidth -> Sig -> Patch2
+agniBhumi = vedicCfd shAgni shBhumi
+
+prakritiRajas :: PadsynthBandwidth -> Sig -> Patch2
+prakritiRajas = vedicCfd shPrakriti shRajas
+
+prakritiAvatara :: PadsynthBandwidth -> Sig -> Patch2
+prakritiAvatara = vedicCfd shPrakriti shAvatara
+
+prakritiBhumi :: PadsynthBandwidth -> Sig -> Patch2
+prakritiBhumi = vedicCfd shPrakriti shBhumi
+
+rajasAvatara :: PadsynthBandwidth -> Sig -> Patch2
+rajasAvatara = vedicCfd shRajas shAvatara
+
+rajasBhumi :: PadsynthBandwidth -> Sig -> Patch2
+rajasBhumi = vedicCfd shRajas shBhumi
+
+avataraBhumi :: PadsynthBandwidth -> Sig -> Patch2
+avataraBhumi = vedicCfd shAvatara shBhumi
+
+----------------------------------------
+-- noisy padsynth pads
+
+noisyRise :: Patch2
+noisyRise = Patch {
+		patchInstr = onCps $ \cps -> mul 0.24 $ wave cps,
+		patchFx    = [FxSpec 0.35 (return . largeHall2), FxSpec 0.5 (at $ echo 0.25 0.85)]
+	}
+	where		
+		wave x  = noisy x + pad x
+		noisy x = at (mul 0.3 . fromMono . bat (bp (x * 5) 23) . lp (300 + 2500 * linseg [0, 0.73, 0, 8, 3]) 14) white
+		pad x = envelope $ filter x $ padsynthOsc2 spec x + mul 0.15 (padsynthOsc2 spec (x * 5)) + mul 0.5 (padsynthOsc2 spec (x / 2))
+
+		envelope asig = mul (fades 0.5 0.7) asig
+		filter cps asig = at (bhp 30) $ bat (lp (200 + (cps + 3000)) 45) $ asig
+
+		spec = noisySpec
+
+noisySpiral :: Patch2
+noisySpiral = noisySpiral' 8
+
+-- | Oscillating noise:
+--
+-- > noisySpiral' finalSpeedOfOscillation
+noisySpiral' :: D -> Patch2
+noisySpiral' spiralSpeed = Patch {
+		patchInstr = onCps $ \cps -> mul 0.24 $ wave cps,
+		patchFx    = [FxSpec 0.15 (return . magicCave2), FxSpec 0.43 (at $ echo 0.35 0.85)]	
+	}
+	where
+		wave x  = noisy x + pad x
+		noisy x = at (mul 0.3 . fromMono . bat (bp (x * 5) 23) . lp (300 + 2500 * linseg [0, 0.73, 0, 8, 3] * uosc (expseg [0.25, 5, spiralSpeed])) 14) white
+		pad x = envelope $ filter x $ padsynthOsc2 spec x + mul 0.15 (padsynthOsc2 spec (x * 5)) + mul 0.5 (padsynthOsc2 spec (x / 2))
+		envelope asig = mul (fades 0.5 0.7) asig
+		filter cps asig = at (bhp 30) $ bat (lp (200 + (cps + 3000)) 45) $ asig
+
+		spec = noisySpec
+
+
+noisyHarms = [ 1,  1, 0.7600046992, 0.6199994683, 0.9399998784, 0.4400023818, 0.0600003302, 0.8499968648, 0.0899999291, 0.8199964762, 0.3199984133, 0.9400014281, 0.3000001907, 0.120003365, 0.1799997687, 0.5200006366]
+noisySpec  = defPadsynthSpec 82.2 noisyHarms
+
+
+-- dac $ mul 0.24 $ at (bhp 30) $ mixAt 0.15 magicCave2 $ mixAt 0.43 (echo 0.35 0.85) $ midi $ onMsg $ (\cps -> (bat (lp (200 + (cps + 3000)) 45) . mul (fades 0.5 0.7) . (\x -> (at (mul 0.3 . fromMono . bat (bp (x * 11) 23) . lp (300 + 2500 * linseg [0, 0.73, 0, 8, 3] * uosc (expseg [0.25, 5, 8])) 14) white) +  padsynthOsc2 spec x + mul 0.15 (padsynthOsc2 spec (x * 5)) + mul 0.5 (padsynthOsc2 spec (x / 2)))) cps)
+
+-- dac $ mul 0.24 $ at (bhp 30) $ mixAt 0.35 largeHall2 $ mixAt 0.5 (echo 0.25 0.85) $ midi $ onMsg $ (\cps -> (bat (lp (200 + (cps + 3000)) 45) . mul (fades 0.5 0.7) . (\x -> (at (mul 0.3 . fromMono . bat (bp (x * 5) 23) . lp (300 + 2500 * linseg [0, 0.73, 0, 8, 3]) 14) white) +  padsynthOsc2 spec x + mul 0.15 (padsynthOsc2 spec (x * 5)) + mul 0.5 (padsynthOsc2 spec (x / 2)))) cps)
+
+
+
+
+   
+
 
