csound-catalog 0.4.0 → 0.5.0
raw patch · 5 files changed
+707/−18 lines, 5 filesdep ~csound-expressiondep ~csound-samplerPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: csound-expression, csound-sampler
API changes (from Hackage documentation)
+ Csound.Catalog.Wave: PadSharcSpec :: Double -> Int -> PadSharcSpec
+ Csound.Catalog.Wave: [padSharcBandwidth] :: PadSharcSpec -> Double
+ Csound.Catalog.Wave: [padSharcSize] :: PadSharcSpec -> Int
+ Csound.Catalog.Wave: data PadSharcSpec
+ Csound.Catalog.Wave: padsynthSharcOsc :: SharcInstr -> D -> SE Sig
+ Csound.Catalog.Wave: padsynthSharcOsc' :: PadSharcSpec -> SharcInstr -> D -> SE Sig
+ Csound.Catalog.Wave: padsynthSharcOsc2 :: SharcInstr -> D -> SE Sig2
+ Csound.Catalog.Wave: padsynthSharcOsc2' :: PadSharcSpec -> SharcInstr -> D -> SE Sig2
+ Csound.Catalog.Wave: pianoEnv :: ReleaseTime -> (D, D) -> Sig
+ Csound.Catalog.Wave: type ReleaseTime = D
+ Csound.Catalog.Wave: xpianoEnv :: ReleaseTime -> (D, D) -> Sig
+ Csound.Patch: PadSharcSpec :: Double -> Int -> PadSharcSpec
+ Csound.Patch: [padSharcBandwidth] :: PadSharcSpec -> Double
+ Csound.Patch: [padSharcSize] :: PadSharcSpec -> Int
+ Csound.Patch: agni :: PadsynthBandwidth -> Patch2
+ Csound.Patch: agniAvatara :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: agniBhumi :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: agniHifi :: PadsynthBandwidth -> Patch2
+ Csound.Patch: agniLofi :: PadsynthBandwidth -> Patch2
+ Csound.Patch: agniPrakriti :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: agniRajas :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: avatara :: PadsynthBandwidth -> Patch2
+ Csound.Patch: avataraBhumi :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: avataraHifi :: PadsynthBandwidth -> Patch2
+ Csound.Patch: avataraLofi :: PadsynthBandwidth -> Patch2
+ Csound.Patch: bhumi :: PadsynthBandwidth -> Patch2
+ Csound.Patch: bhumiHifi :: PadsynthBandwidth -> Patch2
+ Csound.Patch: bhumiLofi :: PadsynthBandwidth -> Patch2
+ Csound.Patch: data PadSharcSpec
+ Csound.Patch: noisyRise :: Patch2
+ Csound.Patch: noisySpiral :: Patch2
+ Csound.Patch: noisySpiral' :: D -> Patch2
+ Csound.Patch: prakriti :: PadsynthBandwidth -> Patch2
+ Csound.Patch: prakritiAvatara :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: prakritiBhumi :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: prakritiHifi :: PadsynthBandwidth -> Patch2
+ Csound.Patch: prakritiLofi :: PadsynthBandwidth -> Patch2
+ Csound.Patch: prakritiRajas :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: psDeepMagicPadSharc :: SharcInstr -> Patch2
+ Csound.Patch: psDeepMagicPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+ Csound.Patch: psDeepMagicSoftPadSharc :: SharcInstr -> Patch2
+ Csound.Patch: psDeepMagicSoftPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+ Csound.Patch: psDeepPadSharc :: SharcInstr -> Patch2
+ Csound.Patch: psDeepPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+ Csound.Patch: psDeepPadSharcCfd :: Sig -> SharcInstr -> SharcInstr -> Patch2
+ Csound.Patch: psDeepPadSharcCfd' :: Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
+ Csound.Patch: psDeepPadSharcCfd4 :: Sig -> Sig -> SharcInstr -> SharcInstr -> SharcInstr -> SharcInstr -> Patch2
+ Csound.Patch: psDeepPadSharcCfd4' :: Sig -> Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
+ Csound.Patch: psDeepSoftPadSharc :: SharcInstr -> Patch2
+ Csound.Patch: psDeepSoftPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+ Csound.Patch: psDeepSoftPadSharcCfd :: Sig -> SharcInstr -> SharcInstr -> Patch2
+ Csound.Patch: psDeepSoftPadSharcCfd' :: Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
+ Csound.Patch: psDeepSoftPadSharcCfd4 :: Sig -> Sig -> SharcInstr -> SharcInstr -> SharcInstr -> SharcInstr -> Patch2
+ Csound.Patch: psDeepSoftPadSharcCfd4' :: Sig -> Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
+ Csound.Patch: psLargeOrganSharc :: SharcInstr -> Patch2
+ Csound.Patch: psLargeOrganSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+ Csound.Patch: psLargeOrganSharcHifi :: SharcInstr -> Patch2
+ Csound.Patch: psLargePianoSharc :: ReleaseTime -> SharcInstr -> Patch2
+ Csound.Patch: psLargePianoSharc' :: PadSharcSpec -> ReleaseTime -> SharcInstr -> Patch2
+ Csound.Patch: psLargePianoSharcHifi :: ReleaseTime -> SharcInstr -> Patch2
+ Csound.Patch: psMagicPadSharc :: SharcInstr -> Patch2
+ Csound.Patch: psMagicPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+ Csound.Patch: psMagicPadSharcHifi :: SharcInstr -> Patch2
+ Csound.Patch: psMagicSoftPadSharc :: SharcInstr -> Patch2
+ Csound.Patch: psMagicSoftPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+ Csound.Patch: psMagicSoftPadSharcHifi :: SharcInstr -> Patch2
+ Csound.Patch: psOrganSharc :: SharcInstr -> Patch2
+ Csound.Patch: psOrganSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+ Csound.Patch: psOrganSharcHifi :: SharcInstr -> Patch2
+ Csound.Patch: psPadSharc :: SharcInstr -> Patch2
+ Csound.Patch: psPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+ Csound.Patch: psPadSharcCfd :: Sig -> SharcInstr -> SharcInstr -> Patch2
+ Csound.Patch: psPadSharcCfd' :: Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
+ Csound.Patch: psPadSharcCfd4 :: Sig -> Sig -> SharcInstr -> SharcInstr -> SharcInstr -> SharcInstr -> Patch2
+ Csound.Patch: psPadSharcCfd4' :: Sig -> Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
+ Csound.Patch: psPadSharcHifi :: SharcInstr -> Patch2
+ Csound.Patch: psPianoSharc :: ReleaseTime -> SharcInstr -> Patch2
+ Csound.Patch: psPianoSharc' :: PadSharcSpec -> ReleaseTime -> SharcInstr -> Patch2
+ Csound.Patch: psPianoSharcHifi :: ReleaseTime -> SharcInstr -> Patch2
+ Csound.Patch: psSoftPadSharc :: SharcInstr -> Patch2
+ Csound.Patch: psSoftPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
+ Csound.Patch: psSoftPadSharcCfd :: Sig -> SharcInstr -> SharcInstr -> Patch2
+ Csound.Patch: psSoftPadSharcCfd' :: Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
+ Csound.Patch: psSoftPadSharcCfd4 :: Sig -> Sig -> SharcInstr -> SharcInstr -> SharcInstr -> SharcInstr -> Patch2
+ Csound.Patch: psSoftPadSharcCfd4' :: Sig -> Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
+ Csound.Patch: psSoftPadSharcHifi :: SharcInstr -> Patch2
+ Csound.Patch: rajas :: PadsynthBandwidth -> Patch2
+ Csound.Patch: rajasAvatara :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: rajasBhumi :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: rajasHifi :: PadsynthBandwidth -> Patch2
+ Csound.Patch: rajasLofi :: PadsynthBandwidth -> Patch2
+ Csound.Patch: rishi :: PadsynthBandwidth -> Patch2
+ Csound.Patch: rishiAgni :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: rishiAvatara :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: rishiBhumi :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: rishiHifi :: PadsynthBandwidth -> Patch2
+ Csound.Patch: rishiLofi :: PadsynthBandwidth -> Patch2
+ Csound.Patch: rishiPrakriti :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: rishiRajas :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: vedicPad :: SharcInstr -> PadsynthBandwidth -> Patch2
+ Csound.Patch: vedicPadCfd :: Sig -> SharcInstr -> SharcInstr -> PadsynthBandwidth -> Patch2
+ Csound.Patch: vedicPadCfd4 :: Sig -> Sig -> SharcInstr -> SharcInstr -> SharcInstr -> SharcInstr -> PadsynthBandwidth -> Patch2
+ Csound.Patch: vedicPadHifi :: SharcInstr -> PadsynthBandwidth -> Patch2
+ Csound.Patch: vedicPadLofi :: SharcInstr -> PadsynthBandwidth -> Patch2
+ Csound.Patch: vibhu :: PadsynthBandwidth -> Patch2
+ Csound.Patch: vibhuAgni :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: vibhuAvatara :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: vibhuBhumi :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: vibhuHifi :: PadsynthBandwidth -> Patch2
+ Csound.Patch: vibhuLofi :: PadsynthBandwidth -> Patch2
+ Csound.Patch: vibhuPrakriti :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: vibhuRajas :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: vibhuRishi :: PadsynthBandwidth -> Sig -> Patch2
+ Csound.Patch: xpsLargePianoSharc :: ReleaseTime -> SharcInstr -> Patch2
+ Csound.Patch: xpsLargePianoSharc' :: PadSharcSpec -> ReleaseTime -> SharcInstr -> Patch2
+ Csound.Patch: xpsLargePianoSharcHifi :: ReleaseTime -> SharcInstr -> Patch2
+ Csound.Patch: xpsPianoSharc :: ReleaseTime -> SharcInstr -> Patch2
+ Csound.Patch: xpsPianoSharc' :: PadSharcSpec -> ReleaseTime -> SharcInstr -> Patch2
+ Csound.Patch: xpsPianoSharcHifi :: ReleaseTime -> SharcInstr -> Patch2
- Csound.Catalog.Wave: epiano :: [EpianoOsc] -> (D, D) -> SE Sig
+ Csound.Catalog.Wave: epiano :: ReleaseTime -> [EpianoOsc] -> (D, D) -> SE Sig
Files
- csound-catalog.cabal +2/−2
- src/Csound/Catalog/Wave.hs +6/−1
- src/Csound/Catalog/Wave/Sharc.hs +74/−1
- src/Csound/Catalog/Wave/Thor.hs +21/−10
- src/Csound/Patch.hs +604/−4
csound-catalog.cabal view
@@ -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
src/Csound/Catalog/Wave.hs view
@@ -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(..),
src/Csound/Catalog/Wave/Sharc.hs view
@@ -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
src/Csound/Catalog/Wave/Thor.hs view
@@ -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
src/Csound/Patch.hs view
@@ -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)+++++ +