csound-catalog 0.7.1 → 0.7.2
raw patch · 6 files changed
+255/−255 lines, 6 filesdep ~csound-expressiondep ~csound-samplerPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: csound-expression, csound-sampler
API changes (from Hackage documentation)
- Csound.Catalog.Wave: amFlavio :: t -> Sig -> Sig
+ Csound.Catalog.Wave: amFlavio :: () => p -> Sig -> Sig
- Csound.Catalog.Wave: razorPad :: (Fractional (SE b), Fractional t, SigSpace b) => (Sig -> t -> Sig -> b) -> Sig -> Sig -> Sig -> SE b
+ Csound.Catalog.Wave: razorPad :: (Fractional t, SigSpace SE b, Fractional SE b) => (Sig -> t -> Sig -> b) -> Sig -> Sig -> Sig -> SE b
Files
- csound-catalog.cabal +2/−2
- src/Csound/Catalog/Drum/Hm.hs +24/−24
- src/Csound/Catalog/Drum/MiniPops.hs +33/−33
- src/Csound/Catalog/Drum/Tr808.hs +36/−36
- src/Csound/Catalog/Wave/Sean.hs +26/−26
- src/Csound/Patch.hs +134/−134
csound-catalog.cabal view
@@ -1,5 +1,5 @@ Name: csound-catalog-Version: 0.7.1+Version: 0.7.2 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 >= 5.2.2, csound-sampler >=0.0.8.1, sharc-timbre+ base >= 4, base < 5, transformers >= 0.3, csound-expression >= 5.3.2, csound-sampler >=0.0.9.0, sharc-timbre Hs-Source-Dirs: src/ Exposed-Modules: Csound.Catalog
src/Csound/Catalog/Drum/Hm.hs view
@@ -3,15 +3,15 @@ -- * Subtractive dumb, dumbBass, pluckSnare, sortaKnockSweep, metalBoink, - -- * Fullkit + -- * Fullkit -- ** Non-pitched drums- snare, openHihat, closedHihat, + snare, openHihat, closedHihat, -- ** Pitched drums -- -- The instrument turns a pitch (in Hz) to the signal.- bassDrum, crash, handClap, + bassDrum, crash, handClap, bassDrum', crash', handClap', -- * Sampler@@ -21,7 +21,7 @@ import Csound.Base import Csound.Sam --- subtractive +-- subtractive bpb :: Sig -> Sig -> Sig -> Sig bpb cfq q asig = balance (bp cfq q asig) asig@@ -44,9 +44,9 @@ dumbBass :: SE Sig dumbBass = (toDrum =<<) $ fmap (bpb kfreqenv (kfreqenv / 8)) $ rand $ expseg [0.0001, 0.01, 1, 0.08, 0.01] where kfreqenv = expseg [50, 0.01, 200, 0.08, 50]- -pluckSnare :: SE Sig -pluckSnare = toDrum $ pluck kampenv4 kptchenv 50 (elins [1, 1]) 4 `withDs` [0.8, 3] ++pluckSnare :: SE Sig+pluckSnare = toDrum $ pluck kampenv4 kptchenv 50 (elins [1, 1]) 4 `withDs` [0.8, 3] where kampenv4 = linseg [0, 0.001, 1, xdur - 0.21, 1, 0.02, 0] kptchenv = linseg [100, 0.01, 300, 0.2, 200, 0.01, 200]@@ -57,16 +57,16 @@ sortaKnockSweep = (toDrum =<<) $ fmap (resonsBy bpb [ (kfreqenv41, kfreqenv41 / 8)- , (kfreqenv42, kfreqenv42 / 4) + , (kfreqenv42, kfreqenv42 / 4) ] ) $ rand kampenv4 where kfreqenv41 = expseg [ 50, 0.01, 200, 0.08, 50]- kfreqenv42 = linseg [ 150, 0.01, 1000, 0.08, 250] - kampenv4 = linseg [ 0, 0.01, 1, 0.08, 0, 0.01, 0] + kfreqenv42 = linseg [ 150, 0.01, 1000, 0.08, 250]+ kampenv4 = linseg [ 0, 0.01, 1, 0.08, 0, 0.01, 0] metalBoink :: SE Sig-metalBoink = toDrum $ foscil kampenv61 30 1 6.726 kampenv62 sine +metalBoink = toDrum $ foscil kampenv61 30 1 6.726 kampenv62 sine where kampenv61 = expseg [ 0.01, 0.01, 1, 0.2, 0.1, 0.1, 0.001 ] kampenv62 = linseg [ 1, 0.1, 10, 0.1, 0.5, 0.01, 1 ]@@ -78,7 +78,7 @@ bassDrum' :: D -> SE Sig bassDrum' cps = toDrum $ env * osc (sig cps * kgliss * 0.5) where env = linseg [0, 0.00245, 1, 0.1225, 0]- kgliss = expseg [10, 0.625, 1, 0.25, 1] + kgliss = expseg [10, 0.625, 1, 0.25, 1] openHihat :: SE Sig@@ -100,9 +100,9 @@ asound <- rand 1 let as1 = butbp asound 210 55 return $ kenv2 * (as1 * 0.9 + asound * 0.8 * kenv1)- where + where kenv1 = linseg [0, 0.00176, 1, 0.1232, 0]- kenv2 = expseg [0.01, 0.0002, 1, 0.0297, 0.01, 0.09, 0.01] + kenv2 = expseg [0.01, 0.0002, 1, 0.0297, 0.01, 0.09, 0.01] crash = crash' $ cpspch 13.05 @@ -115,7 +115,7 @@ kenv2 = expseg [0.001, 0.0466, 1, 3.95, 0.001] resonator asig = 0.7 * a1 + 0.6 * kenv18 * a2- where + where flt a = butbp asig (sig $ a * cps) (sig $ 0.5 * cps) a1 = sum $ fmap flt [1, 2.1, 2.8] a2 = comb a1 0.5 (0.5 / cps)@@ -125,7 +125,7 @@ aall = sum $ zipWith3 harm weights envelopes harmonics - harmonics = + harmonics = [ [1, 0.89, 1.12341] , [2.24, 2.4 * 0.98, 2.14 * 1.02] , [3.312, 3.513312*0.89, 3.123312*1.11]@@ -138,7 +138,7 @@ weights = replicate 7 0.2 ++ [0.1] - envelopes = fmap (\(a, b) -> expseg [0.01, a, 1, b, 0.01]) + envelopes = fmap (\(a, b) -> expseg [0.01, a, 1, b, 0.01]) [ (0.0274, 3.972) , (0.0264, 3.973) , (0.0209, 3.979)@@ -158,15 +158,15 @@ kenv2 = expseg [0.001, 0.005, 1, 0.35, 0.001] onNoise asig = aout- where + where anoise1 = kenv1 * asig anoise2 = kenv2 * asig adel1 = anoise1- adel2 = delaySig 0.01 anoise1 - adel3 = delaySig 0.02 anoise1 - adel4 = delaySig 0.03 anoise2 - + adel2 = delaySig 0.01 anoise1+ adel3 = delaySig 0.02 anoise1+ adel4 = delaySig 0.03 anoise2+ aout = mean [ rz adel1 2 , rz adel2 3@@ -179,7 +179,7 @@ -------------------------------------------------- -- sampler -mkSam = limSam 1+mkSam = limSam 4 bd1 = mkSam dumb bd2 = mkSam dumbBass@@ -194,4 +194,4 @@ bd3 = mkSam bassDrum cr = mkSam crash-clap = mkSam handClap +clap = mkSam handClap
src/Csound/Catalog/Drum/MiniPops.hs view
@@ -2,26 +2,26 @@ module Csound.Catalog.Drum.MiniPops( MpSpec(..), - bass, snare1, snare2, rimShot, cymbal1, cymbal2, bongo1, bongo2, bongo3, + bass, snare1, snare2, rimShot, cymbal1, cymbal2, bongo1, bongo2, bongo3, claves, cowbell, guiro, maracas, quijada, tamb, -- * Generic- bass', bdSpec, snare1', snSpec1, snare2', snSpec2, rimShot', rimSpec, - cymbal1', cymSpec1, cymbal2', cymSpec2, bongo1', bonSpec1, bongo2', bonSpec2, bongo3', bonSpec3, + bass', bdSpec, snare1', snSpec1, snare2', snSpec2, rimShot', rimSpec,+ cymbal1', cymSpec1, cymbal2', cymSpec2, bongo1', bonSpec1, bongo2', bonSpec2, bongo3', bonSpec3, claves', clSpec, cowbell', cowSpec, guiro', groSpec, maracas', marSpec, quijada', qjSpec, tamb', tamSpec, -- * Sample- bd, sn1, sn2, rim, cym1, cym2, bon1, bon2, bon3, cl, cow, gro, mar, qj, tam, + bd, sn1, sn2, rim, cym1, cym2, bon1, bon2, bon3, cl, cow, gro, mar, qj, tam, -- ** Generic bd', sn1', sn2', rim', cym1', cym2', bon1', bon2', bon3', cl', cow', gro', mar', qj', tam' ) where -import Csound.Base hiding (guiro) +import Csound.Base hiding (guiro) import Csound.Sam data MpSpec = MpSpec {- mpDur :: D + mpDur :: D , mpCps :: D , mpRnd :: Maybe D } @@ -37,14 +37,14 @@ toDrum :: Sig -> SE Sig toDrum a = rndAmp =<< addDur a -defSpec dur cps = MpSpec +defSpec dur cps = MpSpec { mpDur = dur- , mpCps = cps + , mpCps = cps , mpRnd = Just 0.085 } rndVal :: D -> D -> D -> SE D rndVal total amount x = do- k <- birnd amount + k <- birnd amount return $ x + k * total rndDur amt x = rndVal x amt x@@ -52,13 +52,13 @@ rndSpec :: MpSpec -> SE MpSpec rndSpec spec = do- dur <- rndDur' + dur <- rndDur' cps <- rndCps'- return $ spec - { mpDur = dur + return $ spec+ { mpDur = dur , mpCps = cps }- where - rndDur' = (maybe return rndDur $ (mpRnd spec)) $ mpDur spec + where+ rndDur' = (maybe return rndDur $ (mpRnd spec)) $ mpDur spec rndCps' = (maybe return rndCps $ (mpRnd spec)) $ mpCps spec rezz cps bw = reson (mpulse 1 0) cps (cps * bw) `withD` 2@@ -97,7 +97,7 @@ aenv = transeg [1, dur ,-5 , 0] asig1 = at (bhp 3000) $ mul aenv asig - xdur = 0.006 + xdur = 0.006 astrike = osc (transeg [cps,xdur,-4,60]) aenv2 = transeg [1,xdur,-2,0] astrike1 = aenv2 * astrike@@ -118,9 +118,9 @@ anoise = pink asig = fmap (\x -> butbp x 5200 5200 `withD` 1) anoise aenv = transeg [1, dur ,-8 , 0]- asig1 = at (bhp 3000) $ mul aenv asig + asig1 = at (bhp 3000) $ mul aenv asig - xdur = 0.005 + xdur = 0.005 astrike = osc (transeg [cps,xdur,-4,cps / 4]) aenv2 = transeg [1,xdur,-2,0] astrike1 = aenv2 * astrike@@ -141,7 +141,7 @@ dur = mpDur spec cps = sig $ mpCps spec - aenv = expon 1 dur 0.0001 + aenv = expon 1 dur 0.0001 asig1 = osc' 0.2 cps asig2 = reson asig1 cps 1500 `withD` 2 asig = bhp 500 (asig1 + asig2 * 0.4 * 0.3)@@ -159,7 +159,7 @@ let asig1 = blp 14000 $ reson (anoise*aenv) icf (icf*0.7) `withD` 1 asig2 = bhp 6000 $ (asig1 + anoise * 0.001) return $ 0.25 * aenv * asig2- where + where dur = mpDur spec cps = sig $ mpCps spec @@ -242,7 +242,7 @@ clSpec = defSpec 0.186 400 -claves' spec = pureClaves' =<< rndSpec spec +claves' spec = pureClaves' =<< rndSpec spec pureClaves' spec = toDrum aout where@@ -251,14 +251,14 @@ aenv = linseg [1, dur, 0] asig1 = rezz cps 0.025- asig2 = rezz (cps * 5.45) 0.03 + asig2 = rezz (cps * 5.45) 0.03 aout = mul (3.2 * aenv * fadeOut dur) $ asig1 + 1.3 * asig2 cowbell = cowbell' cowSpec cowSpec = defSpec 0.3 850 -cowbell' spec = pureCowbell' =<< rndSpec spec +cowbell' spec = pureCowbell' =<< rndSpec spec pureCowbell' spec = toDrum asig where@@ -274,7 +274,7 @@ groSpec = defSpec 0.256 66 -guiro' spec = pureGuiro' =<< rndSpec spec +guiro' spec = pureGuiro' =<< rndSpec spec pureGuiro' spec = toDrum asig where@@ -289,7 +289,7 @@ marSpec = defSpec 0.05 5000 -maracas' spec = pureMaracas' =<< rndSpec spec +maracas' spec = pureMaracas' =<< rndSpec spec pureMaracas' spec = toDrum =<< do asig <- noise 1 0.04@@ -299,20 +299,20 @@ cps = sig $ mpCps spec aenv = transeg [1,dur,-4,0]- + quijada = quijada' qjSpec qjSpec = defSpec 0.817 550 -quijada' spec = pureQuijada' =<< rndSpec spec +quijada' spec = pureQuijada' =<< rndSpec spec pureQuijada' spec = toDrum $ bhp cps $ mul (6 * fadeOut dur) $ phi dur (1/22.7272) + phi (dur * 0.39) (1/13.1579) where dur = mpDur spec cps = sig $ mpCps spec - phi dt freq = mul kenv $ reson (mpulse 1 freq) 2727 400 `withD` 1 + phi dt freq = mul kenv $ reson (mpulse 1 freq) 2727 400 `withD` 1 where kenv = transeg [0.8,0.05,1, 1,dt-0.05,-6,0] @@ -320,13 +320,13 @@ tamSpec = defSpec 0.271 7000 -tamb' spec = pureTamb' =<< rndSpec spec +tamb' spec = pureTamb' =<< rndSpec spec pureTamb' spec = toDrum =<< do anoise <- noise 1 0- return $ mul (1.5 * aenv * fadeOut dur) + return $ mul (1.5 * aenv * fadeOut dur) $ reson (bhp cps $ (+ (anoise * 0.1 * aenv)) $ reson (anoise * aenv) 4600 100 `withD` 2) 9000 3000 `withD` 1- where + where dur = mpDur spec cps = sig $ mpCps spec aenv = transeg [1,dur,-8,0]@@ -334,7 +334,7 @@ ------------------------------------------------------- -- Sampler -mkSam = limSam 1+mkSam = limSam 4 -- | Bass drum bd :: Sam@@ -346,11 +346,11 @@ -- | Snare 2 sn2 :: Sam-sn2 = mkSam snare2+sn2 = limSam 2 snare2 -- | Rim shot rim :: Sam-rim = mkSam rimShot+rim = limSam 1 rimShot -- | Cymbal 1 cym1 :: Sam
src/Csound/Catalog/Drum/Tr808.hs view
@@ -2,7 +2,7 @@ module Csound.Catalog.Drum.Tr808( TrSpec(..), - bass, bass2, snare, openHiHat, closedHiHat, + bass, bass2, snare, openHiHat, closedHiHat, lowTom, midTom, highTom, cymbal, claves, rimShot, maraca, highConga, midConga, lowConga, @@ -38,16 +38,16 @@ , trRnd :: Maybe D } -cpsSpec cps = TrSpec +cpsSpec cps = TrSpec { trDur = 0.8 , trTune = 0- , trCps = cps + , trCps = cps , trRnd = Just 0.085 } rndVal :: D -> D -> D -> SE D rndVal total amount x = do- k <- birnd amount + k <- birnd amount return $ x + k * total rndDur amt x = rndVal x amt x@@ -59,19 +59,19 @@ dur <- rndDur' tune <- rndTune' cps <- rndCps'- return $ spec - { trDur = dur + return $ spec+ { trDur = dur , trTune = tune , trCps = cps }- where + where rndDur' = (maybe return rndDur $ (trRnd spec)) $ trDur spec rndTune' = (maybe return rndTune $ (trRnd spec)) $ trTune spec rndCps' = (maybe return rndCps $ (trRnd spec)) $ trCps spec -bdSpec = TrSpec +bdSpec = TrSpec { trDur = 0.95 , trTune = 1- , trCps = 55 + , trCps = 55 , trRnd = Just 0.05 } addDur' dt x = xtratim dt >> return x@@ -99,7 +99,7 @@ aimp = oscili aenv1 acps sine amix = asig1 * 0.7 + aimp * 0.25 -bdSpec2 = TrSpec +bdSpec2 = TrSpec { trDur = 1.3 , trTune = 1 , trCps = 57@@ -110,24 +110,24 @@ bass2' spec = pureBass2' =<< rndSpec spec pureBass2' :: TrSpec -> SE Sig-pureBass2' spec = (rndAmp <=< addDur) $ compr $ mul (expsegr [1, 0.6 * dur, 0.1, 0.4 * dur, 0.001] (0.4 * dur) 0.001) $ +pureBass2' spec = (rndAmp <=< addDur) $ compr $ mul (expsegr [1, 0.6 * dur, 0.1, 0.4 * dur, 0.001] (0.4 * dur) 0.001) $ fosc 1 2 (0.5 * xeg 0.01 0.1 0.2 0.5) (cps * semitone (expseg [12, 0.01, 27, 0.3, 0.001]))- where + where compr x = dam x 0.65 2.4 2.3 0.05 0.1 dur = trDur spec- cps = sig $ trCps spec + cps = sig $ trCps spec snSpec = cpsSpec 342- + snare = snare' snSpec snare' spec = pureSnare' =<< rndSpec spec --- sound consists of two sine tones, an octave apart and a noise signal +-- sound consists of two sine tones, an octave apart and a noise signal pureSnare' :: TrSpec -> SE Sig pureSnare' spec = rndAmp =<< addDur =<< (apitch + anoise)- where + where dur = trDur spec tune = trTune spec cps = trCps spec@@ -141,7 +141,7 @@ apitch2 = rndOsc (0.5 * sig cps) apitch = mul (0.75 * aenv1) (apitch1 + apitch2) - -- noise component + -- noise component aenv2 = expon 1 iNseDur 0.0005 kcf = expsegr [5000, 0.1, 3000] iNseDur 0.0001 anoise = mul aenv2 $ do@@ -166,20 +166,20 @@ -- cps = 296 genHiHat :: Sig -> TrSpec -> SE Sig genHiHat pitchedEnv spec = rndAmp =<< addDur =<< (amix1 + anoise)- where + where dur = trDur spec tune = trTune spec cps = trCps spec - halfDur = dur * 0.5 + halfDur = dur * 0.5 -- pitched element- harmonics = [1.0, 0.962, 1.233, 1.175,1.419, 2.821] + harmonics = [1.0, 0.962, 1.233, 1.175,1.419, 2.821] amix = mul 0.5 $ fmap sum $ mapM (rndPw 0.25 . sig . (* (cps * octave tune))) harmonics amix1 = mul pitchedEnv $ at (\asig -> bhp 5000 $ bhp 5000 $ reson asig (5000 * octave (sig tune)) 5000 `withD` 1) amix -- noise element- kcf = expseg [20000, 0.7, 9000, halfDur-0.1, 9000] + kcf = expseg [20000, 0.7, 9000, halfDur-0.1, 9000] anoise = mul pitchedEnv $ do x <- noise 0.8 0 return $ bhp 8000 $ blp kcf x@@ -190,7 +190,7 @@ lowTom = lowTom' ltSpec midTom = midTom' mtSpec-highTom = highTom' htSpec +highTom = highTom' htSpec -- cps = 200 highTom' :: TrSpec -> SE Sig@@ -206,7 +206,7 @@ genTom :: D -> (Sig, Sig, Sig) -> TrSpec -> SE Sig genTom durDt (resonCf, hpCf, lpCf) spec = rndAmp =<< addDur =<< (asig + anoise)- where + where dur = trDur spec tune = trTune spec cps = trCps spec@@ -215,14 +215,14 @@ halfDur = durDt * dur -- sine tone signal- aAmpEnv = transeg [1, halfDur, -10, 0.001]+ aAmpEnv = fadeIn 0.04 * transeg [1, halfDur, -10, 0.001] afmod = expsega [5, 0.125/ifrq, 1] asig = mul (-aAmpEnv) $ rndOsc (sig ifrq * afmod) -- noise signal aEnvNse = transeg [1, halfDur, -6 , 0.001] otune = sig $ octave tune- anoise = mul aEnvNse $ do + anoise = mul aEnvNse $ do x <- noise 1 0.4 return $ blp (lpCf * otune) $ bhp (hpCf * otune) $ reson x (resonCf * otune) 800 `withD` 1 @@ -234,7 +234,7 @@ -- cps = 296 cymbal' :: TrSpec -> SE Sig cymbal' spec = rndAmp =<< addDur =<< (fmap (amix1 + ) anoise)- where + where dur = trDur spec tune = trTune spec cps = trCps spec@@ -249,7 +249,7 @@ -- noise element aenv2 = expsega [1,0.3,0.07,fullDur-0.1,0.00001]- kcf = expseg [14000, 0.7, 7000, fullDur-0.1, 5000] + kcf = expseg [14000, 0.7, 7000, fullDur-0.1, 5000] anoise = mul aenv2 $ do x <- noise 0.8 0 return $ bhp 8000 $ blp kcf x@@ -290,7 +290,7 @@ -- ring aenv1 = expsega [1,fullDur,0.001]- ifrq1 = sig $ cps * octave tune + ifrq1 = sig $ cps * octave tune aring = mul (0.5 * (aenv1 - 0.001)) $ at (bbp ifrq1 (ifrq1 * 8)) $ rndOscBy tabTR808RimShot ifrq1 -- noise@@ -325,13 +325,13 @@ kcf = expseg [12000,0.07,iLPF2,1,iLPF2] alpf = at (blp kcf) amix abpf = at (\x -> reson x ifrq2 25) amix- ares = mul (0.08 * kenv) $ at dcblock2 $ mul (0.06 * kenv1) abpf + mul 0.5 alpf + mul 0.9 amix + ares = mul (0.08 * kenv) $ at dcblock2 $ mul (0.06 * kenv1) abpf + mul 0.5 alpf + mul 0.9 amix -- TODO clap {- instr 112 ;CLAP- krelease release ;SENSE RELEASE OF THIS NOTE ('1' WHEN RELEASED, OTHERWISE ZERO) + krelease release ;SENSE RELEASE OF THIS NOTE ('1' WHEN RELEASED, OTHERWISE ZERO) chnset 1-krelease,"Act12" ;TURN ON ACTIVE LIGHT WHEN NOTE STARTS, TURN IT OFF WHEN NOTE ENDS iTimGap = 0.01 ;GAP BETWEEN EVENTS DURING ATTACK PORTION OF CLAP idur1 = 0.02 ;DURING OF THE THREE INITIAL 'CLAPS'@@ -347,7 +347,7 @@ event_i "i", p1+0.1, iTimGap*3, idur2, p4 else kenv transeg 1,p3,-25,0 ;AMPLITUDE ENVELOPE- iamp random 0.7,1 ;SLIGHT RANDOMISATION OF AMPLITUDE + iamp random 0.7,1 ;SLIGHT RANDOMISATION OF AMPLITUDE anoise pinkish kenv*iamp iBPF = 1100*octave(i(gktune12)) ;FREQUENCY OF THE BANDPASS FILTER ibw = 2000*octave(i(gktune12)) ;BANDWIDTH OF THE BANDPASS FILTER@@ -396,7 +396,7 @@ highConga = highConga' hcSpec midConga = midConga' mcSpec-lowConga = lowConga' lcSpec +lowConga = lowConga' lcSpec -- high conga -- cps = 420@@ -428,7 +428,7 @@ ----------------------------------------------------- -- sampler -mkSam = limSam 1+mkSam = limSam 4 -- | Bass drum bd :: Sam@@ -443,11 +443,11 @@ -- | Open hi-hat ohh :: Sam-ohh = mkSam openHiHat+ohh = limSam 8 openHiHat -- | Closed hi-hat chh :: Sam-chh = mkSam closedHiHat +chh = mkSam closedHiHat -- | High tom htom :: Sam@@ -463,7 +463,7 @@ -- | Cymbal cym :: Sam-cym = mkSam cymbal+cym = limSam 8 cymbal -- | Claves cl :: Sam
src/Csound/Catalog/Wave/Sean.hs view
@@ -1,7 +1,7 @@ {-# Language FlexibleContexts #-} module Csound.Catalog.Wave.Sean( RissetBellSpec(..), rissetBell, timpani, timpaniSpec, noiseBell, noiseBellSpec,- snowCrackle, + snowCrackle, fmDrone, fmDrones, tenorOsc, sopranoOsc ) where@@ -15,7 +15,7 @@ { rissetBellRands :: [D] , rissetBellRandShifts :: [D] , rissetBellDurs :: [D]- , rissetBellAmps :: [Sig] + , rissetBellAmps :: [Sig] , rissetBellFreqs :: [Sig] , rissetBellFreqShifts :: [Sig] }@@ -37,10 +37,10 @@ env = expsegr [1, dur, 0.001] dur 0.001 ares = mul 0.75 $ fmap sum $ zipWithM (\(iamp, ifreq, ifreqDt) (idur, irand, irandDt) -> partial iamp ifreq ifreqDt idur irand irandDt) (zip3 iamps ifreqs ifreqDt) (zip3 idurs irands irandDt) -timpaniSpec = RissetBellSpec +timpaniSpec = RissetBellSpec { rissetBellDurs = [0.087, 0.5, 0.804, 0.065, 0.325, 0.54, 1, 0.195, 0.108, 0.89, 0.075] , rissetBellFreqs = [0.8, 1.00, 1.5, 1.65, 1.97, 2, 2.44, 2.86, 2.71, 2.91, 3.27]- , rissetBellFreqShifts = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + , rissetBellFreqShifts = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] , rissetBellAmps = [1, 2.52, 1.83, 0.55, 1.47, 1.67, 0.62, 0.5, 0.52, 0.55, 0.33] , rissetBellRands = [0.56, 0.56, 0.92, 0.92, 1.19, 1.7, 2, 2.74, 3, 3.75, 4.07] , rissetBellRandShifts = [0, 1, 0, 1.7, 0, 0, 0, 0, 0, 0, 0] }@@ -50,7 +50,7 @@ where env = expsegr [1, dur, 0.001] dur 0.001 -noiseBellSpec = RissetBellSpec +noiseBellSpec = RissetBellSpec { rissetBellDurs =[1, 0.9, 0.65, 0.55, 0.325, 0.35, 0.25, 0.2, 0.15, 0.1, 0.075] , rissetBellFreqs = [0.56, 0.56, 0.92, 0.92, 1.19, 1.7, 3, 2.74, 3, 3.75, 4.07] , rissetBellFreqShifts = [0, 1, 0, 1.7, 0, 0, 0, 0, 0, 0, 0]@@ -72,13 +72,13 @@ snowCrackle speed = mlp 1200 0.1 $ mouseDrum speed (3 + 2 * uosc 0.1) (160 + 100 * uosc 0.13) where mouseDrum :: Sig -> Sig -> Sig -> Sig- mouseDrum freq index cps = - sched instr $ withDur dur $ fmap (\[a, b] -> (a, b)) $ randList 2 $ dust freq- where + mouseDrum freq index cps =+ sched instr $ withDur (sig dur) $ fmap (\[a, b] -> (a, b)) $ randList 2 $ dust freq+ where dur = 0.049 instr (rndCps, rndIndex) = return $- mouseDrumGrain dur - (cps + 10 * sig (2 * rndCps - 1)) + mouseDrumGrain dur+ (cps + 10 * sig (2 * rndCps - 1)) (index + 0.01 * sig (2 * rndIndex - 1)) mouseDrumGrain dur icarfreq index = aosc@@ -100,8 +100,8 @@ aosc4 = osc (a4 + aosc1 + amod') ares = 0.5 * kamp1 * sum [aosc2, aosc3, aosc4] -scDrone = fmDrone 3 -scDrones = fmDrones 3 +scDrone = fmDrone 3+scDrones = fmDrones 3 pulseIndex ns speed = 1 + 7 * seqSqr [seqDesc ns] speed @@ -112,9 +112,9 @@ fmDrone index (iatt, irel) cps = (aout1, aout2) where ifreq1 = cps- iamp = 0.39 + iamp = 0.39 idev = index * ifreq1- kamp1 = leg iatt 0 1 irel + kamp1 = leg iatt 0 1 irel f a1 a2 a3 a4 = iamp * fmDronePartial 0 index idev kamp1 ifreq1 (a1, a2, a3, a4) @@ -123,12 +123,12 @@ fmDrones index amps harms (iatt, irel) cps = aout where- iamp = 0.39 - kamp1 = leg iatt 0 1 irel + iamp = 0.39+ kamp1 = leg iatt 0 1 irel f amp h = do let ifreq1 = h * cps- idev = index * ifreq1 + idev = index * ifreq1 a1 <- randomSig 1 0.03 a2 <- randomSig 0.998 0.025@@ -152,24 +152,24 @@ gaussSig val dev = fmap ((+ val)) $ gauss val randiDev :: Sig -> Sig -> Sig -> SE Sig-randiDev val dev cps = fmap (+ val) $ randi dev cps +randiDev val dev cps = fmap (+ val) $ randi dev cps randhDev :: Sig -> Sig -> Sig -> SE Sig-randhDev val dev cps = fmap (+ val) $ randh dev cps +randhDev val dev cps = fmap (+ val) $ randh dev cps ------------------------------------------------------------------------ -- choir -tenorOsc = voiceOsc 0.9 -sopranoOsc = voiceOsc 0.8 +tenorOsc = voiceOsc 0.9+sopranoOsc = voiceOsc 0.8 linVibr2 (v1, v2) (vtime1, vtime2) = linseg [v1, vtime1, v1, vtime2, v2] voiceOsc :: Sig -> (Sig -> Sig) -> Sig -> Sig -> SE Sig voiceOsc mulHarm formantFilter kvib cps = at formantFilter $ voiceAnimator (RndDev 0.05 0.75) kvib $ asig * kenv- where + where iharms = sig getSampleRate * 0.4 / cps- asig = gbuzz 1 cps iharms 1 mulHarm (sines3 [(1, 1, 0.25)]) + asig = gbuzz 1 cps iharms 1 mulHarm (sines3 [(1, 1, 0.25)]) kenv = leg 0.1 0 1 0.1 data RndDev = RndDev@@ -190,13 +190,13 @@ return $ ain * (1 + xDt) -data Formant = Formant +data Formant = Formant { formantWeight :: Sig , formantCenter :: Sig- , formantWidth :: Sig + , formantWidth :: Sig } --------------------------------------------------------------------------- +--
src/Csound/Patch.hs view
@@ -11,15 +11,15 @@ module Csound.Patch( -- * Electric piano- Epiano1(..), epiano1, epiano1', + Epiano1(..), epiano1, epiano1', MutedPiano(..), mutedPiano, mutedPiano',- amPiano, fmPiano, + amPiano, fmPiano, epiano2, epianoHeavy, epianoBright, vibraphonePiano1, vibraphonePiano2, addHammer, -- * Organ- cathedralOrgan, toneWheelOrgan, + cathedralOrgan, toneWheelOrgan, HammondOrgan(..), hammondOrgan, hammondOrgan', sawOrgan, triOrgan, sqrOrgan, pwOrgan, waveOrgan, @@ -45,13 +45,13 @@ -- ** Pad Monosynth pwPadm, triPadm, nightPadm, overtonePadm, caveOvertonePadm, choruselm,- pwEnsemblem, fmDroneSlowm, fmDroneMediumm, fmDroneFastm, + pwEnsemblem, fmDroneSlowm, fmDroneMediumm, fmDroneFastm, razorPadSlowm, razorPadFastm, razorPadTremolom, razorPadm, razorPadm', dreamPadm, dreamPadBym, underwaterPadm, lightIsTooBrightPadm, whaleSongPadm, dreamPadm', underwaterPadm', dreamPadBym', lightIsTooBrightPadm', whaleSongPadm', -- * Lead- polySynth, + polySynth, phasingLead, RazorLead(..), razorLeadSlow, razorLeadFast, razorLeadTremolo, razorLead, razorLead', overtoneLead,@@ -67,7 +67,7 @@ celloSynt, -- * Plucked- guitar, harpsichord, + guitar, harpsichord, -- * Strikeh @@ -75,20 +75,20 @@ smallBanyan,banyan, largeBanyan, magicBanyan, smallXylophone, xylophone, largeXylophone, magicXylophone, smallTibetanBowl180, tibetanBowl180, largeTibetanBowl180, magicTibetanBowl180,- smallSpinelSphere, spinelSphere, largeSpinelSphere, magicSpinelSphere, + smallSpinelSphere, spinelSphere, largeSpinelSphere, magicSpinelSphere, smallPotLid, potLid, largePotLid, magicPotLid, smallRedCedarWoodPlate, redCedarWoodPlate, largeRedCedarWoodPlate, magicRedCedarWoodPlate, smallTubularBell, tubularBell, largeTubularBell, magicTubularBell, smallRedwoodPlate, redwoodPlate, largeRedwoodPlate, magicRedwoodPlate, smallDouglasFirWoodPlate, douglasFirWoodPlate, largeDouglasFirWoodPlate, magicDouglasFirWoodPlate, smallUniformWoodenBar, uniformWoodenBar, largeUniformWoodenBar, magicUniformWoodenBar, smallUniformAluminumBar,- uniformAluminumBar, largeUniformAluminumBar, magicUniformAluminumBar, + uniformAluminumBar, largeUniformAluminumBar, magicUniformAluminumBar, smallVibraphone1, vibraphone1, largeVibraphone1, magicVibraphone1, smallVibraphone2, vibraphone2, largeVibraphone2, magicVibraphone2, smallChalandiPlates, chalandiPlates, largeChalandiPlates, magicChalandiPlates, smallTibetanBowl152, tibetanBowl152, largeTibetanBowl152, magicTibetanBowl152, smallTibetanBowl140, tibetanBowl140, largeTibetanBowl140, magicTibetanBowl140,- smallWineGlass, wineGlass, largeWineGlass, magicWineGlass, + smallWineGlass, wineGlass, largeWineGlass, magicWineGlass, smallHandbell, handbell, largeHandbell, magicHandbell, smallAlbertClockBellBelfast, albertClockBellBelfast, largeAlbertClockBellBelfast, magicAlbertClockBellBelfast, smallWoodBlock, woodBlock, largeWoodBlock, magicWoodBlock,@@ -97,7 +97,7 @@ scrapeDahina, scrapeBanyan, scrapeXylophone, scrapeTibetanBowl180, scrapeSpinelSphere, scrapePotLid, scrapeRedCedarWoodPlate, scrapeTubularBell, scrapeRedwoodPlate, scrapeDouglasFirWoodPlate, scrapeUniformWoodenBar, scrapeUniformAluminumBar, scrapeVibraphone1, scrapeVibraphone2, scrapeChalandiPlates, scrapeTibetanBowl152, scrapeTibetanBowl140, scrapeWineGlass,- scrapeSmallHandbell, scrapeAlbertClockBellBelfast, scrapeWoodBlock, + scrapeSmallHandbell, scrapeAlbertClockBellBelfast, scrapeWoodBlock, scrapeFastDahina, scrapeFastBanyan, scrapeFastXylophone, scrapeFastTibetanBowl180, scrapeFastSpinelSphere, scrapeFastPotLid, scrapeFastRedCedarWoodPlate, scrapeFastTubularBell, scrapeFastRedwoodPlate, scrapeFastDouglasFirWoodPlate, scrapeFastUniformWoodenBar,@@ -111,11 +111,11 @@ -- ** Scrape monosynth- -- | Unfortunately they don't work with @atMonoMidi@. Though @atNote@ works fine. + -- | Unfortunately they don't work with @atMonoMidi@. Though @atNote@ works fine. scrapeDahinam, scrapeBanyanm, scrapeXylophonem, scrapeTibetanBowl180m, scrapeSpinelSpherem, scrapePotLidm, scrapeRedCedarWoodPlatem, scrapeTubularBellm, scrapeRedwoodPlatem, scrapeDouglasFirWoodPlatem, scrapeUniformWoodenBarm, scrapeUniformAluminumBarm, scrapeVibraphone1m, scrapeVibraphone2m, scrapeChalandiPlatesm, scrapeTibetanBowl152m, scrapeTibetanBowl140m, scrapeWineGlassm,- scrapeSmallHandbellm, scrapeAlbertClockBellBelfastm, scrapeWoodBlockm, + scrapeSmallHandbellm, scrapeAlbertClockBellBelfastm, scrapeWoodBlockm, scrapePadDahinam, scrapePadBanyanm, scrapePadXylophonem, scrapePadTibetanBowl180m, scrapePadSpinelSpherem, scrapePadPotLidm, scrapePadRedCedarWoodPlatem, scrapePadTubularBellm, scrapePadRedwoodPlatem, scrapePadDouglasFirWoodPlatem, scrapePadUniformWoodenBarm,@@ -126,28 +126,28 @@ Wind(..), woodWind', - fluteSpec, shortFluteSpec, - flute, shortFlute, fluteVibrato, mutedFlute, brightFlute, + fluteSpec, shortFluteSpec,+ flute, shortFlute, fluteVibrato, mutedFlute, brightFlute, bassClarinetSpec, shortBassClarinetSpec, bassClarinet, shortBassClarinet, bassClarinetVibrato, mutedBassClarinet, brightBassClarinet, - frenchHornSpec, shortFrenchHornSpec, - frenchHorn, shortFrenchHorn, frenchHornVibrato, mutedFrenchHorn, brightFrenchHorn, + frenchHornSpec, shortFrenchHornSpec,+ frenchHorn, shortFrenchHorn, frenchHornVibrato, mutedFrenchHorn, brightFrenchHorn, shengSpec, shortShengSpec, sheng, shortSheng, shengVibrato, mutedSheng, brightSheng, - hulusiSpec, shortHulusiSpec, + hulusiSpec, shortHulusiSpec, hulusi, shortHulusi, hulusiVibrato, mutedHulusi, brightHulusi, - diziSpec, shortDiziSpec, + diziSpec, shortDiziSpec, dizi, shortDizi, diziVibrato, mutedDizi, brightDizi, -- * SHARC instruments- SharcInstr, - soloSharc, orcSharc, padSharc, purePadSharc, - dreamSharc, lightIsTooBrightSharc, whaleSongSharc, + SharcInstr,+ soloSharc, orcSharc, padSharc, purePadSharc,+ dreamSharc, lightIsTooBrightSharc, whaleSongSharc, sharcOrgan, -- ** Padsynth instruments@@ -166,7 +166,7 @@ psDeepMagicPadSharc, psDeepMagicPadSharc', psDeepMagicSoftPadSharc, psDeepMagicSoftPadSharc', --- *** Crossfades- psPadSharcCfd, psPadSharcCfd', psPadSharcCfd4, psPadSharcCfd4', psDeepPadSharcCfd, psDeepPadSharcCfd', + psPadSharcCfd, psPadSharcCfd', psPadSharcCfd4, psPadSharcCfd4', psDeepPadSharcCfd, psDeepPadSharcCfd', psDeepPadSharcCfd4, psDeepPadSharcCfd4', psSoftPadSharcCfd, psSoftPadSharcCfd', psSoftPadSharcCfd4, psSoftPadSharcCfd4', psDeepSoftPadSharcCfd, psDeepSoftPadSharcCfd', psDeepSoftPadSharcCfd4, psDeepSoftPadSharcCfd4', @@ -179,7 +179,7 @@ psSoftPadSharcHifi, psMagicPadSharcHifi, psMagicSoftPadSharcHifi,- psLargePianoSharcHifi, + psLargePianoSharcHifi, xpsLargePianoSharcHifi, -- *** Vedic pads@@ -220,14 +220,14 @@ -- * Nature windWall, mildWind, wind, snowCrackle, - -- * Misc - -- limRel, + -- * Misc+ -- limRel, singleFx, singleFx' ) where import Control.Monad -import Csound.Base +import Csound.Base import qualified Csound.Catalog.Wave as C import qualified Csound.Catalog.Reson as C@@ -252,7 +252,7 @@ monoSig1 :: SigSpace a => (Sig -> a) -> (MonoArg -> a) monoSig1 f arg = mul env $ f cps- where + where env = amp * monoAdsr arg 0.35 0.5 1 0.5 amp = port (monoAmp arg) 0.01 cps = portk (monoCps arg) (delay1 gate * 0.01)@@ -273,7 +273,7 @@ singleFx = fx1 singleFxFilter :: Sig -> (ResonFilter -> a -> a) -> Patch a -> Patch a-singleFxFilter dw f = FxChain [fxSpecFilter dw (\filter x -> return $ f filter x)] +singleFxFilter dw f = FxChain [fxSpecFilter dw (\filter x -> return $ f filter x)] -- | Creates a simple FX-xhain, that contains a single effect. -- The first argument is the dry/wet-value.@@ -287,17 +287,17 @@ ---------------------------------------------- -- electric pianos -data Epiano1 = Epiano1 +data Epiano1 = Epiano1 { epiano1Rel :: D } instance Default Epiano1 where- def = Epiano1 5 + def = Epiano1 5 epiano1 = epiano1' def epiano1' (Epiano1 rel) = withLargeHall $ polySynt $ \a -> mul 0.4 $ C.simpleFading rel a -data MutedPiano = MutedPiano +data MutedPiano = MutedPiano { mutedPianoMute :: Sig , mutedPianoRel :: D } @@ -306,23 +306,23 @@ mutedPiano = mutedPiano' def -mutedPiano' (MutedPiano mute rel) = fx1 0.25 (largeHall2 . at (mlp3 (250 + 7000 * mute) 0.2)) $ - polySynt $ \a -> mul 0.7 $ C.simpleSust rel a +mutedPiano' (MutedPiano mute rel) = fx1 0.25 (largeHall2 . at (mlp3 (250 + 7000 * mute) 0.2)) $+ polySynt $ \a -> mul 0.7 $ C.simpleSust rel a amPiano = fx1 0.25 id $ polySyntFilter $ \filter -> mul 1.4 . onCps (C.amPianoBy filter) -fmPiano = withSmallHall $ polySynt $ at fromMono . mul 0.75 . onCps (C.fmFlavio 6 3) +fmPiano = withSmallHall $ polySynt $ at fromMono . mul 0.75 . onCps (C.fmFlavio 6 3) epianoReleaseTime :: ReleaseTime epianoReleaseTime = 0.25 -epiano2 = addHammer 0.15 $ fx1 0.25 smallHall2 $ - polySyntFilter $ \filter -> mul 1.125 . at fromMono . (onCps $ C.epianoBy filter epianoReleaseTime [C.EpianoOsc 4 5 1 1, C.EpianoOsc 8 10 2.01 1]) +epiano2 = addHammer 0.15 $ fx1 0.25 smallHall2 $+ polySyntFilter $ \filter -> mul 1.125 . at fromMono . (onCps $ C.epianoBy filter epianoReleaseTime [C.EpianoOsc 4 5 1 1, C.EpianoOsc 8 10 2.01 1]) -epianoHeavy = addHammer 0.15 $ fx1 0.2 smallHall2 $ - polySyntFilter $ \filter -> mul 1.125 . at fromMono . (onCps $ C.epianoBy filter epianoReleaseTime [C.EpianoOsc 4 5 1 1, C.EpianoOsc 8 10 2.01 1, C.EpianoOsc 8 15 0.5 0.5]) +epianoHeavy = addHammer 0.15 $ fx1 0.2 smallHall2 $+ polySyntFilter $ \filter -> mul 1.125 . at fromMono . (onCps $ C.epianoBy filter epianoReleaseTime [C.EpianoOsc 4 5 1 1, C.EpianoOsc 8 10 2.01 1, C.EpianoOsc 8 15 0.5 0.5]) -epianoBright = addHammer 0.15 $ fx1 0.2 smallHall2 $ +epianoBright = addHammer 0.15 $ fx1 0.2 smallHall2 $ polySyntFilter $ \filter -> mul 1.12 . at fromMono . (onCps $ C.epianoBy filter 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]) vibraphonePiano1 = vibraphoneToPiano smallVibraphone1@@ -337,10 +337,10 @@ ---------------------------------------------- -- organs -cathedralOrgan = withLargeHall $ polySynt $ at fromMono . mul 0.7 . onCps C.cathedralOrgan +cathedralOrgan = withLargeHall $ polySynt $ at fromMono . mul 0.7 . onCps C.cathedralOrgan -- [0, 30]-data HammondOrgan = HammondOrgan +data HammondOrgan = HammondOrgan { hammondOrganDetune :: Sig } instance Default HammondOrgan where@@ -354,7 +354,7 @@ hammondOrganm' (HammondOrgan detune) = fx1 0.15 smallRoom2 $ monoSynt $ mul 0.4 . at fromMono . monoSig1 (C.hammondOrgan detune) -toneWheelOrgan = withSmallHall $ polySynt $ at fromMono . mul (0.6 * fadeOut 0.05) . onCps C.toneWheel +toneWheelOrgan = withSmallHall $ polySynt $ at fromMono . mul (0.6 * fadeOut 0.05) . onCps C.toneWheel sawOrgan = mul 0.45 $ waveOrgan rndSaw triOrgan = mul 0.5 $ waveOrgan rndTri@@ -369,13 +369,13 @@ organFx :: Patch2 -> Patch2 organFx = withSmallHall . singleFxFilter 1 (\filter -> at $ filter 3500 0.1) -waveOrgan :: (Sig -> SE Sig) -> Patch2 +waveOrgan :: (Sig -> SE Sig) -> Patch2 waveOrgan wave = organFx $ polySynt $ onCps $ at fromMono . mul (fades 0.01 0.01) . wave -waveOrganm :: (Sig -> SE Sig) -> Patch2 +waveOrganm :: (Sig -> SE Sig) -> Patch2 waveOrganm wave = organFx $ monoSynt $ monoSig1 $ at fromMono . mul (fades 0.01 0.01) . wave -waveOrganWithKey :: (D -> Sig -> SE Sig) -> Patch2 +waveOrganWithKey :: (D -> Sig -> SE Sig) -> Patch2 waveOrganWithKey wave = organFx $ polySynt $ onCps $ \cps -> (at fromMono . mul (fades 0.01 0.01) . wave cps) (sig cps) ----------------------------------------------@@ -414,7 +414,7 @@ choirE' = choir' singE choirU' = choir' singU -data NoisyChoir = NoisyChoir +data NoisyChoir = NoisyChoir { noisyChoirFilterNum :: Int , noisyChoirBw :: Sig }@@ -431,7 +431,7 @@ dryNoisyChoir (NoisyChoir n bw) = polySynt $ at fromMono . mul 0.45 . onCps (C.noisyChoir n bw) longNoisyChoir' ch = fx1 0.15 magicCave2 $ dryNoisyChoir ch- + noisyChoir' ch = fx1 0.15 largeHall2 $ dryNoisyChoir ch -- modes (wth delay or not delay)@@ -529,7 +529,7 @@ -- | The first argument is brightness (0 to 1) dreamPadm' :: Sig -> Patch2-dreamPadm' bright = dreamPadFx $ monoSyntFilter $ \filter -> fmap fromMono . monoSig1 (C.dreamPad filter bright) +dreamPadm' bright = dreamPadFx $ monoSyntFilter $ \filter -> fmap fromMono . monoSig1 (C.dreamPad filter bright) -- | The first argument is brightness (0 to 1). The second argument is a wave function. dreamPadBym' :: Sig -> (Sig -> SE Sig) -> Patch2@@ -537,28 +537,28 @@ -- | The first argument is brightness (0 to 1) underwaterPad' :: Sig -> Patch2-underwaterPad' bright = dreamPadFx $ polySyntFilter $ \filter -> fmap fromMono . onCps (C.underwaterPad filter bright) +underwaterPad' bright = dreamPadFx $ polySyntFilter $ \filter -> fmap fromMono . onCps (C.underwaterPad filter bright) -- | The first argument is brightness (0 to 1) underwaterPadm' :: Sig -> Patch2-underwaterPadm' bright = dreamPadFx $ monoSyntFilter $ \filter -> fmap fromMono . monoSig1 (C.underwaterPad filter bright) +underwaterPadm' bright = dreamPadFx $ monoSyntFilter $ \filter -> fmap fromMono . monoSig1 (C.underwaterPad filter bright) -- | The first argument is brightness (0 to 1) lightIsTooBrightPad' :: Sig -> Patch2-lightIsTooBrightPad' bright = dreamPadFx $ polySyntFilter $ \filter -> fmap fromMono . onCps (C.lightIsTooBrightPad filter bright) +lightIsTooBrightPad' bright = dreamPadFx $ polySyntFilter $ \filter -> fmap fromMono . onCps (C.lightIsTooBrightPad filter bright) lightIsTooBrightPadm' :: Sig -> Patch2-lightIsTooBrightPadm' bright = dreamPadFx $ monoSyntFilter $ \filter -> fmap fromMono . monoSig1 (C.lightIsTooBrightPad filter bright) +lightIsTooBrightPadm' bright = dreamPadFx $ monoSyntFilter $ \filter -> fmap fromMono . monoSig1 (C.lightIsTooBrightPad filter bright) lightIsTooBrightPadWithKey :: Sig -> (D -> Sig -> SE Sig) -> Patch2 lightIsTooBrightPadWithKey brightness wave = dreamPadFx $ polySyntFilter $ genDreamPadNote C.lightIsTooBrightPadBy wave brightness -- | The first argument is brightness (0 to 1) whaleSongPad' :: Sig -> Patch2-whaleSongPad' bright = dreamPadFx $ polySyntFilter $ \filter -> fmap fromMono . onCps (C.whaleSongPad filter bright) +whaleSongPad' bright = dreamPadFx $ polySyntFilter $ \filter -> fmap fromMono . onCps (C.whaleSongPad filter bright) whaleSongPadm' :: Sig -> Patch2-whaleSongPadm' bright = dreamPadFx $ monoSyntFilter $ \filter -> fmap fromMono . monoSig1 (C.whaleSongPad filter bright) +whaleSongPadm' bright = dreamPadFx $ monoSyntFilter $ \filter -> fmap fromMono . monoSig1 (C.whaleSongPad filter bright) whaleSongPadWithKey :: Sig -> (D -> Sig -> SE Sig) -> Patch2 whaleSongPadWithKey brightness wave = dreamPadFx $ polySyntFilter $ genDreamPadNote C.whaleSongPadBy wave brightness@@ -568,13 +568,13 @@ polySynthFxChain = FxChain [fxSpec 0.25 (return . largeHall2), fxSpec 0.25 (return . (at $ echo 0.25 0.65)), fxSpec 0.25 (at $ chorus 0.07 1.25 1), fxSpecFilter 1 $ \filter -> return . at (filter 5500 0.12 . filt 2 br 18000 0.3)] -polySynth = polySynthFxChain $ polySynt $ fmap fromMono . onCps C.polySynth -polySynthm = polySynthFxChain $ monoSynt $ fmap fromMono . monoSig1 C.polySynth - +polySynth = polySynthFxChain $ polySynt $ fmap fromMono . onCps C.polySynth+polySynthm = polySynthFxChain $ monoSynt $ fmap fromMono . monoSig1 C.polySynth+ phasingLead = withSmallHall $ polySynt $ at fromMono . mul (0.7 * fadeOut 0.05) . onCps (uncurry C.phasingSynth) -data RazorLead = RazorLead - { razorLeadBright :: Sig +data RazorLead = RazorLead+ { razorLeadBright :: Sig , razorLeadSpeed :: Sig } instance Default RazorLead where@@ -629,10 +629,10 @@ strikeRelease (amp, cps) spec = (0.85 * strikeRel spec * amp) * amp + (strikeRel spec) - (cps / 10000) -- dac $ mixAt 0.15 largeHall2 $ mixAt 0.2 (echo 0.25 0.45) $ at fromMono $ midi $ onMsg $ onCps (mul (fadeOut 2) . C.tibetanBowl152 )-data Strike = Strike +data Strike = Strike { strikeRel :: D , strikeHasDelay :: Bool- , strikeReverb :: Sig2 -> Sig2 + , strikeReverb :: Sig2 -> Sig2 } instance Default Strike where@@ -657,10 +657,10 @@ Huge -> Large toStrikeSpec :: Size -> Size -> Strike-toStrikeSpec revSpec restSpec = Strike +toStrikeSpec revSpec restSpec = Strike { strikeReverb = toReverb revSpec , strikeRel = toRel restSpec- , strikeHasDelay = toHasDelay restSpec } + , strikeHasDelay = toHasDelay restSpec } toReverb :: Size -> (Sig2 -> Sig2) toReverb x = case x of@@ -835,12 +835,12 @@ --------------------------------------------------------------- -- scrape --- scrapePatch +-- scrapePatch names = ["dahina","banyan","xylophone","tibetanBowl180","spinelSphere","potLid","redCedarWoodPlate","tubularBell","redwoodPlate","douglasFirWoodPlate","uniformWoodenBar","uniformAluminumBar","vibraphone1","vibraphone2","chalandiPlates","tibetanBowl152","tibetanBowl140","wineGlass","smallHandbell","albertClockBellBelfast","woodBlock"] toUpperName (x:xs) = toUpper x : xs --- scrapePatch +-- scrapePatch scrapeRelease :: (D, D) -> D -> D scrapeRelease (amp, cps) rel = (0.85 * rel * amp) * amp + rel - (cps / 10000)@@ -991,29 +991,29 @@ ------------------------------------ -- woodwind -data Wind = Wind +data Wind = Wind { windAtt :: D , windDec :: D- , windSus :: D - , windVib :: D + , windSus :: D+ , windVib :: D , windBright :: D } -woodWind' spec instr = withSmallHall $ polySynt $ \(amp, cps) -> mul 1.3 $ do +woodWind' spec instr = withSmallHall $ polySynt $ \(amp, cps) -> mul 1.3 $ do seed <- rnd 1 vibDisp <- rnd (0.1 * amp)- let dispVib vib = vib * (0.9 + vibDisp) + let dispVib vib = vib * (0.9 + vibDisp) return $ fromMono $ mul (0.8 * sig amp * fadeOut (windDec spec)) $ instr seed (dispVib $ windVib spec) (windAtt spec) (windSus spec) (windDec spec) (0.4 + 0.75 * windBright spec * amp) cps -- flute -fluteSpec bright vib = Wind +fluteSpec bright vib = Wind { windAtt = 0.08 , windDec = 0.1 , windSus = 20 , windVib = vib , windBright = bright } -shortFluteSpec bright vib = Wind +shortFluteSpec bright vib = Wind { windAtt = 0.03 , windDec = 0.05 , windSus = 20@@ -1021,40 +1021,40 @@ , windBright = bright } flute = woodWind' (fluteSpec br vib) C.flute- where + where br = 0.7 vib = 0.015 shortFlute = woodWind' (shortFluteSpec br vib) C.flute- where + where br = 0.7 vib = 0.015 fluteVibrato = woodWind' (fluteSpec br vib) C.flute- where + where br = 0.7 vib = 0.04 mutedFlute = woodWind' (fluteSpec br vib) C.flute- where + where br = 0.25 vib = 0.015 brightFlute = woodWind' (fluteSpec br vib) C.flute- where + where br = 1.2 vib = 0.015 -- bass clarinet -bassClarinetSpec bright vib = Wind +bassClarinetSpec bright vib = Wind { windAtt = 0.06 , windDec = 0.15 , windSus = 20 , windVib = vib , windBright = bright } -shortBassClarinetSpec bright vib = Wind +shortBassClarinetSpec bright vib = Wind { windAtt = 0.03 , windDec = 0.04 , windSus = 20@@ -1062,40 +1062,40 @@ , windBright = bright } bassClarinet = woodWind' (bassClarinetSpec br vib) C.bassClarinet- where + where br = 0.7 vib = 0.01 shortBassClarinet = woodWind' (shortBassClarinetSpec br vib) C.bassClarinet- where + where br = 0.7 vib = 0.01 bassClarinetVibrato = woodWind' (bassClarinetSpec br vib) C.bassClarinet- where + where br = 0.7 vib = 0.035 mutedBassClarinet = woodWind' (bassClarinetSpec br vib) C.bassClarinet- where + where br = 0.25 vib = 0.01 brightBassClarinet = woodWind' (bassClarinetSpec br vib) C.bassClarinet- where + where br = 1.2 vib = 0.01 -- french horn -frenchHornSpec bright vib = Wind +frenchHornSpec bright vib = Wind { windAtt = 0.08 , windDec = 0.25 , windSus = 20 , windVib = vib , windBright = bright } -shortFrenchHornSpec bright vib = Wind +shortFrenchHornSpec bright vib = Wind { windAtt = 0.03 , windDec = 0.04 , windSus = 20@@ -1103,40 +1103,40 @@ , windBright = bright } frenchHorn = woodWind' (frenchHornSpec br vib) C.frenchHorn- where + where br = 0.7 vib = 0.01 shortFrenchHorn = woodWind' (shortFrenchHornSpec br vib) C.frenchHorn- where + where br = 0.7 vib = 0.01 frenchHornVibrato = woodWind' (frenchHornSpec br vib) C.frenchHorn- where + where br = 0.7 vib = 0.035 mutedFrenchHorn = woodWind' (frenchHornSpec br vib) C.frenchHorn- where + where br = 0.25 vib = 0.01 brightFrenchHorn = woodWind' (frenchHornSpec br vib) C.frenchHorn- where + where br = 1.2 vib = 0.01 -- sheng -shengSpec bright vib = Wind +shengSpec bright vib = Wind { windAtt = 0.1 , windDec = 0.2 , windSus = 20 , windVib = vib , windBright = bright } -shortShengSpec bright vib = Wind +shortShengSpec bright vib = Wind { windAtt = 0.03 , windDec = 0.04 , windSus = 20@@ -1144,40 +1144,40 @@ , windBright = bright } sheng = woodWind' (shengSpec br vib) C.sheng- where + where br = 0.7 vib = 0.01 shortSheng = woodWind' (shortShengSpec br vib) C.sheng- where + where br = 0.7 vib = 0.01 shengVibrato = woodWind' (shengSpec br vib) C.sheng- where + where br = 0.7 vib = 0.025 mutedSheng = woodWind' (shengSpec br vib) C.sheng- where + where br = 0.25 vib = 0.01 brightSheng = woodWind' (shortShengSpec br vib) C.sheng- where + where br = 1.2 vib = 0.01 -- hulusi -hulusiSpec bright vib = Wind +hulusiSpec bright vib = Wind { windAtt = 0.12 , windDec = 0.14 , windSus = 20 , windVib = vib , windBright = bright } -shortHulusiSpec bright vib = Wind +shortHulusiSpec bright vib = Wind { windAtt = 0.03 , windDec = 0.04 , windSus = 20@@ -1185,41 +1185,41 @@ , windBright = bright } hulusi = woodWind' (hulusiSpec br vib) C.hulusi- where + where br = 0.7 vib = 0.015 shortHulusi = woodWind' (shortHulusiSpec br vib) C.hulusi- where + where br = 0.7 vib = 0.015 hulusiVibrato = woodWind' (hulusiSpec br vib) C.hulusi- where + where br = 0.7 vib = 0.035 mutedHulusi = woodWind' (hulusiSpec br vib) C.hulusi- where + where br = 0.25 vib = 0.015 brightHulusi = woodWind' (shortHulusiSpec br vib) C.hulusi- where + where br = 1.2 vib = 0.015 -- dizi -diziSpec bright vib = Wind +diziSpec bright vib = Wind { windAtt = 0.03 , windDec = 0.2 , windSus = 20 , windVib = vib , windBright = bright } -shortDiziSpec bright vib = Wind +shortDiziSpec bright vib = Wind { windAtt = 0.1 , windDec = 0.04 , windSus = 20@@ -1227,27 +1227,27 @@ , windBright = bright } dizi = woodWind' (diziSpec br vib) C.dizi- where + where br = 0.7 vib = 0.01 shortDizi = woodWind' (shortDiziSpec br vib) C.dizi- where + where br = 0.7 vib = 0.01 diziVibrato = woodWind' (diziSpec br vib) C.dizi- where + where br = 0.7 vib = 0.035 mutedDizi = woodWind' (diziSpec br vib) C.dizi- where + where br = 0.25 vib = 0.01 brightDizi = woodWind' (shortDiziSpec br vib) C.dizi- where + where br = 1.2 vib = 0.01 @@ -1267,7 +1267,7 @@ black = fx1 0.25 smallHall2 $ polySynt $ at fromMono . mul (2 * fades 0.01 0.5). onCps (\cps -> C.black 3 (cps / 2) (cps * 2) 12 (sig cps)) simpleMarimba = fx1 0.25 smallHall2 $ polySynt $ at fromMono . mul (0.8 * fades 0.01 0.5). onCps (C.simpleMarimba 5)- + impulseMarimba1 = fx1 0.3 smallHall2 $ polySynt $ at fromMono . mul (0.8 * fadeOut 0.75). onCps C.impulseMarimba1 impulseMarimba2 = fx1 0.3 smallHall2 $ polySynt $ at fromMono . mul (0.8 * fadeOut 0.75). onCps C.impulseMarimba2@@ -1277,7 +1277,7 @@ snowCrackle = polySynt $ \(amp, cps) -> (return . fromMono . mul (0.8 * sig amp * fades 0.001 0.001) . (C.snowCrackle . (/ 25))) (sig cps) noiseBell = fx1 0.25 smallHall2 $ polySynt $ at fromMono . mul 0.75 . onCps (C.noiseBell (31, 125) 2.3 0.2 . ( * 8))- + ------------------------------------ -- vowels @@ -1370,7 +1370,7 @@ -- | 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 = fxs $ polySynt $ \ampCps -> mul (0.75 * C.pianoEnv releaseTime ampCps) $ onCps (C.padsynthSharcOsc2' spec sh) ampCps@@ -1420,7 +1420,7 @@ where rel (amp, cps) = amp - cps / 3500 psPadFilter filter = psPadFilterBy 75 15 filter-psSoftPadFilter filter = psPadFilterBy 350 0.15 filter +psSoftPadFilter filter = psPadFilterBy 350 0.15 filter deepOsc :: (Num a, SigSpace a) => (D -> a) -> (D -> a) deepOsc f x = mul 0.5 (f x + f (x / 2))@@ -1436,7 +1436,7 @@ genPsPad :: (Sig2 -> Sig2) -> (ResonFilter -> (D, D) -> Sig -> Sig) -> (D -> SE Sig2) -> Patch2 genPsPad effect mkFilter wave = fxs $ polySyntFilter $ \filter ampCps -> mul (1.2 * fades 0.5 (0.6 + rel ampCps)) $ onCps (at (mkFilter filter ampCps) . wave) ampCps- where + where fxs = FxChain [fxSpec 0.25 (return . effect), fxSpec 0.5 (return . (at $ mul 2.1 . saturator 0.75)), fxSpec 0.3 (return . (at $ echo 0.125 0.65))] rel (amp, cps) = amp - cps / 3500 @@ -1591,8 +1591,8 @@ -- -- Good values for bandwidth lies in the interval [0, 120] vedicPad :: SharcInstr -> PadsynthBandwidth -> Patch2-vedicPad instr bandwidth = mul 0.8 $ - addPreFx 0.45 (return . pingPong 0.25 0.65 0.5) $ +vedicPad instr bandwidth = mul 0.8 $+ addPreFx 0.45 (return . pingPong 0.25 0.65 0.5) $ psDeepSoftPadSharc' (def { padSharcBandwidth = bandwidth, padSharcSize = 15 }) instr -- | Deep spiritual drones. Crossfade between two instruments.@@ -1601,8 +1601,8 @@ -- -- 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 (return . pingPong 0.25 0.65 0.5) $ +vedicPadCfd k instr1 instr2 bandwidth = mul 0.8 $+ addPreFx 0.45 (return . 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.@@ -1611,9 +1611,9 @@ -- -- 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 (return . pingPong 0.25 0.65 0.5) $ - psDeepSoftPadSharcCfd4' kX kY +vedicPadCfd4 kX kY instr1 instr2 instr3 instr4 bandwidth = mul 0.8 $+ addPreFx 0.45 (return . 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) @@ -1624,9 +1624,9 @@ -- -- Good values for bandwidth lies in the interval [0, 120] vedicPadHifi :: SharcInstr -> PadsynthBandwidth -> Patch2-vedicPadHifi instr bandwidth = mul 0.8 $ - addPreFx 0.45 (return . pingPong 0.25 0.65 0.5) $ - deepPad $ +vedicPadHifi instr bandwidth = mul 0.8 $+ addPreFx 0.45 (return . 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@.@@ -1635,9 +1635,9 @@ -- -- Good values for bandwidth lies in the interval [0, 120] vedicPadLofi :: SharcInstr -> PadsynthBandwidth -> Patch2-vedicPadLofi instr bandwidth = mul 0.8 $ - addPreFx 0.45 (return . pingPong 0.25 0.65 0.5) $ - deepPad $ +vedicPadLofi instr bandwidth = mul 0.8 $+ addPreFx 0.45 (return . pingPong 0.25 0.65 0.5) $+ deepPad $ psSoftPadSharc' (def { padSharcBandwidth = bandwidth, padSharcSize = 4 }) instr -- | Eminent@@ -1814,7 +1814,7 @@ noisyRise :: Patch2 noisyRise = fxs $ polySynt $ onCps $ \cps -> mul 0.24 $ wave cps where- fxs = FxChain [fxSpec 0.35 (return . largeHall2), fxSpec 0.5 (return . (at $ echo 0.25 0.85))] + fxs = FxChain [fxSpec 0.35 (return . largeHall2), fxSpec 0.5 (return . (at $ echo 0.25 0.85))] 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))@@ -1833,7 +1833,7 @@ noisySpiral' :: D -> Patch2 noisySpiral' spiralSpeed = fxs $ polySynt $ onCps $ \cps -> mul 0.24 $ wave cps where- fxs = FxChain [fxSpec 0.15 (return . magicCave2), fxSpec 0.43 (return . (at $ echo 0.35 0.85))] + fxs = FxChain [fxSpec 0.15 (return . magicCave2), fxSpec 0.43 (return . (at $ echo 0.35 0.85))] 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@@ -1854,8 +1854,8 @@ ---------------------------------- -dafunkWave cfq adsrFun (amp, cps) = at (bhp 30) $ diode (0.95 + 0.2 * cfq) (550 + 4500 * cfq) (0.52 + 0.4 * cfq) $ amp * env * (\x -> saw x + 0.5 * saw (x * 0.503) + 0.25 * (sqr (x * 0.253))) (port cps 0.001)- where +dafunkWave cfq adsrFun (amp, cps) = at (bhp 30) $ diode 1.2 (550 + 4500 * cfq) (0.52 + 0.4 * cfq) $ amp * env * (\x -> saw x + 0.5 * saw (x * 0.503) + 0.25 * (sqr (x * 0.253))) (port cps 0.001)+ where env = adsrFun 0.019 8.5 0.2 0.07 dafunkLead = adsrMono (\env (amp, cps) -> return $ fromMono $ dafunkWave cfq env (amp, cps))