{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
-- | Patches
--
-- Collection of beautiful timbres. To try the instrument with midi device just type in the interpreter:
--
-- > > dac $ atMidi hammondOrgan
-- If you don't have the real device, you can try the virtual midi:
--
-- > > vdac $ atMidi vibraphone1
--
-- The function @atMidi@ invokes a @Patch@ with midi.
module Csound.Patch(

  -- * Electric piano
  Epiano1(..), epiano1, epiano1',
  MutedPiano(..), mutedPiano, mutedPiano',
  amPiano, fmPiano,
  epiano2, epianoHeavy, epianoBright,
  vibraphonePiano1, vibraphonePiano2,
  addHammer,

  -- * Organ
  cathedralOrgan, toneWheelOrgan,
  HammondOrgan(..), hammondOrgan, hammondOrgan',
  sawOrgan, triOrgan, sqrOrgan, pwOrgan, waveOrgan,

  hammondOrganm, hammondOrganm', sawOrganm, triOrganm, sqrOrganm, pwOrganm, waveOrganm,

  -- * Accordeon
  accordeon, accordeonBright1, accordeonBright2, brokenAccordeon, accordeonHeavy,
  accordeon', Accordeon(..),

  -- * Choir
  choirA, choirO, choirU, choirE,
  Choir(..), choirA', choirO', choirU', choirE',

  windSings, noisyChoir, longNoisyChoir, noisyChoir', longNoisyChoir', NoisyChoir(..),
  noisyRise, noisySpiral, noisySpiral',

  -- * Pad
  pwPad, triPad, nightPad, overtonePad, caveOvertonePad,
  chorusel, pwEnsemble, fmDroneSlow, fmDroneMedium, fmDroneFast, vibrophonePad,
  RazorPad(..), razorPadSlow, razorPadFast, razorPadTremolo, razorPad, razorPad',
  dreamPad, underwaterPad, lightIsTooBrightPad, whaleSongPad, dreamPadBy,
  dreamPad', underwaterPad', lightIsTooBrightPad', whaleSongPad',

  -- ** Pad Monosynth
  pwPadm, triPadm, nightPadm, overtonePadm, caveOvertonePadm, choruselm,
  pwEnsemblem, fmDroneSlowm, fmDroneMediumm, fmDroneFastm,
  razorPadSlowm, razorPadFastm, razorPadTremolom, razorPadm, razorPadm',
  dreamPadm, dreamPadBym, underwaterPadm, lightIsTooBrightPadm, whaleSongPadm, dreamPadm', underwaterPadm', dreamPadBym',
  lightIsTooBrightPadm', whaleSongPadm',

  -- * Lead
  polySynth,
  phasingLead, RazorLead(..), razorLeadSlow, razorLeadFast, razorLeadTremolo,
  razorLead, razorLead',
  overtoneLead,

  -- ** Lead Monosynth
  polySynthm, dafunkLead,

  -- * Bass
  simpleBass, pwBass, deepBass, withDeepBass,
  fmBass1, fmBass2,

  -- * Bowed
  celloSynt,

  -- * Plucked
  guitar, harpsichord,

  -- * Strikeh

  smallDahina, dahina, largeDahina, magicDahina,
  smallBanyan,banyan, largeBanyan, magicBanyan,
  smallXylophone, xylophone, largeXylophone, magicXylophone,
  smallTibetanBowl180, tibetanBowl180, largeTibetanBowl180, magicTibetanBowl180,
  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,
  smallVibraphone1, vibraphone1, largeVibraphone1, magicVibraphone1,
  smallVibraphone2, vibraphone2, largeVibraphone2, magicVibraphone2,
  smallChalandiPlates, chalandiPlates, largeChalandiPlates, magicChalandiPlates,
  smallTibetanBowl152, tibetanBowl152, largeTibetanBowl152, magicTibetanBowl152,
  smallTibetanBowl140, tibetanBowl140, largeTibetanBowl140, magicTibetanBowl140,
  smallWineGlass, wineGlass, largeWineGlass, magicWineGlass,
  smallHandbell, handbell, largeHandbell, magicHandbell,
  smallAlbertClockBellBelfast, albertClockBellBelfast, largeAlbertClockBellBelfast, magicAlbertClockBellBelfast,
  smallWoodBlock, woodBlock, largeWoodBlock, magicWoodBlock,

  -- * Scrape
  scrapeDahina, scrapeBanyan, scrapeXylophone, scrapeTibetanBowl180, scrapeSpinelSphere, scrapePotLid, scrapeRedCedarWoodPlate,
  scrapeTubularBell, scrapeRedwoodPlate, scrapeDouglasFirWoodPlate, scrapeUniformWoodenBar, scrapeUniformAluminumBar,
  scrapeVibraphone1, scrapeVibraphone2, scrapeChalandiPlates, scrapeTibetanBowl152, scrapeTibetanBowl140, scrapeWineGlass,
  scrapeSmallHandbell, scrapeAlbertClockBellBelfast, scrapeWoodBlock,

  scrapeFastDahina, scrapeFastBanyan, scrapeFastXylophone, scrapeFastTibetanBowl180, scrapeFastSpinelSphere, scrapeFastPotLid,
  scrapeFastRedCedarWoodPlate, scrapeFastTubularBell, scrapeFastRedwoodPlate, scrapeFastDouglasFirWoodPlate, scrapeFastUniformWoodenBar,
  scrapeFastUniformAluminumBar, scrapeFastVibraphone1, scrapeFastVibraphone2, scrapeFastChalandiPlates, scrapeFastTibetanBowl152,
  scrapeFastTibetanBowl140, scrapeFastWineGlass, scrapeFastSmallHandbell, scrapeFastAlbertClockBellBelfast, scrapeFastWoodBlock,

  scrapePadDahina, scrapePadBanyan, scrapePadXylophone, scrapePadTibetanBowl180, scrapePadSpinelSphere, scrapePadPotLid,
  scrapePadRedCedarWoodPlate, scrapePadTubularBell, scrapePadRedwoodPlate, scrapePadDouglasFirWoodPlate, scrapePadUniformWoodenBar,
  scrapePadUniformAluminumBar, scrapePadVibraphone1, scrapePadVibraphone2, scrapePadChalandiPlates, scrapePadTibetanBowl152,
  scrapePadTibetanBowl140, scrapePadWineGlass, scrapePadSmallHandbell, scrapePadAlbertClockBellBelfast, scrapePadWoodBlock,


  -- ** Scrape monosynth
  -- | 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,

  scrapePadDahinam, scrapePadBanyanm, scrapePadXylophonem, scrapePadTibetanBowl180m, scrapePadSpinelSpherem, scrapePadPotLidm,
  scrapePadRedCedarWoodPlatem, scrapePadTubularBellm, scrapePadRedwoodPlatem, scrapePadDouglasFirWoodPlatem, scrapePadUniformWoodenBarm,
  scrapePadUniformAluminumBarm, scrapePadVibraphone1m, scrapePadVibraphone2m, scrapePadChalandiPlatesm, scrapePadTibetanBowl152m,
  scrapePadTibetanBowl140m, scrapePadWineGlassm, scrapePadSmallHandbellm, scrapePadAlbertClockBellBelfastm, scrapePadWoodBlockm,

  -- * Woodwind

  Wind(..), woodWind',

  fluteSpec, shortFluteSpec,
  flute, shortFlute, fluteVibrato, mutedFlute, brightFlute,

  bassClarinetSpec, shortBassClarinetSpec,
  bassClarinet, shortBassClarinet, bassClarinetVibrato, mutedBassClarinet, brightBassClarinet,

  frenchHornSpec, shortFrenchHornSpec,
  frenchHorn, shortFrenchHorn, frenchHornVibrato, mutedFrenchHorn, brightFrenchHorn,

  shengSpec, shortShengSpec,
  sheng, shortSheng, shengVibrato, mutedSheng, brightSheng,

  hulusiSpec, shortHulusiSpec,
  hulusi, shortHulusi, hulusiVibrato, mutedHulusi, brightHulusi,

  diziSpec, shortDiziSpec,
  dizi, shortDizi, diziVibrato, mutedDizi, brightDizi,

  -- * SHARC instruments
  SharcInstr,
  soloSharc, orcSharc, padSharc, purePadSharc,
  dreamSharc, lightIsTooBrightSharc, whaleSongSharc,
  sharcOrgan,

  -- ** 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,
    shEnglishHorn, shClarinetEflat, shTrumpetMutedC, shTrumpetC, shContrabassClarinet, shContrabassoon, shCello, shCelloPizzicato,
    shCelloMuted, shCelloMarteleBowing, shContrabassPizzicato, shContrabassMuted, shContrabassMarteleBowing, shContrabass,
    shClarinet, shBassTrombone, shBassClarinet, shBassoon, shBassFlute, shTrumpetBach, shAltoTrombone, shAltoFlute,

  -- * X-rays
  pulseWidth, xanadu, alienIsAngry, noiz, blue, black, simpleMarimba, impulseMarimba1, impulseMarimba2, okComputer, noiseBell,

  -- * Robotic vowels
  robotVowels, robotLoopVowels, robotVowel,

   -- ** Vowels
    maleA, maleE, maleIY, maleO, maleOO, maleU, maleER, maleUH,
    femaleA, femaleE, femaleIY, femaleO, femaleOO,

  -- * Nature
  windWall, mildWind, wind, snowCrackle,

  -- * Misc
  limRel,
  singleFx, singleFx'
) where

import Prelude hiding (filter)

import Csound.Base hiding (ampCps, br, seed, filt, detune, mute)
import qualified Csound.Base as C(br, filt)

import qualified Csound.Catalog.Wave as C
import qualified Csound.Catalog.Reson as C

import Csound.Catalog.Wave(maleA, maleE, maleIY, maleO, maleOO, maleU, maleER, maleUH,
    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,
    shCelloMuted, shCelloMarteleBowing, shContrabassPizzicato, shContrabassMuted, shContrabassMarteleBowing, shContrabass,
    shClarinet, shBassTrombone, shBassClarinet, shBassoon, shBassFlute, shTrumpetBach, shAltoTrombone, shAltoFlute)


monoArgToNote :: MonoArg -> (Sig, Sig)
monoArgToNote :: MonoArg -> (Sig, Sig)
monoArgToNote MonoArg
arg = (MonoArg -> Sig
monoAmp MonoArg
arg Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* MonoArg -> Sig
monoGate MonoArg
arg, MonoArg -> Sig
monoCps MonoArg
arg)

monoSig1 :: SigSpace a => (Sig -> a) -> (MonoArg -> a)
monoSig1 :: (Sig -> a) -> MonoArg -> a
monoSig1 Sig -> a
f MonoArg
arg = Sig -> a -> a
forall a. SigSpace a => Sig -> a -> a
mul Sig
env (a -> a) -> a -> a
forall a b. (a -> b) -> a -> b
$ Sig -> a
f Sig
cps
  where
    env :: Sig
env = Sig
amp Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* MonoArg -> MonoAdsr
monoAdsr MonoArg
arg Sig
0.35 Sig
0.5 Sig
1 Sig
0.5
    amp :: Sig
amp = Sig -> D -> Sig
port (MonoArg -> Sig
monoAmp MonoArg
arg) D
0.01
    cps :: Sig
cps = Sig -> Sig -> Sig
portk (MonoArg -> Sig
monoCps MonoArg
arg) (Sig -> Sig
delay1 Sig
gate Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.01)
    gate :: Sig
gate = MonoArg -> Sig
monoGate MonoArg
arg

fx1 :: Sig -> (a -> a) -> Patch a -> Patch a
fx1 :: Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
dw a -> a
f = [GenFxSpec a] -> Patch a -> Patch a
forall a. [GenFxSpec a] -> Patch a -> Patch a
FxChain [Sig -> Fx a -> GenFxSpec a
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
dw (Fx a
forall (m :: * -> *) a. Monad m => a -> m a
return Fx a -> (a -> a) -> Fx a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> a
f)]

fx1' :: Sig -> (a -> SE a) -> Patch a -> Patch a
fx1' :: Sig -> (a -> SE a) -> Patch a -> Patch a
fx1' Sig
dw a -> SE a
f = [GenFxSpec a] -> Patch a -> Patch a
forall a. [GenFxSpec a] -> Patch a -> Patch a
FxChain [Sig -> (a -> SE a) -> GenFxSpec a
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
dw a -> SE a
f]

-- | Creates a simple FX-xhain, that contains a single pure effect.
-- The first argument is the dry/wet-value.
singleFx :: Sig -> (a -> a) -> Patch a -> Patch a
singleFx :: Sig -> (a -> a) -> Patch a -> Patch a
singleFx = Sig -> (a -> a) -> Patch a -> Patch a
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1

singleFxFilter :: Sig -> (ResonFilter -> a -> a) -> Patch a -> Patch a
singleFxFilter :: Sig -> (ResonFilter -> a -> a) -> Patch a -> Patch a
singleFxFilter Sig
dw ResonFilter -> a -> a
f = [GenFxSpec a] -> Patch a -> Patch a
forall a. [GenFxSpec a] -> Patch a -> Patch a
FxChain [Sig -> (ResonFilter -> Fx a) -> GenFxSpec a
forall a. Sig -> (ResonFilter -> Fx a) -> GenFxSpec a
fxSpecFilter Sig
dw (\ResonFilter
filter a
x -> Fx a
forall (m :: * -> *) a. Monad m => a -> m a
return Fx a -> Fx a
forall a b. (a -> b) -> a -> b
$ ResonFilter -> a -> a
f ResonFilter
filter a
x)]

-- | Creates a simple FX-xhain, that contains a single effect.
-- The first argument is the dry/wet-value.
singleFx' :: Sig -> (a -> SE a) -> Patch a -> Patch a
singleFx' :: Sig -> (a -> SE a) -> Patch a -> Patch a
singleFx' = Sig -> (a -> SE a) -> Patch a -> Patch a
forall a. Sig -> (a -> SE a) -> Patch a -> Patch a
fx1'

-- | Limits the release section of the note.
limRel :: SigSpace a => D -> Patch a -> Patch a
limRel :: D -> Patch a -> Patch a
limRel D
rel Patch a
p =  (Instr D a -> Instr D a) -> Patch a -> Patch a
forall a. (Instr D a -> Instr D a) -> Patch a -> Patch a
mapPatchInstr (\Instr D a
instr -> (a -> a) -> SE a -> SE a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sig -> a -> a
forall a. SigSpace a => Sig -> a -> a
mul (D -> Sig
fadeOut D
rel)) (SE a -> SE a) -> Instr D a -> Instr D a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Instr D a
instr) Patch a
p

----------------------------------------------
-- electric pianos

data Epiano1 = Epiano1
  { Epiano1 -> D
epiano1Rel :: D }

instance Default Epiano1 where
  def :: Epiano1
def = D -> Epiano1
Epiano1 D
5

epiano1 :: Patch2
epiano1 = Epiano1 -> Patch2
epiano1' Epiano1
forall a. Default a => a
def

epiano1' :: Epiano1 -> Patch2
epiano1' (Epiano1 D
rel) = Patch2 -> Patch2
withLargeHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ \CsdNote D
a -> Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.4 (SE (Sig, Sig) -> SE (Sig, Sig)) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ D -> Instr D (Sig, Sig)
C.simpleFading D
rel CsdNote D
a

data MutedPiano = MutedPiano
  { MutedPiano -> Sig
mutedPianoMute :: Sig
  , MutedPiano -> D
mutedPianoRel  :: D }

instance Default MutedPiano where
  def :: MutedPiano
def = Sig -> D -> MutedPiano
MutedPiano Sig
0.5 D
7

mutedPiano :: Patch2
mutedPiano = MutedPiano -> Patch2
mutedPiano' MutedPiano
forall a. Default a => a
def

mutedPiano' :: MutedPiano -> Patch2
mutedPiano' (MutedPiano Sig
mute D
rel) = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.25 ((Sig, Sig) -> (Sig, Sig)
largeHall2 ((Sig, Sig) -> (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (ResonFilter
mlp3 (Sig
250 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
7000 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
mute) Sig
0.2)) (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$
  Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ \CsdNote D
a -> Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.7 (SE (Sig, Sig) -> SE (Sig, Sig)) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ D -> Instr D (Sig, Sig)
C.simpleSust D
rel CsdNote D
a

amPiano :: Patch Sig
amPiano = Sig -> (Sig -> Sig) -> Patch Sig -> Patch Sig
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.25 Sig -> Sig
forall a. a -> a
id (Patch Sig -> Patch Sig) -> Patch Sig -> Patch Sig
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> Instr D Sig) -> Patch Sig
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D Sig) -> Patch Sig)
-> (ResonFilter -> Instr D Sig) -> Patch Sig
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter -> Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
1.4 (SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (ResonFilter -> Sig -> SE Sig
C.amPianoBy ResonFilter
filter)

fmPiano :: Patch2
fmPiano = Patch2 -> Patch2
withSmallHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.75 (SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (D -> Sig -> Sig -> Sig
C.fmFlavio D
6 Sig
3)

epianoReleaseTime :: ReleaseTime
epianoReleaseTime :: D
epianoReleaseTime = D
0.25

epiano2 :: Patch2
epiano2 = Sig -> Patch2 -> Patch2
addHammer Sig
0.15 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.25 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$
  (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D (Sig, Sig)) -> Patch2)
-> (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter -> Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
1.125 (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Instr D Sig -> CsdNote D -> SE (CpsInstrOut (Instr D Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (Instr D Sig -> CsdNote D -> SE (CpsInstrOut (Instr D Sig)))
-> Instr D Sig -> CsdNote D -> SE (CpsInstrOut (Instr D Sig))
forall a b. (a -> b) -> a -> b
$ ResonFilter -> D -> [EpianoOsc] -> Instr D Sig
C.epianoBy ResonFilter
filter D
epianoReleaseTime [Int -> Sig -> Sig -> Sig -> EpianoOsc
C.EpianoOsc Int
4 Sig
5 Sig
1 Sig
1, Int -> Sig -> Sig -> Sig -> EpianoOsc
C.EpianoOsc Int
8 Sig
10 Sig
2.01 Sig
1])

epianoHeavy :: Patch2
epianoHeavy = Sig -> Patch2 -> Patch2
addHammer Sig
0.15 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.2 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$
  (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D (Sig, Sig)) -> Patch2)
-> (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter -> Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
1.125 (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Instr D Sig -> CsdNote D -> SE (CpsInstrOut (Instr D Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (Instr D Sig -> CsdNote D -> SE (CpsInstrOut (Instr D Sig)))
-> Instr D Sig -> CsdNote D -> SE (CpsInstrOut (Instr D Sig))
forall a b. (a -> b) -> a -> b
$ ResonFilter -> D -> [EpianoOsc] -> Instr D Sig
C.epianoBy ResonFilter
filter D
epianoReleaseTime [Int -> Sig -> Sig -> Sig -> EpianoOsc
C.EpianoOsc Int
4 Sig
5 Sig
1 Sig
1, Int -> Sig -> Sig -> Sig -> EpianoOsc
C.EpianoOsc Int
8 Sig
10 Sig
2.01 Sig
1, Int -> Sig -> Sig -> Sig -> EpianoOsc
C.EpianoOsc Int
8 Sig
15 Sig
0.5 Sig
0.5])

epianoBright :: Patch2
epianoBright = Sig -> Patch2 -> Patch2
addHammer Sig
0.15 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.2 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$
  (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D (Sig, Sig)) -> Patch2)
-> (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter -> Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
1.12 (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Instr D Sig -> CsdNote D -> SE (CpsInstrOut (Instr D Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (Instr D Sig -> CsdNote D -> SE (CpsInstrOut (Instr D Sig)))
-> Instr D Sig -> CsdNote D -> SE (CpsInstrOut (Instr D Sig))
forall a b. (a -> b) -> a -> b
$ ResonFilter -> D -> [EpianoOsc] -> Instr D Sig
C.epianoBy ResonFilter
filter D
epianoReleaseTime [Int -> Sig -> Sig -> Sig -> EpianoOsc
C.EpianoOsc Int
4 Sig
5 Sig
1 Sig
1, Int -> Sig -> Sig -> Sig -> EpianoOsc
C.EpianoOsc Int
8 Sig
10 Sig
3.01 Sig
1, Int -> Sig -> Sig -> Sig -> EpianoOsc
C.EpianoOsc Int
8 Sig
15 Sig
5 Sig
0.5, Int -> Sig -> Sig -> Sig -> EpianoOsc
C.EpianoOsc Int
8 Sig
4 Sig
7 Sig
0.3])

vibraphonePiano1 :: Patch2
vibraphonePiano1 = Patch2 -> Patch2
vibraphoneToPiano Patch2
smallVibraphone1
vibraphonePiano2 :: Patch2
vibraphonePiano2 = Patch2 -> Patch2
vibraphoneToPiano Patch2
smallVibraphone2

vibraphoneToPiano :: Patch2 -> Patch2
vibraphoneToPiano Patch2
patch = Sig -> Patch2 -> Patch2
addHammer Sig
0.15 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (Instr D (Sig, Sig) -> Instr D (Sig, Sig)) -> Patch2 -> Patch2
forall a. (Instr D a -> Instr D a) -> Patch a -> Patch a
mapPatchInstr (\Instr D (Sig, Sig)
instr -> Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul (Sig
1.5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
fadeOut D
0.25) (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> SE (Sig, Sig) -> AtOut Sig Sig (SE (Sig, Sig))
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (ResonFilter
mlp Sig
6500 Sig
0.1) (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Instr D (Sig, Sig)
instr) Patch2
patch

-- | Adds a hammer strike sound. The first argument is the amount of hammer sound.
addHammer :: Sig -> Patch2 -> Patch2
addHammer :: Sig -> Patch2 -> Patch2
addHammer Sig
amt = Sig -> Patch2 -> Patch2 -> Patch2
forall b.
(SigSpace b, Num b) =>
Sig -> Patch b -> Patch b -> Patch b
mixInstr Sig
amt Patch2
impulseMarimba2

----------------------------------------------
-- organs

cathedralOrgan :: Patch2
cathedralOrgan = Patch2 -> Patch2
withLargeHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.7 (SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps Sig -> SE Sig
C.cathedralOrgan

-- [0, 30]
data HammondOrgan = HammondOrgan
  { HammondOrgan -> Sig
hammondOrganDetune :: Sig }

instance Default HammondOrgan where
  def :: HammondOrgan
def = Sig -> HammondOrgan
HammondOrgan Sig
12

hammondOrgan :: Patch2
hammondOrgan = HammondOrgan -> Patch2
hammondOrgan' HammondOrgan
forall a. Default a => a
def

hammondOrganm :: Patch2
hammondOrganm = HammondOrgan -> Patch2
hammondOrganm' HammondOrgan
forall a. Default a => a
def

hammondOrgan' :: HammondOrgan -> Patch2
hammondOrgan' (HammondOrgan Sig
detune) = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.15 (Sig, Sig) -> (Sig, Sig)
smallRoom2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.4 (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (Sig -> Sig -> SE Sig
C.hammondOrgan Sig
detune)

hammondOrganm' :: HammondOrgan -> Patch2
hammondOrganm' (HammondOrgan Sig
detune) = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.15 (Sig, Sig) -> (Sig, Sig)
smallRoom2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ MonoInstr (Sig, Sig) -> Patch2
forall a. MonoInstr a -> Patch a
monoSynt (MonoInstr (Sig, Sig) -> Patch2) -> MonoInstr (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.4 (SE (Sig, Sig) -> SE (Sig, Sig))
-> MonoInstr (Sig, Sig) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> (MonoArg -> SE Sig) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> MonoArg -> SE Sig
forall a. SigSpace a => (Sig -> a) -> MonoArg -> a
monoSig1 (Sig -> Sig -> SE Sig
C.hammondOrgan Sig
detune)

toneWheelOrgan :: Patch2
toneWheelOrgan = Patch2 -> Patch2
withSmallHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono  (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.6 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
fadeOut D
0.05) (SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D -> Sig) -> CsdNote D -> SE (CpsInstrOut (D -> Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps D -> Sig
C.toneWheel

sawOrgan :: Patch2
sawOrgan  = Sig -> Patch2 -> Patch2
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.45 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> SE Sig) -> Patch2
waveOrgan Sig -> SE Sig
rndSaw
triOrgan :: Patch2
triOrgan  = Sig -> Patch2 -> Patch2
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.5  (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> SE Sig) -> Patch2
waveOrgan Sig -> SE Sig
rndTri
sqrOrgan :: Patch2
sqrOrgan  = Sig -> Patch2 -> Patch2
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.45 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> SE Sig) -> Patch2
waveOrgan Sig -> SE Sig
rndSqr
pwOrgan :: Sig -> Patch2
pwOrgan Sig
k = Sig -> Patch2 -> Patch2
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.45 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> SE Sig) -> Patch2
waveOrgan (Sig -> Sig -> SE Sig
rndPw Sig
k)

sawOrganm :: Patch2
sawOrganm  = Sig -> Patch2 -> Patch2
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.45 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> SE Sig) -> Patch2
waveOrganm Sig -> SE Sig
rndSaw
triOrganm :: Patch2
triOrganm  = Sig -> Patch2 -> Patch2
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.5  (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> SE Sig) -> Patch2
waveOrganm Sig -> SE Sig
rndTri
sqrOrganm :: Patch2
sqrOrganm  = Sig -> Patch2 -> Patch2
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.45 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> SE Sig) -> Patch2
waveOrganm Sig -> SE Sig
rndSqr
pwOrganm :: Sig -> Patch2
pwOrganm Sig
k = Sig -> Patch2 -> Patch2
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.45 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> SE Sig) -> Patch2
waveOrganm (Sig -> Sig -> SE Sig
rndPw Sig
k)

organFx :: Patch2 -> Patch2
organFx :: Patch2 -> Patch2
organFx = Patch2 -> Patch2
withSmallHall (Patch2 -> Patch2) -> (Patch2 -> Patch2) -> Patch2 -> Patch2
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig
-> (ResonFilter -> (Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (ResonFilter -> a -> a) -> Patch a -> Patch a
singleFxFilter Sig
1 (\ResonFilter
filter -> (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig))
-> (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ ResonFilter
filter Sig
3500 Sig
0.1)

waveOrgan :: (Sig -> SE Sig) -> Patch2
waveOrgan :: (Sig -> SE Sig) -> Patch2
waveOrgan Sig -> SE Sig
wave = Patch2 -> Patch2
organFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> SE (Sig, Sig))
-> CsdNote D -> SE (CpsInstrOut (Sig -> SE (Sig, Sig)))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps ((Sig -> SE (Sig, Sig))
 -> CsdNote D -> SE (CpsInstrOut (Sig -> SE (Sig, Sig))))
-> (Sig -> SE (Sig, Sig))
-> CsdNote D
-> SE (CpsInstrOut (Sig -> SE (Sig, Sig)))
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> (Sig -> SE Sig) -> Sig -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> Sig
fades D
0.01 D
0.01) (SE Sig -> SE Sig) -> (Sig -> SE Sig) -> Sig -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig
wave

waveOrganm :: (Sig -> SE Sig) -> Patch2
waveOrganm :: (Sig -> SE Sig) -> Patch2
waveOrganm Sig -> SE Sig
wave = Patch2 -> Patch2
organFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ MonoInstr (Sig, Sig) -> Patch2
forall a. MonoInstr a -> Patch a
monoSynt (MonoInstr (Sig, Sig) -> Patch2) -> MonoInstr (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> SE (Sig, Sig)) -> MonoInstr (Sig, Sig)
forall a. SigSpace a => (Sig -> a) -> MonoArg -> a
monoSig1 ((Sig -> SE (Sig, Sig)) -> MonoInstr (Sig, Sig))
-> (Sig -> SE (Sig, Sig)) -> MonoInstr (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> (Sig -> SE Sig) -> Sig -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> Sig
fades D
0.01 D
0.01) (SE Sig -> SE Sig) -> (Sig -> SE Sig) -> Sig -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig
wave

waveOrganWithKey :: (D -> Sig -> SE Sig) -> Patch2
waveOrganWithKey :: (D -> Sig -> SE Sig) -> Patch2
waveOrganWithKey D -> Sig -> SE Sig
wave = Patch2 -> Patch2
organFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (D -> SE (Sig, Sig))
-> CsdNote D -> SE (CpsInstrOut (D -> SE (Sig, Sig)))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps ((D -> SE (Sig, Sig))
 -> CsdNote D -> SE (CpsInstrOut (D -> SE (Sig, Sig))))
-> (D -> SE (Sig, Sig))
-> CsdNote D
-> SE (CpsInstrOut (D -> SE (Sig, Sig)))
forall a b. (a -> b) -> a -> b
$ \D
cps -> ((Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> (Sig -> SE Sig) -> Sig -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> Sig
fades D
0.01 D
0.01) (SE Sig -> SE Sig) -> (Sig -> SE Sig) -> Sig -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> Sig -> SE Sig
wave D
cps) (D -> Sig
sig D
cps)

----------------------------------------------
-- accordeons

accordeon :: Patch2
accordeon = Accordeon -> Patch2
accordeon' Accordeon
forall a. Default a => a
def

accordeonBright1 :: Patch2
accordeonBright1 = Accordeon -> Patch2
accordeon' (Sig -> Sig -> Sig -> Sig -> Accordeon
C.Accordeon Sig
1 Sig
5 Sig
3 Sig
7)
accordeonBright2 :: Patch2
accordeonBright2 = Accordeon -> Patch2
accordeon' (Sig -> Sig -> Sig -> Sig -> Accordeon
C.Accordeon Sig
1 Sig
6 Sig
3 Sig
13)

accordeonHeavy :: Patch2
accordeonHeavy = Accordeon -> Patch2
accordeon' (Sig -> Sig -> Sig -> Sig -> Accordeon
C.Accordeon Sig
1 Sig
0.501 Sig
2 Sig
1.005)
brokenAccordeon :: Patch2
brokenAccordeon = Accordeon -> Patch2
accordeon' (Sig -> Sig -> Sig -> Sig -> Accordeon
C.Accordeon Sig
1 Sig
1.07 Sig
2.02 Sig
0.5)

accordeon' :: Accordeon -> Patch2
accordeon' Accordeon
spec = Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> SE a) -> Patch a -> Patch a
fx1' Sig
0.25 (Sig, Sig) -> SE (Sig, Sig)
C.accordeonFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.63 (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE (Sig, Sig))
-> CsdNote D -> SE (CpsInstrOut (Sig -> SE (Sig, Sig)))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (Accordeon -> Sig -> SE (Sig, Sig)
C.accordeon Accordeon
spec)

----------------------------------------------
-- choir

data Choir = Choir { Choir -> Sig
choirVibr :: Sig }

instance Default Choir where
  def :: Choir
def  = Sig -> Choir
Choir Sig
7

tenor' :: (Sig -> Sig) -> Choir -> Patch2
tenor'   Sig -> Sig
filt (Choir Sig
vib) = Patch2 -> Patch2
withSmallHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.15 (SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps ((Sig -> Sig) -> Sig -> Sig -> SE Sig
C.tenorOsc Sig -> Sig
filt Sig
vib)
soprano' :: (Sig -> Sig) -> Choir -> Patch2
soprano' Sig -> Sig
filt (Choir Sig
vib) = Patch2 -> Patch2
withSmallHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.15 (SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps ((Sig -> Sig) -> Sig -> Sig -> SE Sig
C.sopranoOsc Sig -> Sig
filt Sig
vib)

choir' :: (Sig -> Sig) -> Choir -> Patch2
choir' Sig -> Sig
filt Choir
vib = Patch2 -> Patch2
withSmallHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Patch2 -> D -> Patch2 -> Patch2
forall a. Patch a -> D -> Patch a -> Patch a
SplitPatch (Patch2 -> Patch2
forall a. Patch a -> Patch a
dryPatch (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> Sig) -> Choir -> Patch2
tenor' Sig -> Sig
filt Choir
vib) D
220 (Patch2 -> Patch2
forall a. Patch a -> Patch a
dryPatch (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> Sig) -> Choir -> Patch2
soprano' Sig -> Sig
filt Choir
vib)

choirA :: Patch2
choirA = Choir -> Patch2
choirA' Choir
forall a. Default a => a
def
choirO :: Patch2
choirO = Choir -> Patch2
choirO' Choir
forall a. Default a => a
def
choirE :: Patch2
choirE = Choir -> Patch2
choirE' Choir
forall a. Default a => a
def
choirU :: Patch2
choirU = Choir -> Patch2
choirU' Choir
forall a. Default a => a
def

choirA' :: Choir -> Patch2
choirA' = (Sig -> Sig) -> Choir -> Patch2
choir' Sig -> Sig
singA
choirO' :: Choir -> Patch2
choirO' = (Sig -> Sig) -> Choir -> Patch2
choir' Sig -> Sig
singO
choirE' :: Choir -> Patch2
choirE' = (Sig -> Sig) -> Choir -> Patch2
choir' Sig -> Sig
singE
choirU' :: Choir -> Patch2
choirU' = (Sig -> Sig) -> Choir -> Patch2
choir' Sig -> Sig
singU

data NoisyChoir = NoisyChoir
  { NoisyChoir -> Int
noisyChoirFilterNum :: Int
  , NoisyChoir -> Sig
noisyChoirBw        :: Sig
  }

instance Default NoisyChoir where
  def :: NoisyChoir
def = Int -> Sig -> NoisyChoir
NoisyChoir Int
2 Sig
25

windSings :: Patch2
windSings = NoisyChoir -> Patch2
longNoisyChoir' (Int -> Sig -> NoisyChoir
NoisyChoir Int
1 Sig
15)

longNoisyChoir :: Patch2
longNoisyChoir = NoisyChoir -> Patch2
longNoisyChoir' NoisyChoir
forall a. Default a => a
def
noisyChoir :: Patch2
noisyChoir = NoisyChoir -> Patch2
noisyChoir' NoisyChoir
forall a. Default a => a
def


dryNoisyChoir :: NoisyChoir -> Patch2
dryNoisyChoir (NoisyChoir Int
n Sig
bw) = Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.45 (SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (Int -> Sig -> Sig -> SE Sig
C.noisyChoir Int
n Sig
bw)

longNoisyChoir' :: NoisyChoir -> Patch2
longNoisyChoir' NoisyChoir
ch = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.15 (Sig, Sig) -> (Sig, Sig)
magicCave2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ NoisyChoir -> Patch2
dryNoisyChoir NoisyChoir
ch

noisyChoir' :: NoisyChoir -> Patch2
noisyChoir' NoisyChoir
ch = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.15 (Sig, Sig) -> (Sig, Sig)
largeHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ NoisyChoir -> Patch2
dryNoisyChoir NoisyChoir
ch

-- modes (wth delay or not delay)
--
--  dac $ mixAt 0.15 largeHall2 $ mixAt 0.2 (echo 0.25 0.45) $ at fromMono $ midi $ onMsg $ onCps (mul (fadeOut 2) . C.tibetanBowl152    )

----------------------------------------------
-- pads

pwPad :: Patch2
pwPad  = Patch2 -> Patch2
withSmallHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D (Sig, Sig)) -> Patch2)
-> (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter -> Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.6 (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (ResonFilter -> Sig -> SE Sig
C.pwPadBy ResonFilter
filter)
pwPadm :: Patch2
pwPadm = Patch2 -> Patch2
withSmallHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> MonoInstr a) -> Patch a
monoSyntFilter ((ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2)
-> (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter -> Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.6 (SE (Sig, Sig) -> SE (Sig, Sig))
-> MonoInstr (Sig, Sig) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> (MonoArg -> SE Sig) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> MonoArg -> SE Sig
forall a. SigSpace a => (Sig -> a) -> MonoArg -> a
monoSig1 (ResonFilter -> Sig -> SE Sig
C.pwPadBy ResonFilter
filter)

triPad :: Patch2
triPad  = Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> SE a) -> Patch a -> Patch a
fx1' Sig
0.25 (Sig, Sig) -> SE (Sig, Sig)
C.triPadFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D (Sig, Sig)) -> Patch2)
-> (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter -> (Sig -> (Sig, Sig)) -> SE Sig -> SE (Sig, Sig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.7 (SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (ResonFilter -> Sig -> SE Sig
C.triPadBy ResonFilter
filter)
triPadm :: Patch2
triPadm = Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> SE a) -> Patch a -> Patch a
fx1' Sig
0.25 (Sig, Sig) -> SE (Sig, Sig)
C.triPadFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> MonoInstr a) -> Patch a
monoSyntFilter ((ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2)
-> (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter -> (Sig -> (Sig, Sig)) -> SE Sig -> SE (Sig, Sig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> (MonoArg -> SE Sig) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.7 (SE Sig -> SE Sig) -> (MonoArg -> SE Sig) -> MonoArg -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> MonoArg -> SE Sig
forall a. SigSpace a => (Sig -> a) -> MonoArg -> a
monoSig1 (ResonFilter -> Sig -> SE Sig
C.triPadBy ResonFilter
filter)

nightPad :: Patch2
nightPad  = Patch2 -> Patch2
withLargeHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.48 (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> Sig
fadeOut D
1) (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> Sig -> Sig
C.nightPad D
0.5)
nightPadm :: Patch2
nightPadm = Patch2 -> Patch2
withLargeHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ MonoInstr (Sig, Sig) -> Patch2
forall a. MonoInstr a -> Patch a
monoSynt (MonoInstr (Sig, Sig) -> Patch2) -> MonoInstr (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.48 (SE (Sig, Sig) -> SE (Sig, Sig))
-> MonoInstr (Sig, Sig) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> (MonoArg -> (Sig, Sig)) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> (Sig, Sig)
fromMono (Sig -> (Sig, Sig)) -> (MonoArg -> Sig) -> MonoArg -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> MonoArg -> Sig
forall a. SigSpace a => (Sig -> a) -> MonoArg -> a
monoSig1 ((D -> Sig
fadeOut D
1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* ) (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> Sig -> Sig
C.nightPad D
0.5)

overtoneFx :: Patch2 -> Patch2
overtoneFx     Patch2
p = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.35 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Sig
-> (ResonFilter -> (Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (ResonFilter -> a -> a) -> Patch a -> Patch a
singleFxFilter Sig
0.25 (\ResonFilter
filter -> (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (ResonFilter
filter Sig
1500 Sig
0.1)) Patch2
p
caveOvertoneFx :: Patch2 -> Patch2
caveOvertoneFx Patch2
p = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.2  (Sig, Sig) -> (Sig, Sig)
magicCave2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Sig
-> (ResonFilter -> (Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (ResonFilter -> a -> a) -> Patch a -> Patch a
singleFxFilter Sig
0.25 (\ResonFilter
filter -> (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (ResonFilter
filter Sig
1500 Sig
0.1)) (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Sig -> Patch2 -> Patch2
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.8 Patch2
p

overtonePad :: Patch2
overtonePad  = Patch2 -> Patch2
overtoneFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.65 (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (\Sig
cps -> Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> Sig
fades D
0.25 D
1.2) (Int -> Sig -> Sig -> Sig
C.tibetan Int
11 Sig
0.012 Sig
cps) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> Sig
fades D
0.25 D
1) (Int -> Sig -> Sig -> Sig
C.tibetan Int
13 Sig
0.015 (Sig
cps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.5)))
overtonePadm :: Patch2
overtonePadm = Patch2 -> Patch2
overtoneFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ MonoInstr (Sig, Sig) -> Patch2
forall a. MonoInstr a -> Patch a
monoSynt (MonoInstr (Sig, Sig) -> Patch2) -> MonoInstr (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$  Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.65 (SE (Sig, Sig) -> SE (Sig, Sig))
-> MonoInstr (Sig, Sig) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> (MonoArg -> (Sig, Sig)) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> (Sig, Sig)
fromMono (Sig -> (Sig, Sig)) -> (MonoArg -> Sig) -> MonoArg -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> MonoArg -> Sig
forall a. SigSpace a => (Sig -> a) -> MonoArg -> a
monoSig1 (\Sig
cps -> Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> Sig
fades D
0.25 D
1.2) (Int -> Sig -> Sig -> Sig
C.tibetan Int
11 Sig
0.012 Sig
cps) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> Sig
fades D
0.25 D
1) (Int -> Sig -> Sig -> Sig
C.tibetan Int
13 Sig
0.015 (Sig
cps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.5)))

caveOvertonePad :: Patch2
caveOvertonePad =  Patch2 -> Patch2
caveOvertoneFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Patch2 -> Patch2
forall a. Patch a -> Patch a
dryPatch Patch2
overtonePad
caveOvertonePadm :: Patch2
caveOvertonePadm = Patch2 -> Patch2
caveOvertoneFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Patch2 -> Patch2
forall a. Patch a -> Patch a
dryPatch Patch2
overtonePadm

chorusel :: Patch2
chorusel  = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.35 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D (Sig, Sig)) -> Patch2)
-> (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter CsdNote D
note -> (Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.9 (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> SE (Sig, Sig) -> AtOut Sig Sig (SE (Sig, Sig))
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (ResonFilter
filter (Sig
3500 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
2000 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
uosc Sig
0.1) Sig
0.1) (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig))
-> CsdNote D -> SE (CpsInstrOut (Sig -> (Sig, Sig)))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (Sig -> (Sig, Sig) -> (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> Sig
fades D
0.65 D
1) ((Sig, Sig) -> (Sig, Sig))
-> (Sig -> (Sig, Sig)) -> Sig -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> D -> D -> Sig -> (Sig, Sig)
C.chorusel D
13 D
0.5 D
10)) CsdNote D
note
choruselm :: Patch2
choruselm = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.35 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> MonoInstr a) -> Patch a
monoSyntFilter ((ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2)
-> (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter MonoArg
note -> (Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.9 (SE (Sig, Sig) -> SE (Sig, Sig))
-> MonoInstr (Sig, Sig) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> (MonoArg -> (Sig, Sig)) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (ResonFilter
filter (Sig
3500 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
2000 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
uosc Sig
0.1) Sig
0.1) ((Sig, Sig) -> (Sig, Sig))
-> (MonoArg -> (Sig, Sig)) -> MonoArg -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> MonoArg -> (Sig, Sig)
forall a. SigSpace a => (Sig -> a) -> MonoArg -> a
monoSig1 (Sig -> (Sig, Sig) -> (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> Sig
fades D
0.65 D
1) ((Sig, Sig) -> (Sig, Sig))
-> (Sig -> (Sig, Sig)) -> Sig -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> D -> D -> Sig -> (Sig, Sig)
C.chorusel D
13 D
0.5 D
10)) MonoArg
note

pwEnsemble :: Patch2
pwEnsemble = Patch2 -> Patch2
withSmallHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D (Sig, Sig)) -> Patch2)
-> (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter -> (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.55 (SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (ResonFilter -> Sig -> SE Sig
C.pwEnsembleBy ResonFilter
filter)
pwEnsemblem :: Patch2
pwEnsemblem = Patch2 -> Patch2
withSmallHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> MonoInstr a) -> Patch a
monoSyntFilter ((ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2)
-> (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter -> (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> (MonoArg -> SE Sig) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.55 (SE Sig -> SE Sig) -> (MonoArg -> SE Sig) -> MonoArg -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> MonoArg -> SE Sig
forall a. SigSpace a => (Sig -> a) -> MonoArg -> a
monoSig1 (ResonFilter -> Sig -> SE Sig
C.pwEnsembleBy ResonFilter
filter)

fmDroneSlow :: Patch2
fmDroneSlow = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.35 (Sig, Sig) -> (Sig, Sig)
largeHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig))
-> SE (Sig, Sig) -> AtOut Sig (Sig, Sig) (SE (Sig, Sig))
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.5 (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig))
-> CsdNote D -> SE (CpsInstrOut (Sig -> (Sig, Sig)))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (Sig -> CsdNote D -> Sig -> (Sig, Sig)
C.fmDrone Sig
3 (D
10, D
5))
fmDroneSlowm :: Patch2
fmDroneSlowm = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.35 (Sig, Sig) -> (Sig, Sig)
largeHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ MonoInstr (Sig, Sig) -> Patch2
forall a. MonoInstr a -> Patch a
monoSynt (MonoInstr (Sig, Sig) -> Patch2) -> MonoInstr (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> (MonoArg -> (Sig, Sig)) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig))
-> (Sig, Sig) -> AtOut Sig (Sig, Sig) (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono ((Sig, Sig) -> (Sig, Sig))
-> (MonoArg -> (Sig, Sig)) -> MonoArg -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> (Sig, Sig) -> (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.5 ((Sig, Sig) -> (Sig, Sig))
-> (MonoArg -> (Sig, Sig)) -> MonoArg -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> MonoArg -> (Sig, Sig)
forall a. SigSpace a => (Sig -> a) -> MonoArg -> a
monoSig1 (Sig -> CsdNote D -> Sig -> (Sig, Sig)
C.fmDrone Sig
3 (D
10, D
5))

fmDroneMedium :: Patch2
fmDroneMedium = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.35 (Sig, Sig) -> (Sig, Sig)
largeHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig))
-> SE (Sig, Sig) -> AtOut Sig (Sig, Sig) (SE (Sig, Sig))
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.5 (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig))
-> CsdNote D -> SE (CpsInstrOut (Sig -> (Sig, Sig)))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (Sig -> CsdNote D -> Sig -> (Sig, Sig)
C.fmDrone Sig
3 (D
5, D
3))
fmDroneMediumm :: Patch2
fmDroneMediumm = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.35 (Sig, Sig) -> (Sig, Sig)
largeHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ MonoInstr (Sig, Sig) -> Patch2
forall a. MonoInstr a -> Patch a
monoSynt (MonoInstr (Sig, Sig) -> Patch2) -> MonoInstr (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> (MonoArg -> (Sig, Sig)) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig))
-> (Sig, Sig) -> AtOut Sig (Sig, Sig) (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono ((Sig, Sig) -> (Sig, Sig))
-> (MonoArg -> (Sig, Sig)) -> MonoArg -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> (Sig, Sig) -> (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.5 ((Sig, Sig) -> (Sig, Sig))
-> (MonoArg -> (Sig, Sig)) -> MonoArg -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> MonoArg -> (Sig, Sig)
forall a. SigSpace a => (Sig -> a) -> MonoArg -> a
monoSig1 (Sig -> CsdNote D -> Sig -> (Sig, Sig)
C.fmDrone Sig
3 (D
5, D
3))

fmDroneFast :: Patch2
fmDroneFast = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.25 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig))
-> SE (Sig, Sig) -> AtOut Sig (Sig, Sig) (SE (Sig, Sig))
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.5 (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig))
-> CsdNote D -> SE (CpsInstrOut (Sig -> (Sig, Sig)))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (Sig -> CsdNote D -> Sig -> (Sig, Sig)
C.fmDrone Sig
3 (D
0.5, D
1))
fmDroneFastm :: Patch2
fmDroneFastm = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.25 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ MonoInstr (Sig, Sig) -> Patch2
forall a. MonoInstr a -> Patch a
monoSynt (MonoInstr (Sig, Sig) -> Patch2) -> MonoInstr (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> (MonoArg -> (Sig, Sig)) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig))
-> (Sig, Sig) -> AtOut Sig (Sig, Sig) (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono ((Sig, Sig) -> (Sig, Sig))
-> (MonoArg -> (Sig, Sig)) -> MonoArg -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> (Sig, Sig) -> (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.5 ((Sig, Sig) -> (Sig, Sig))
-> (MonoArg -> (Sig, Sig)) -> MonoArg -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> MonoArg -> (Sig, Sig)
forall a. SigSpace a => (Sig -> a) -> MonoArg -> a
monoSig1 (Sig -> CsdNote D -> Sig -> (Sig, Sig)
C.fmDrone Sig
3 (D
0.5, D
1))

vibrophonePad :: Patch2
vibrophonePad = Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> SE a) -> Patch a -> Patch a
addPreFx Sig
1 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig))
-> (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ ResonFilter
mlp Sig
2500 Sig
0.1)) (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (Instr D (Sig, Sig) -> Instr D (Sig, Sig)) -> Patch2 -> Patch2
forall a. (Instr D a -> Instr D a) -> Patch a -> Patch a
mapPatchInstr (\Instr D (Sig, Sig)
instr -> Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul (Sig
1.5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.5 D
0.25) (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Instr D (Sig, Sig)
instr) Patch2
largeVibraphone1

data RazorPad = RazorPad { RazorPad -> Sig
razorPadSpeed :: Sig }

instance Default RazorPad where
  def :: RazorPad
def = Sig -> RazorPad
RazorPad Sig
0.5

razorPadSlow :: Patch2
razorPadSlow = RazorPad -> Patch2
razorPad' (RazorPad
forall a. Default a => a
def { razorPadSpeed :: Sig
razorPadSpeed = Sig
0.1 })
razorPadFast :: Patch2
razorPadFast = RazorPad -> Patch2
razorPad' (RazorPad
forall a. Default a => a
def { razorPadSpeed :: Sig
razorPadSpeed = Sig
1.7 })
razorPadTremolo :: Patch2
razorPadTremolo = RazorPad -> Patch2
razorPad' (RazorPad
forall a. Default a => a
def { razorPadSpeed :: Sig
razorPadSpeed = Sig
6.7 })

razorPadSlowm :: Patch2
razorPadSlowm = RazorPad -> Patch2
razorPadm' (RazorPad
forall a. Default a => a
def { razorPadSpeed :: Sig
razorPadSpeed = Sig
0.1 })
razorPadFastm :: Patch2
razorPadFastm = RazorPad -> Patch2
razorPadm' (RazorPad
forall a. Default a => a
def { razorPadSpeed :: Sig
razorPadSpeed = Sig
1.7 })
razorPadTremolom :: Patch2
razorPadTremolom = RazorPad -> Patch2
razorPadm' (RazorPad
forall a. Default a => a
def { razorPadSpeed :: Sig
razorPadSpeed = Sig
6.7 })

razorPad :: Patch2
razorPad = RazorPad -> Patch2
razorPad' RazorPad
forall a. Default a => a
def

razorPadm :: Patch2
razorPadm = RazorPad -> Patch2
razorPadm' RazorPad
forall a. Default a => a
def

razorPad' :: RazorPad -> Patch2
razorPad'  (RazorPad Sig
speed) = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.35 (Sig, Sig) -> (Sig, Sig)
largeHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D (Sig, Sig)) -> Patch2)
-> (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter -> (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.6 (SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Sig, Sig) -> SE Sig)
-> CsdNote D -> SE (CpsInstrOut ((Sig, Sig) -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps ((Sig -> Sig -> SE Sig) -> (Sig, Sig) -> SE Sig
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry ((Sig -> Sig -> SE Sig) -> (Sig, Sig) -> SE Sig)
-> (Sig -> Sig -> SE Sig) -> (Sig, Sig) -> SE Sig
forall a b. (a -> b) -> a -> b
$ ResonFilter -> Sig -> Sig -> Sig -> SE Sig
forall b t.
(Fractional (SE b), SigSpace (SE b), Fractional t) =>
(Sig -> t -> Sig -> b) -> Sig -> Sig -> Sig -> SE b
C.razorPad ResonFilter
filter Sig
speed)
razorPadm' :: RazorPad -> Patch2
razorPadm' (RazorPad Sig
speed) = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.35 (Sig, Sig) -> (Sig, Sig)
largeHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> MonoInstr a) -> Patch a
monoSyntFilter ((ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2)
-> (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter MonoArg
arg -> ((Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> ((Sig, Sig) -> SE Sig) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.6 (SE Sig -> SE Sig)
-> ((Sig, Sig) -> SE Sig) -> (Sig, Sig) -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Sig -> Sig -> SE Sig) -> (Sig, Sig) -> SE Sig
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry ((Sig -> Sig -> SE Sig) -> (Sig, Sig) -> SE Sig)
-> (Sig -> Sig -> SE Sig) -> (Sig, Sig) -> SE Sig
forall a b. (a -> b) -> a -> b
$ ResonFilter -> Sig -> Sig -> Sig -> SE Sig
forall b t.
(Fractional (SE b), SigSpace (SE b), Fractional t) =>
(Sig -> t -> Sig -> b) -> Sig -> Sig -> Sig -> SE b
C.razorPad ResonFilter
filter Sig
speed)) (MonoArg -> (Sig, Sig)
monoArgToNote MonoArg
arg)

dreamPadFx :: Patch2 -> Patch2
dreamPadFx = [GenFxSpec (Sig, Sig)] -> Patch2 -> Patch2
forall a. [GenFxSpec a] -> Patch a -> Patch a
FxChain [Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
0.35 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> (Sig, Sig)
largeHall2), Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
0.25 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig))
-> (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ D -> Sig -> Sig -> Sig
echo D
0.25 Sig
0.65)), Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
0.25 ((Sig -> SE Sig) -> (Sig, Sig) -> AtOut Sig (SE Sig) (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at ((Sig -> SE Sig) -> (Sig, Sig) -> AtOut Sig (SE Sig) (Sig, Sig))
-> (Sig -> SE Sig) -> (Sig, Sig) -> AtOut Sig (SE Sig) (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig -> SE Sig
chorus Sig
0.07 Sig
1.25 Sig
1)]

dreamPad :: Patch2
dreamPad = Sig -> Patch2
dreamPad' Sig
0.35
underwaterPad :: Patch2
underwaterPad = Sig -> Patch2
underwaterPad' Sig
0.35
lightIsTooBrightPad :: Patch2
lightIsTooBrightPad = Sig -> Patch2
lightIsTooBrightPad' Sig
0.55
whaleSongPad :: Patch2
whaleSongPad = Sig -> Patch2
whaleSongPad' Sig
0.35

dreamPadm :: Patch2
dreamPadm = Sig -> Patch2
dreamPadm' Sig
0.35
underwaterPadm :: Patch2
underwaterPadm = Sig -> Patch2
underwaterPadm' Sig
0.35
lightIsTooBrightPadm :: Patch2
lightIsTooBrightPadm = Sig -> Patch2
lightIsTooBrightPadm' Sig
0.55
whaleSongPadm :: Patch2
whaleSongPadm = Sig -> Patch2
whaleSongPadm' Sig
0.35

dreamPadBym :: (Sig -> SE Sig) -> Patch2
dreamPadBym = Sig -> (Sig -> SE Sig) -> Patch2
dreamPadBym' Sig
0.35

-- | The first argument is brightness (0 to 1)
dreamPad' :: Sig -> Patch2
dreamPad' :: Sig -> Patch2
dreamPad' Sig
bright = Patch2 -> Patch2
dreamPadFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D (Sig, Sig)) -> Patch2)
-> (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter CsdNote D
note -> ((Sig -> (Sig, Sig)) -> SE Sig -> SE (Sig, Sig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (ResonFilter -> Sig -> Sig -> SE Sig
C.dreamPad ResonFilter
filter Sig
bright)) CsdNote D
note

-- | The first argument is brightness. The second argument is a wave shape function.
dreamPadBy :: Sig -> Wave -> Patch2
dreamPadBy :: Sig -> (Sig -> SE Sig) -> Patch2
dreamPadBy Sig
brightness Sig -> SE Sig
wave = Patch2 -> Patch2
dreamPadFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D (Sig, Sig)) -> Patch2)
-> (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter CsdNote D
note ->  ((Sig -> (Sig, Sig)) -> SE Sig -> SE (Sig, Sig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (ResonFilter -> (Sig -> SE Sig) -> Sig -> Sig -> SE Sig
C.dreamPadBy ResonFilter
filter Sig -> SE Sig
wave Sig
brightness)) CsdNote D
note

genDreamPadNote :: (ResonFilter -> Wave -> Sig -> Sig -> SE Sig) -> (D -> Wave) -> Sig -> ResonFilter -> Instr D Sig2
genDreamPadNote :: (ResonFilter -> (Sig -> SE Sig) -> Sig -> Sig -> SE Sig)
-> (D -> Sig -> SE Sig) -> Sig -> ResonFilter -> Instr D (Sig, Sig)
genDreamPadNote ResonFilter -> (Sig -> SE Sig) -> Sig -> Sig -> SE Sig
f D -> Sig -> SE Sig
wave Sig
brightness ResonFilter
filter = (Sig -> (Sig, Sig)) -> SE Sig -> SE (Sig, Sig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (D -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (\D
cps -> ResonFilter -> (Sig -> SE Sig) -> Sig -> Sig -> SE Sig
f ResonFilter
filter (D -> Sig -> SE Sig
wave D
cps) Sig
brightness (D -> Sig
sig D
cps))

-- genDreamPadNoteWithKey :: (ResonFilter -> (D -> Wave) -> Sig -> Sig -> SE Sig) -> Wave -> Sig -> ResonFilter -> Instr D Sig2
-- genDreamPadNoteWithKey f wave brightness filter = fmap fromMono . onCps (\cps -> f filter (wave cps) brightness (sig cps))

dreamPadWithKey :: Sig -> (D -> Sig -> SE Sig) -> Patch2
dreamPadWithKey :: Sig -> (D -> Sig -> SE Sig) -> Patch2
dreamPadWithKey Sig
brightness D -> Sig -> SE Sig
wave = Patch2 -> Patch2
dreamPadFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D (Sig, Sig)) -> Patch2)
-> (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> (Sig -> SE Sig) -> Sig -> Sig -> SE Sig)
-> (D -> Sig -> SE Sig) -> Sig -> ResonFilter -> Instr D (Sig, Sig)
genDreamPadNote ResonFilter -> (Sig -> SE Sig) -> Sig -> Sig -> SE Sig
C.dreamPadBy D -> Sig -> SE Sig
wave Sig
brightness

-- | The first argument is brightness (0 to 1)
dreamPadm' :: Sig -> Patch2
dreamPadm' :: Sig -> Patch2
dreamPadm' Sig
bright = Patch2 -> Patch2
dreamPadFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> MonoInstr a) -> Patch a
monoSyntFilter ((ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2)
-> (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter -> (Sig -> (Sig, Sig)) -> SE Sig -> SE (Sig, Sig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> (MonoArg -> SE Sig) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> MonoArg -> SE Sig
forall a. SigSpace a => (Sig -> a) -> MonoArg -> a
monoSig1 (ResonFilter -> Sig -> Sig -> SE Sig
C.dreamPad ResonFilter
filter Sig
bright)

-- | The first argument is brightness (0 to 1). The second argument is a wave function.
dreamPadBym' :: Sig -> (Sig -> SE Sig) -> Patch2
dreamPadBym' :: Sig -> (Sig -> SE Sig) -> Patch2
dreamPadBym' Sig
bright Sig -> SE Sig
wave = Patch2 -> Patch2
dreamPadFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> MonoInstr a) -> Patch a
monoSyntFilter ((ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2)
-> (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter -> (Sig -> (Sig, Sig)) -> SE Sig -> SE (Sig, Sig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> (MonoArg -> SE Sig) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> MonoArg -> SE Sig
forall a. SigSpace a => (Sig -> a) -> MonoArg -> a
monoSig1 (ResonFilter -> (Sig -> SE Sig) -> Sig -> Sig -> SE Sig
C.dreamPadBy ResonFilter
filter Sig -> SE Sig
wave Sig
bright)

-- | The first argument is brightness (0 to 1)
underwaterPad' :: Sig -> Patch2
underwaterPad' :: Sig -> Patch2
underwaterPad' Sig
bright = Patch2 -> Patch2
dreamPadFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D (Sig, Sig)) -> Patch2)
-> (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter ->  (Sig -> (Sig, Sig)) -> SE Sig -> SE (Sig, Sig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (ResonFilter -> Sig -> Sig -> SE Sig
C.underwaterPad ResonFilter
filter Sig
bright)

-- | The first argument is brightness (0 to 1)
underwaterPadm' :: Sig -> Patch2
underwaterPadm' :: Sig -> Patch2
underwaterPadm' Sig
bright = Patch2 -> Patch2
dreamPadFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> MonoInstr a) -> Patch a
monoSyntFilter ((ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2)
-> (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter -> (Sig -> (Sig, Sig)) -> SE Sig -> SE (Sig, Sig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> (MonoArg -> SE Sig) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> MonoArg -> SE Sig
forall a. SigSpace a => (Sig -> a) -> MonoArg -> a
monoSig1 (ResonFilter -> Sig -> Sig -> SE Sig
C.underwaterPad ResonFilter
filter Sig
bright)

-- | The first argument is brightness (0 to 1)
lightIsTooBrightPad' :: Sig -> Patch2
lightIsTooBrightPad' :: Sig -> Patch2
lightIsTooBrightPad' Sig
bright = Patch2 -> Patch2
dreamPadFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D (Sig, Sig)) -> Patch2)
-> (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter ->  (Sig -> (Sig, Sig)) -> SE Sig -> SE (Sig, Sig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (ResonFilter -> Sig -> Sig -> SE Sig
C.lightIsTooBrightPad ResonFilter
filter Sig
bright)

lightIsTooBrightPadm' :: Sig -> Patch2
lightIsTooBrightPadm' :: Sig -> Patch2
lightIsTooBrightPadm' Sig
bright = Patch2 -> Patch2
dreamPadFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> MonoInstr a) -> Patch a
monoSyntFilter ((ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2)
-> (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter -> (Sig -> (Sig, Sig)) -> SE Sig -> SE (Sig, Sig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> (MonoArg -> SE Sig) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> MonoArg -> SE Sig
forall a. SigSpace a => (Sig -> a) -> MonoArg -> a
monoSig1 (ResonFilter -> Sig -> Sig -> SE Sig
C.lightIsTooBrightPad ResonFilter
filter Sig
bright)

lightIsTooBrightPadWithKey :: Sig -> (D -> Sig -> SE Sig) -> Patch2
lightIsTooBrightPadWithKey :: Sig -> (D -> Sig -> SE Sig) -> Patch2
lightIsTooBrightPadWithKey Sig
brightness D -> Sig -> SE Sig
wave = Patch2 -> Patch2
dreamPadFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D (Sig, Sig)) -> Patch2)
-> (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> (Sig -> SE Sig) -> Sig -> Sig -> SE Sig)
-> (D -> Sig -> SE Sig) -> Sig -> ResonFilter -> Instr D (Sig, Sig)
genDreamPadNote ResonFilter -> (Sig -> SE Sig) -> Sig -> Sig -> SE Sig
C.lightIsTooBrightPadBy D -> Sig -> SE Sig
wave Sig
brightness

-- | The first argument is brightness (0 to 1)
whaleSongPad' :: Sig -> Patch2
whaleSongPad' :: Sig -> Patch2
whaleSongPad' Sig
bright = Patch2 -> Patch2
dreamPadFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D (Sig, Sig)) -> Patch2)
-> (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter -> (Sig -> (Sig, Sig)) -> SE Sig -> SE (Sig, Sig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (ResonFilter -> Sig -> Sig -> SE Sig
C.whaleSongPad ResonFilter
filter Sig
bright)

whaleSongPadm' :: Sig -> Patch2
whaleSongPadm' :: Sig -> Patch2
whaleSongPadm' Sig
bright = Patch2 -> Patch2
dreamPadFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> MonoInstr a) -> Patch a
monoSyntFilter ((ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2)
-> (ResonFilter -> MonoInstr (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter -> (Sig -> (Sig, Sig)) -> SE Sig -> SE (Sig, Sig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> (MonoArg -> SE Sig) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> MonoArg -> SE Sig
forall a. SigSpace a => (Sig -> a) -> MonoArg -> a
monoSig1 (ResonFilter -> Sig -> Sig -> SE Sig
C.whaleSongPad ResonFilter
filter Sig
bright)

whaleSongPadWithKey :: Sig -> (D -> Sig -> SE Sig) -> Patch2
whaleSongPadWithKey :: Sig -> (D -> Sig -> SE Sig) -> Patch2
whaleSongPadWithKey Sig
brightness D -> Sig -> SE Sig
wave = Patch2 -> Patch2
dreamPadFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D (Sig, Sig)) -> Patch2)
-> (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> (Sig -> SE Sig) -> Sig -> Sig -> SE Sig)
-> (D -> Sig -> SE Sig) -> Sig -> ResonFilter -> Instr D (Sig, Sig)
genDreamPadNote ResonFilter -> (Sig -> SE Sig) -> Sig -> Sig -> SE Sig
C.whaleSongPadBy D -> Sig -> SE Sig
wave Sig
brightness

------------------------------------
-- leads

polySynthFxChain :: Patch2 -> Patch2
polySynthFxChain = [GenFxSpec (Sig, Sig)] -> Patch2 -> Patch2
forall a. [GenFxSpec a] -> Patch a -> Patch a
FxChain [Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
0.25 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> (Sig, Sig)
largeHall2), Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
0.25 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig))
-> (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ D -> Sig -> Sig -> Sig
echo D
0.25 Sig
0.65)), Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
0.25 ((Sig -> SE Sig) -> (Sig, Sig) -> AtOut Sig (SE Sig) (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at ((Sig -> SE Sig) -> (Sig, Sig) -> AtOut Sig (SE Sig) (Sig, Sig))
-> (Sig -> SE Sig) -> (Sig, Sig) -> AtOut Sig (SE Sig) (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig -> SE Sig
chorus Sig
0.07 Sig
1.25 Sig
1), Sig
-> (ResonFilter -> (Sig, Sig) -> SE (Sig, Sig))
-> GenFxSpec (Sig, Sig)
forall a. Sig -> (ResonFilter -> Fx a) -> GenFxSpec a
fxSpecFilter Sig
1 ((ResonFilter -> (Sig, Sig) -> SE (Sig, Sig))
 -> GenFxSpec (Sig, Sig))
-> (ResonFilter -> (Sig, Sig) -> SE (Sig, Sig))
-> GenFxSpec (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter -> (Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (ResonFilter
filter Sig
5500 Sig
0.12 (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ResonFilter -> ResonFilter
C.filt Int
2 ResonFilter
C.br Sig
18000 Sig
0.3)]

polySynth :: Patch2
polySynth  = Patch2 -> Patch2
polySynthFxChain (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> SE (Sig, Sig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps Sig -> SE Sig
C.polySynth
polySynthm :: Patch2
polySynthm = Patch2 -> Patch2
polySynthFxChain (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ MonoInstr (Sig, Sig) -> Patch2
forall a. MonoInstr a -> Patch a
monoSynt (MonoInstr (Sig, Sig) -> Patch2) -> MonoInstr (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> SE (Sig, Sig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> (MonoArg -> SE Sig) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> MonoArg -> SE Sig
forall a. SigSpace a => (Sig -> a) -> MonoArg -> a
monoSig1 Sig -> SE Sig
C.polySynth

phasingLead :: Patch2
phasingLead = Patch2 -> Patch2
withSmallHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.7 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
fadeOut D
0.05) (SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Sig, Sig) -> Sig)
-> CsdNote D -> SE (CpsInstrOut ((Sig, Sig) -> Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps ((Sig -> Sig -> Sig) -> (Sig, Sig) -> Sig
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Sig -> Sig -> Sig
C.phasingSynth)

data RazorLead = RazorLead
  { RazorLead -> Sig
razorLeadBright :: Sig
  , RazorLead -> Sig
razorLeadSpeed  :: Sig }

instance Default RazorLead where
  def :: RazorLead
def = Sig -> Sig -> RazorLead
RazorLead Sig
0.5 Sig
0.5

razorLeadSlow :: Patch2
razorLeadSlow = RazorLead -> Patch2
razorLead' (RazorLead
forall a. Default a => a
def { razorLeadSpeed :: Sig
razorLeadSpeed = Sig
0.1 })
razorLeadFast :: Patch2
razorLeadFast = RazorLead -> Patch2
razorLead' (RazorLead
forall a. Default a => a
def { razorLeadSpeed :: Sig
razorLeadSpeed = Sig
1.7 })
razorLeadTremolo :: Patch2
razorLeadTremolo = RazorLead -> Patch2
razorLead' (RazorLead
forall a. Default a => a
def { razorLeadSpeed :: Sig
razorLeadSpeed = Sig
6.7 })

razorLead :: Patch2
razorLead = RazorLead -> Patch2
razorLead' RazorLead
forall a. Default a => a
def

razorLead' :: RazorLead -> Patch2
razorLead' (RazorLead Sig
bright Sig
speed) = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.35 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (\(D
amp, D
cps) -> Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> Sig
fadeOut (D
0.05 D -> D -> D
forall a. Num a => a -> a -> a
+ D
amp D -> D -> D
forall a. Num a => a -> a -> a
* D
0.3)) (SE Sig -> SE Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig -> Sig -> SE Sig
C.razorLead (Sig
bright Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
sig D
amp) (Sig
speed Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
sig D
amp) (D -> Sig
sig D
amp) (D -> Sig
sig D
cps))

overtoneLeadFx :: Sig2 -> SE Sig2
overtoneLeadFx :: (Sig, Sig) -> SE (Sig, Sig)
overtoneLeadFx (Sig, Sig)
x = (Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ (Sig, Sig) -> (Sig, Sig)
magicCave2 ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. MixAt a b c => Sig -> (a -> b) -> c -> AtOut a b c
mixAt Sig
0.2 (D -> Sig -> Sig -> Sig
echo D
0.25 Sig
0.45) (Sig, Sig)
x

overtoneLead :: Patch2
overtoneLead :: Patch2
overtoneLead = Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> SE a) -> Patch a -> Patch a
fx1' Sig
0.15 (Sig, Sig) -> SE (Sig, Sig)
overtoneLeadFx (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.4 (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> Sig
fades D
0.01 D
1) (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Sig -> Sig -> Sig
C.tibetan Int
13 Sig
0.012)

------------------------------------
-- bass

simpleBass :: Patch2
simpleBass = Patch2 -> Patch2
withSmallRoom (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.32 (SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (CsdNote D -> Sig)
-> CsdNote D -> SE (CpsInstrOut (CsdNote D -> Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps CsdNote D -> Sig
C.simpleBass

pwBass :: Patch2
pwBass = Patch2 -> Patch2
withSmallHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D (Sig, Sig)) -> Patch2)
-> (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter -> (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.4 (SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (ResonFilter -> Sig -> SE Sig
C.pwBassBy ResonFilter
filter)

deepBass :: Patch2
deepBass = Patch2 -> Patch2
withSmallHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.4 (SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps Sig -> Sig
C.deepBass

fmBass1 :: Patch2
fmBass1 = (MonoAdsr -> (Sig, Sig) -> SE (Sig, Sig)) -> Patch2
forall a. (MonoAdsr -> Instr Sig a) -> Patch a
adsrMono (\MonoAdsr
env (Sig
amp, Sig
cps) -> (Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> (Sig, Sig)
fromMono (Sig -> (Sig, Sig)) -> Sig -> (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ MonoAdsr -> (Sig, Sig) -> Sig
C.fmBass1 MonoAdsr
env (Sig
amp, Sig
cps))

fmBass2 :: Patch2
fmBass2 = Patch2 -> Patch2
fxs (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (MonoAdsr -> (Sig, Sig) -> SE (Sig, Sig)) -> Patch2
forall a. (MonoAdsr -> Instr Sig a) -> Patch a
adsrMono (\MonoAdsr
env (Sig
amp, Sig
cps) -> (Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> (Sig, Sig)
fromMono (Sig -> (Sig, Sig)) -> Sig -> (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ MonoAdsr -> (Sig, Sig) -> Sig
C.fmBass2 MonoAdsr
env (Sig
amp, Sig
cps))
  where fxs :: Patch2 -> Patch2
fxs = [GenFxSpec (Sig, Sig)] -> Patch2 -> Patch2
forall a. [GenFxSpec a] -> Patch a -> Patch a
FxChain [Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
1 ((Sig -> SE Sig) -> (Sig, Sig) -> AtOut Sig (SE Sig) (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (Sig -> Sig -> Sig -> Sig -> SE Sig
chorus Sig
0.2 Sig
0.15 Sig
0.17)), Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
1 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (Sig -> Sig -> Sig
bhp Sig
35 (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig
blp Sig
1200))]

-- | The first argument is the amount of deepBass to mix into the original patch.
withDeepBass :: Sig -> Patch2 -> Patch2
withDeepBass :: Sig -> Patch2 -> Patch2
withDeepBass Sig
k = Sig -> Patch2 -> Patch2 -> Patch2
forall b.
(SigSpace b, Num b) =>
Sig -> Patch b -> Patch b -> Patch b
mixInstr Sig
k Patch2
deepBass

------------------------------------
-- plucked

guitar :: Patch2
guitar = Patch2 -> Patch2
withSmallHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (D -> (Sig, Sig))
-> CsdNote D -> SE (CpsInstrOut (D -> (Sig, Sig)))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps ((D -> (Sig, Sig))
 -> CsdNote D -> SE (CpsInstrOut (D -> (Sig, Sig))))
-> (D -> (Sig, Sig))
-> CsdNote D
-> SE (CpsInstrOut (D -> (Sig, Sig)))
forall a b. (a -> b) -> a -> b
$ Sig -> (Sig, Sig)
fromMono (Sig -> (Sig, Sig)) -> (D -> Sig) -> D -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.6 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.01 D
0.25) (Sig -> Sig) -> (D -> Sig) -> D -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> Sig
C.plainString

harpsichord :: Patch2
harpsichord = Patch2 -> Patch2
withSmallHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (D -> (Sig, Sig))
-> CsdNote D -> SE (CpsInstrOut (D -> (Sig, Sig)))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps ((D -> (Sig, Sig))
 -> CsdNote D -> SE (CpsInstrOut (D -> (Sig, Sig))))
-> (D -> (Sig, Sig))
-> CsdNote D
-> SE (CpsInstrOut (D -> (Sig, Sig)))
forall a b. (a -> b) -> a -> b
$ Sig -> (Sig, Sig)
fromMono (Sig -> (Sig, Sig)) -> (D -> Sig) -> D -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.65 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.01 D
0.13) (Sig -> Sig) -> (D -> Sig) -> D -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> Sig
C.harpsichord

------------------------------------
-- strike

strikeFx :: Strike -> Sig2 -> SE Sig2
strikeFx :: Strike -> (Sig, Sig) -> SE (Sig, Sig)
strikeFx Strike
spec (Sig, Sig)
a = ((Sig, Sig) -> (Sig, Sig))
-> SE (Sig, Sig) -> AtOut (Sig, Sig) (Sig, Sig) (SE (Sig, Sig))
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (Strike -> (Sig, Sig) -> (Sig, Sig)
strikeReverb Strike
spec) (SE (Sig, Sig) -> AtOut (Sig, Sig) (Sig, Sig) (SE (Sig, Sig)))
-> SE (Sig, Sig) -> AtOut (Sig, Sig) (Sig, Sig) (SE (Sig, Sig))
forall a b. (a -> b) -> a -> b
$ (if (Strike -> Bool
strikeHasDelay Strike
spec) then (Sig
-> (Sig -> Sig) -> SE (Sig, Sig) -> AtOut Sig Sig (SE (Sig, Sig))
forall a b c. MixAt a b c => Sig -> (a -> b) -> c -> AtOut a b c
mixAt Sig
0.35 (D -> Sig -> Sig -> Sig
echo D
0.25 Sig
0.55)) else SE (Sig, Sig) -> SE (Sig, Sig)
forall a. a -> a
id) ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig, Sig)
a :: SE Sig2)

strikeRelease :: (D, D) -> Strike -> D
strikeRelease :: CsdNote D -> Strike -> D
strikeRelease (D
amp, D
cps) Strike
spec = (D
0.85 D -> D -> D
forall a. Num a => a -> a -> a
* Strike -> D
strikeRel Strike
spec D -> D -> D
forall a. Num a => a -> a -> a
* D
amp) D -> D -> D
forall a. Num a => a -> a -> a
* D
amp D -> D -> D
forall a. Num a => a -> a -> a
+ (Strike -> D
strikeRel Strike
spec) D -> D -> D
forall a. Num a => a -> a -> a
- (D
cps D -> D -> D
forall a. Fractional a => a -> a -> a
/ D
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
  { Strike -> D
strikeRel :: D
  , Strike -> Bool
strikeHasDelay :: Bool
  , Strike -> (Sig, Sig) -> (Sig, Sig)
strikeReverb :: Sig2 -> Sig2
  }

instance Default Strike where
  def :: Strike
def = D -> Bool -> ((Sig, Sig) -> (Sig, Sig)) -> Strike
Strike D
1.5 Bool
True (Sig, Sig) -> (Sig, Sig)
smallHall2

strike' :: Strike -> (Sig -> Sig) -> Patch2
strike' :: Strike -> (Sig -> Sig) -> Patch2
strike' Strike
spec Sig -> Sig
instr = Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> SE a) -> Patch a -> Patch a
fx1' Sig
0.25 (Strike -> (Sig, Sig) -> SE (Sig, Sig)
strikeFx Strike
spec) (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ \x :: CsdNote D
x@(D
amp, D
cps) -> (Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> (Sig, Sig)
fromMono (Sig -> (Sig, Sig)) -> Sig -> (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.75 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
sig D
amp Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
fadeOut (CsdNote D -> D
rel CsdNote D
x)) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig
instr (D -> Sig
sig D
cps)
  where rel :: CsdNote D -> D
rel CsdNote D
a = CsdNote D -> Strike -> D
strikeRelease CsdNote D
a Strike
spec

data Size = Small | Medium | Large | Huge

nextSize :: Size -> Size
nextSize Size
x = case Size
x of
  Size
Small -> Size
Medium
  Size
Medium -> Size
Large
  Size
Large -> Size
Huge
  Size
Huge -> Size
Huge

prevSize :: Size -> Size
prevSize Size
x = case Size
x of
  Size
Small -> Size
Small
  Size
Medium -> Size
Small
  Size
Large -> Size
Medium
  Size
Huge -> Size
Large

toStrikeSpec :: Size -> Size -> Strike
toStrikeSpec :: Size -> Size -> Strike
toStrikeSpec Size
revSpec Size
restSpec = Strike :: D -> Bool -> ((Sig, Sig) -> (Sig, Sig)) -> Strike
Strike
  { strikeReverb :: (Sig, Sig) -> (Sig, Sig)
strikeReverb  = Size -> (Sig, Sig) -> (Sig, Sig)
toReverb Size
revSpec
  , strikeRel :: D
strikeRel = Size -> D
toRel Size
restSpec
  , strikeHasDelay :: Bool
strikeHasDelay = Size -> Bool
toHasDelay Size
restSpec }

toReverb :: Size -> (Sig2  -> Sig2)
toReverb :: Size -> (Sig, Sig) -> (Sig, Sig)
toReverb Size
x = case Size
x of
  Size
Small -> (Sig, Sig) -> (Sig, Sig)
smallRoom2
  Size
Medium -> (Sig, Sig) -> (Sig, Sig)
smallHall2
  Size
Large -> (Sig, Sig) -> (Sig, Sig)
largeHall2
  Size
Huge -> (Sig, Sig) -> (Sig, Sig)
magicCave2

toRel :: Size -> D
toRel :: Size -> D
toRel Size
x = case Size
x of
  Size
Small -> D
0.4
  Size
Medium -> D
1.5
  Size
Large -> D
2.5
  Size
Huge -> D
4.5

toGain :: Size -> Sig
toGain :: Size -> Sig
toGain Size
x = case Size
x of
  Size
Small -> Sig
0.85
  Size
Medium -> Sig
0.75
  Size
Large -> Sig
0.6
  Size
Huge -> Sig
0.45

toHasDelay :: Size -> Bool
toHasDelay :: Size -> Bool
toHasDelay Size
x = case Size
x of
  Size
Small -> Bool
False
  Size
_     -> Bool
True

dahinaSize :: Size
dahinaSize        = Size
Small
banyanSize :: Size
banyanSize        = Size
Medium
xylophoneSize :: Size
xylophoneSize     = Size
Small
tibetanBowl152Size :: Size
tibetanBowl152Size    = Size
Medium
tibetanBowl140Size :: Size
tibetanBowl140Size    = Size
Small
tibetanBowl180Size :: Size
tibetanBowl180Size    = Size
Medium
spinelSphereSize :: Size
spinelSphereSize      = Size
Small
potLidSize :: Size
potLidSize            = Size
Medium
redCedarWoodPlateSize :: Size
redCedarWoodPlateSize = Size
Small
tubularBellSize :: Size
tubularBellSize       = Size
Large
redwoodPlateSize :: Size
redwoodPlateSize      = Size
Small
douglasFirWoodPlateSize :: Size
douglasFirWoodPlateSize = Size
Small
uniformWoodenBarSize :: Size
uniformWoodenBarSize = Size
Small
uniformAluminumBarSize :: Size
uniformAluminumBarSize = Size
Small
vibraphone1Size :: Size
vibraphone1Size = Size
Medium
vibraphone2Size :: Size
vibraphone2Size = Size
Medium
chalandiPlatesSize :: Size
chalandiPlatesSize = Size
Medium
wineGlassSize :: Size
wineGlassSize  = Size
Medium
smallHandbellSize :: Size
smallHandbellSize = Size
Medium
albertClockBellBelfastSize :: Size
albertClockBellBelfastSize = Size
Large
woodBlockSize :: Size
woodBlockSize = Size
Small

smallStrike :: Size -> (Sig -> Sig) -> Patch2
smallStrike :: Size -> (Sig -> Sig) -> Patch2
smallStrike Size
size = Size -> Size -> (Sig -> Sig) -> Patch2
mediumStrike' (Size -> Size
prevSize Size
size) Size
size

mediumStrike :: Size -> (Sig -> Sig) -> Patch2
mediumStrike :: Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
size = Size -> Size -> (Sig -> Sig) -> Patch2
mediumStrike' Size
size Size
size

largeStrike :: Size -> (Sig -> Sig) -> Patch2
largeStrike :: Size -> (Sig -> Sig) -> Patch2
largeStrike Size
size = Size -> Size -> (Sig -> Sig) -> Patch2
mediumStrike' (Size -> Size
nextSize Size
size) Size
size

magicStrike :: Size -> (Sig -> Sig) -> Patch2
magicStrike :: Size -> (Sig -> Sig) -> Patch2
magicStrike Size
size = Size -> Size -> (Sig -> Sig) -> Patch2
mediumStrike' (Size -> Size
nextSize (Size -> Size) -> Size -> Size
forall a b. (a -> b) -> a -> b
$ Size -> Size
nextSize Size
size) Size
size

mediumStrike' :: Size -> Size -> (Sig -> Sig) -> Patch2
mediumStrike' :: Size -> Size -> (Sig -> Sig) -> Patch2
mediumStrike' Size
revSize Size
size Sig -> Sig
f = (Instr D (Sig, Sig) -> Instr D (Sig, Sig)) -> Patch2 -> Patch2
forall a. (Instr D a -> Instr D a) -> Patch a -> Patch a
mapPatchInstr (\Instr D (Sig, Sig)
instr -> Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul (Size -> Sig
toGain Size
size) (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Instr D (Sig, Sig)
instr) Patch2
p
  where p :: Patch2
p = Strike -> (Sig -> Sig) -> Patch2
strike' (Size -> Size -> Strike
toStrikeSpec Size
revSize Size
size) Sig -> Sig
f


smallDahina :: Patch2
smallDahina = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
dahinaSize Sig -> Sig
C.dahina
dahina :: Patch2
dahina = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
dahinaSize Sig -> Sig
C.dahina
largeDahina :: Patch2
largeDahina = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
dahinaSize Sig -> Sig
C.dahina
magicDahina :: Patch2
magicDahina = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
dahinaSize Sig -> Sig
C.dahina

smallBanyan :: Patch2
smallBanyan = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
banyanSize Sig -> Sig
C.banyan
banyan :: Patch2
banyan = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
banyanSize Sig -> Sig
C.banyan
largeBanyan :: Patch2
largeBanyan = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
banyanSize Sig -> Sig
C.banyan
magicBanyan :: Patch2
magicBanyan = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
banyanSize Sig -> Sig
C.banyan

smallXylophone :: Patch2
smallXylophone = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
xylophoneSize Sig -> Sig
C.xylophone
xylophone :: Patch2
xylophone = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
xylophoneSize Sig -> Sig
C.xylophone
largeXylophone :: Patch2
largeXylophone = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
xylophoneSize Sig -> Sig
C.xylophone
magicXylophone :: Patch2
magicXylophone = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
xylophoneSize Sig -> Sig
C.xylophone

smallTibetanBowl180 :: Patch2
smallTibetanBowl180 = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
tibetanBowl180Size Sig -> Sig
C.tibetanBowl180
tibetanBowl180 :: Patch2
tibetanBowl180 = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
tibetanBowl180Size Sig -> Sig
C.tibetanBowl180
largeTibetanBowl180 :: Patch2
largeTibetanBowl180 = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
tibetanBowl180Size Sig -> Sig
C.tibetanBowl180
magicTibetanBowl180 :: Patch2
magicTibetanBowl180 = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
tibetanBowl180Size Sig -> Sig
C.tibetanBowl180

smallSpinelSphere :: Patch2
smallSpinelSphere = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
spinelSphereSize Sig -> Sig
C.spinelSphere
spinelSphere :: Patch2
spinelSphere = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
spinelSphereSize Sig -> Sig
C.spinelSphere
largeSpinelSphere :: Patch2
largeSpinelSphere = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
spinelSphereSize Sig -> Sig
C.spinelSphere
magicSpinelSphere :: Patch2
magicSpinelSphere = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
spinelSphereSize Sig -> Sig
C.spinelSphere

smallPotLid :: Patch2
smallPotLid = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
potLidSize Sig -> Sig
C.potLid
potLid :: Patch2
potLid = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
potLidSize Sig -> Sig
C.potLid
largePotLid :: Patch2
largePotLid = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
potLidSize Sig -> Sig
C.potLid
magicPotLid :: Patch2
magicPotLid = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
potLidSize Sig -> Sig
C.potLid

smallRedCedarWoodPlate :: Patch2
smallRedCedarWoodPlate = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
redCedarWoodPlateSize Sig -> Sig
C.redCedarWoodPlate
redCedarWoodPlate :: Patch2
redCedarWoodPlate = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
redCedarWoodPlateSize Sig -> Sig
C.redCedarWoodPlate
largeRedCedarWoodPlate :: Patch2
largeRedCedarWoodPlate = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
redCedarWoodPlateSize Sig -> Sig
C.redCedarWoodPlate
magicRedCedarWoodPlate :: Patch2
magicRedCedarWoodPlate = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
redCedarWoodPlateSize Sig -> Sig
C.redCedarWoodPlate

smallTubularBell :: Patch2
smallTubularBell = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
tubularBellSize Sig -> Sig
C.tubularBell
tubularBell :: Patch2
tubularBell = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
tubularBellSize Sig -> Sig
C.tubularBell
largeTubularBell :: Patch2
largeTubularBell = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
tubularBellSize Sig -> Sig
C.tubularBell
magicTubularBell :: Patch2
magicTubularBell = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
tubularBellSize Sig -> Sig
C.tubularBell

smallRedwoodPlate :: Patch2
smallRedwoodPlate = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
redwoodPlateSize Sig -> Sig
C.redwoodPlate
redwoodPlate :: Patch2
redwoodPlate = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
redwoodPlateSize Sig -> Sig
C.redwoodPlate
largeRedwoodPlate :: Patch2
largeRedwoodPlate = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
redwoodPlateSize Sig -> Sig
C.redwoodPlate
magicRedwoodPlate :: Patch2
magicRedwoodPlate = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
redwoodPlateSize Sig -> Sig
C.redwoodPlate

smallDouglasFirWoodPlate :: Patch2
smallDouglasFirWoodPlate = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
douglasFirWoodPlateSize Sig -> Sig
C.douglasFirWoodPlate
douglasFirWoodPlate :: Patch2
douglasFirWoodPlate = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
douglasFirWoodPlateSize Sig -> Sig
C.douglasFirWoodPlate
largeDouglasFirWoodPlate :: Patch2
largeDouglasFirWoodPlate = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
douglasFirWoodPlateSize Sig -> Sig
C.douglasFirWoodPlate
magicDouglasFirWoodPlate :: Patch2
magicDouglasFirWoodPlate = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
douglasFirWoodPlateSize Sig -> Sig
C.douglasFirWoodPlate

smallUniformWoodenBar :: Patch2
smallUniformWoodenBar = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
uniformWoodenBarSize Sig -> Sig
C.uniformWoodenBar
uniformWoodenBar :: Patch2
uniformWoodenBar = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
uniformWoodenBarSize Sig -> Sig
C.uniformWoodenBar
largeUniformWoodenBar :: Patch2
largeUniformWoodenBar = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
uniformWoodenBarSize Sig -> Sig
C.uniformWoodenBar
magicUniformWoodenBar :: Patch2
magicUniformWoodenBar = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
uniformWoodenBarSize Sig -> Sig
C.uniformWoodenBar

smallUniformAluminumBar :: Patch2
smallUniformAluminumBar = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
uniformAluminumBarSize Sig -> Sig
C.uniformAluminumBar
uniformAluminumBar :: Patch2
uniformAluminumBar = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
uniformAluminumBarSize Sig -> Sig
C.uniformAluminumBar
largeUniformAluminumBar :: Patch2
largeUniformAluminumBar = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
uniformAluminumBarSize Sig -> Sig
C.uniformAluminumBar
magicUniformAluminumBar :: Patch2
magicUniformAluminumBar = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
uniformAluminumBarSize Sig -> Sig
C.uniformAluminumBar

smallVibraphone1 :: Patch2
smallVibraphone1 = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
vibraphone1Size Sig -> Sig
C.vibraphone1
vibraphone1 :: Patch2
vibraphone1 = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
vibraphone1Size Sig -> Sig
C.vibraphone1
largeVibraphone1 :: Patch2
largeVibraphone1 = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
vibraphone1Size Sig -> Sig
C.vibraphone1
magicVibraphone1 :: Patch2
magicVibraphone1 = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
vibraphone1Size Sig -> Sig
C.vibraphone1

smallVibraphone2 :: Patch2
smallVibraphone2 = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
vibraphone2Size Sig -> Sig
C.vibraphone2
vibraphone2 :: Patch2
vibraphone2 = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
vibraphone2Size Sig -> Sig
C.vibraphone2
largeVibraphone2 :: Patch2
largeVibraphone2 = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
vibraphone2Size Sig -> Sig
C.vibraphone2
magicVibraphone2 :: Patch2
magicVibraphone2 = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
vibraphone2Size Sig -> Sig
C.vibraphone2

smallChalandiPlates :: Patch2
smallChalandiPlates = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
chalandiPlatesSize Sig -> Sig
C.chalandiPlates
chalandiPlates :: Patch2
chalandiPlates = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
chalandiPlatesSize Sig -> Sig
C.chalandiPlates
largeChalandiPlates :: Patch2
largeChalandiPlates = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
chalandiPlatesSize Sig -> Sig
C.chalandiPlates
magicChalandiPlates :: Patch2
magicChalandiPlates = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
chalandiPlatesSize Sig -> Sig
C.chalandiPlates

smallTibetanBowl152 :: Patch2
smallTibetanBowl152 = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
tibetanBowl152Size Sig -> Sig
C.tibetanBowl152
tibetanBowl152 :: Patch2
tibetanBowl152 = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
tibetanBowl152Size Sig -> Sig
C.tibetanBowl152
largeTibetanBowl152 :: Patch2
largeTibetanBowl152 = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
tibetanBowl152Size Sig -> Sig
C.tibetanBowl152
magicTibetanBowl152 :: Patch2
magicTibetanBowl152 = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
tibetanBowl152Size Sig -> Sig
C.tibetanBowl152

smallTibetanBowl140 :: Patch2
smallTibetanBowl140 = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
tibetanBowl140Size Sig -> Sig
C.tibetanBowl140
tibetanBowl140 :: Patch2
tibetanBowl140 = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
tibetanBowl140Size Sig -> Sig
C.tibetanBowl140
largeTibetanBowl140 :: Patch2
largeTibetanBowl140 = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
tibetanBowl140Size Sig -> Sig
C.tibetanBowl140
magicTibetanBowl140 :: Patch2
magicTibetanBowl140 = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
tibetanBowl140Size Sig -> Sig
C.tibetanBowl140

smallWineGlass :: Patch2
smallWineGlass = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
wineGlassSize Sig -> Sig
C.wineGlass
wineGlass :: Patch2
wineGlass = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
wineGlassSize Sig -> Sig
C.wineGlass
largeWineGlass :: Patch2
largeWineGlass = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
wineGlassSize Sig -> Sig
C.wineGlass
magicWineGlass :: Patch2
magicWineGlass = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
wineGlassSize Sig -> Sig
C.wineGlass

smallHandbell :: Patch2
smallHandbell = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
smallHandbellSize Sig -> Sig
C.smallHandbell
handbell :: Patch2
handbell = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
smallHandbellSize Sig -> Sig
C.smallHandbell
largeHandbell :: Patch2
largeHandbell = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
smallHandbellSize Sig -> Sig
C.smallHandbell
magicHandbell :: Patch2
magicHandbell = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
smallHandbellSize Sig -> Sig
C.smallHandbell

smallAlbertClockBellBelfast :: Patch2
smallAlbertClockBellBelfast = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
albertClockBellBelfastSize Sig -> Sig
C.albertClockBellBelfast
albertClockBellBelfast :: Patch2
albertClockBellBelfast = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
albertClockBellBelfastSize Sig -> Sig
C.albertClockBellBelfast
largeAlbertClockBellBelfast :: Patch2
largeAlbertClockBellBelfast = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
albertClockBellBelfastSize Sig -> Sig
C.albertClockBellBelfast
magicAlbertClockBellBelfast :: Patch2
magicAlbertClockBellBelfast = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
albertClockBellBelfastSize Sig -> Sig
C.albertClockBellBelfast

smallWoodBlock :: Patch2
smallWoodBlock = Size -> (Sig -> Sig) -> Patch2
smallStrike Size
woodBlockSize Sig -> Sig
C.woodBlock
woodBlock :: Patch2
woodBlock = Size -> (Sig -> Sig) -> Patch2
mediumStrike Size
woodBlockSize Sig -> Sig
C.woodBlock
largeWoodBlock :: Patch2
largeWoodBlock = Size -> (Sig -> Sig) -> Patch2
largeStrike Size
woodBlockSize Sig -> Sig
C.woodBlock
magicWoodBlock :: Patch2
magicWoodBlock = Size -> (Sig -> Sig) -> Patch2
magicStrike Size
woodBlockSize Sig -> Sig
C.woodBlock

---------------------------------------------------------------
-- scrape

-- scrapePatch

scrapeRelease :: (D, D) -> D -> D
scrapeRelease :: CsdNote D -> D -> D
scrapeRelease (D
amp, D
cps) D
rel = (D
0.85 D -> D -> D
forall a. Num a => a -> a -> a
* D
rel D -> D -> D
forall a. Num a => a -> a -> a
* D
amp) D -> D -> D
forall a. Num a => a -> a -> a
* D
amp D -> D -> D
forall a. Num a => a -> a -> a
+ D
rel D -> D -> D
forall a. Num a => a -> a -> a
- (D
cps D -> D -> D
forall a. Fractional a => a -> a -> a
/ D
10000)

scrapeFast :: Sig -> Modes Sig -> Patch2
scrapeFast Sig
k Modes Sig
m = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.15 (Sig, Sig) -> (Sig, Sig)
largeHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ \x :: CsdNote D
x@(D
amp, D
cps) -> (Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.75 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
sig D
amp Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
k Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.02 (CsdNote D -> D -> D
scrapeRelease CsdNote D
x D
0.25)) (SE (Sig, Sig) -> SE (Sig, Sig))
-> (Sig -> SE (Sig, Sig)) -> Sig -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> (Sig -> SE Sig) -> Sig -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Modes Sig -> Sig -> SE Sig
C.scrapeModes Modes Sig
m) (D -> Sig
sig D
cps)

scrape :: Sig -> Modes Sig -> Patch2
scrape Sig
k Modes Sig
m = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.15 (Sig, Sig) -> (Sig, Sig)
largeHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ \x :: CsdNote D
x@(D
amp, D
cps) -> (Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.75 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
sig D
amp Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
k Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.5 (CsdNote D -> D -> D
scrapeRelease CsdNote D
x D
0.97)) (SE (Sig, Sig) -> SE (Sig, Sig))
-> (Sig -> SE (Sig, Sig)) -> Sig -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> (Sig -> SE Sig) -> Sig -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Modes Sig -> Sig -> SE Sig
C.scrapeModes Modes Sig
m) (D -> Sig
sig D
cps)

scrapem :: Sig -> Modes Sig -> Patch2
scrapem Sig
k Modes Sig
m = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.15 (Sig, Sig) -> (Sig, Sig)
largeHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ MonoInstr (Sig, Sig) -> Patch2
forall a. MonoInstr a -> Patch a
monoSynt (MonoInstr (Sig, Sig) -> Patch2) -> MonoInstr (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (\(Sig
amp, Sig
cps) -> (Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.75 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
amp Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
k Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.5 D
1.97) (SE (Sig, Sig) -> SE (Sig, Sig))
-> (Sig -> SE (Sig, Sig)) -> Sig -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> (Sig -> SE Sig) -> Sig -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Modes Sig -> Sig -> SE Sig
C.scrapeModes Modes Sig
m) Sig
cps) ((Sig, Sig) -> SE (Sig, Sig))
-> (MonoArg -> (Sig, Sig)) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MonoArg -> (Sig, Sig)
monoArgToNote

scrapePad :: Sig -> Modes Sig -> Patch2
scrapePad Sig
k Modes Sig
m = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.15 (Sig, Sig) -> (Sig, Sig)
largeHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ \x :: CsdNote D
x@(D
amp, D
cps) -> (Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.75 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
sig D
amp Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
k Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.5 (CsdNote D -> D -> D
scrapeRelease CsdNote D
x D
2.27  )) (SE (Sig, Sig) -> SE (Sig, Sig))
-> (Sig -> SE (Sig, Sig)) -> Sig -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> (Sig -> SE Sig) -> Sig -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Modes Sig -> Sig -> SE Sig
C.scrapeModes Modes Sig
m) (D -> Sig
sig D
cps)

scrapePadm :: Sig -> Modes Sig -> Patch2
scrapePadm Sig
k Modes Sig
m = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.15 (Sig, Sig) -> (Sig, Sig)
largeHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ MonoInstr (Sig, Sig) -> Patch2
forall a. MonoInstr a -> Patch a
monoSynt (MonoInstr (Sig, Sig) -> Patch2) -> MonoInstr (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (\(Sig
amp, Sig
cps) -> (Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.75 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
amp Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
k Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.5 D
2.27) (SE (Sig, Sig) -> SE (Sig, Sig))
-> (Sig -> SE (Sig, Sig)) -> Sig -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> (Sig -> SE Sig) -> Sig -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Modes Sig -> Sig -> SE Sig
C.scrapeModes Modes Sig
m) Sig
cps) ((Sig, Sig) -> SE (Sig, Sig))
-> (MonoArg -> (Sig, Sig)) -> MonoInstr (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MonoArg -> (Sig, Sig)
monoArgToNote

scaleScrapeDahina :: Sig
scaleScrapeDahina = Sig
1.32
scaleScrapeBanyan :: Sig
scaleScrapeBanyan = Sig
0.95
scaleScrapeXylophone :: Sig
scaleScrapeXylophone = Sig
1
scaleScrapeTibetanBowl180 :: Sig
scaleScrapeTibetanBowl180 = Sig
0.55
scaleScrapeSpinelSphere :: Sig
scaleScrapeSpinelSphere = Sig
1.4
scaleScrapePotLid :: Sig
scaleScrapePotLid = Sig
0.65
scaleScrapeRedCedarWoodPlate :: Sig
scaleScrapeRedCedarWoodPlate = Sig
1
scaleScrapeTubularBell :: Sig
scaleScrapeTubularBell = Sig
0.75
scaleScrapeRedwoodPlate :: Sig
scaleScrapeRedwoodPlate = Sig
1
scaleScrapeDouglasFirWoodPlate :: Sig
scaleScrapeDouglasFirWoodPlate = Sig
1
scaleScrapeUniformWoodenBar :: Sig
scaleScrapeUniformWoodenBar = Sig
1
scaleScrapeUniformAluminumBar :: Sig
scaleScrapeUniformAluminumBar = Sig
0.75
scaleScrapeVibraphone1 :: Sig
scaleScrapeVibraphone1 = Sig
0.9
scaleScrapeVibraphone2 :: Sig
scaleScrapeVibraphone2 = Sig
0.9
scaleScrapeChalandiPlates :: Sig
scaleScrapeChalandiPlates = Sig
1
scaleScrapeTibetanBowl152 :: Sig
scaleScrapeTibetanBowl152 = Sig
0.65
scaleScrapeTibetanBowl140 :: Sig
scaleScrapeTibetanBowl140 = Sig
0.75
scaleScrapeWineGlass :: Sig
scaleScrapeWineGlass = Sig
0.6
scaleScrapeSmallHandbell :: Sig
scaleScrapeSmallHandbell = Sig
1
scaleScrapeAlbertClockBellBelfast :: Sig
scaleScrapeAlbertClockBellBelfast = Sig
0.5
scaleScrapeWoodBlock :: Sig
scaleScrapeWoodBlock = Sig
1.32

scrapeDahina :: Patch2
scrapeDahina = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeDahina Modes Sig
forall a. Fractional a => Modes a
C.dahinaModes
scrapeBanyan :: Patch2
scrapeBanyan = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeBanyan Modes Sig
forall a. Fractional a => Modes a
C.banyanModes
scrapeXylophone :: Patch2
scrapeXylophone = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeXylophone Modes Sig
forall a. Fractional a => Modes a
C.xylophoneModes
scrapeTibetanBowl180 :: Patch2
scrapeTibetanBowl180 = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeTibetanBowl180 Modes Sig
forall a. Fractional a => Modes a
C.tibetanBowlModes180
scrapeSpinelSphere :: Patch2
scrapeSpinelSphere = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeSpinelSphere Modes Sig
forall a. Fractional a => Modes a
C.spinelSphereModes
scrapePotLid :: Patch2
scrapePotLid = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapePotLid Modes Sig
forall a. Fractional a => Modes a
C.potLidModes
scrapeRedCedarWoodPlate :: Patch2
scrapeRedCedarWoodPlate = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeRedCedarWoodPlate Modes Sig
forall a. Fractional a => Modes a
C.redCedarWoodPlateModes
scrapeTubularBell :: Patch2
scrapeTubularBell = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeTubularBell Modes Sig
forall a. Fractional a => Modes a
C.tubularBellModes
scrapeRedwoodPlate :: Patch2
scrapeRedwoodPlate = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeRedwoodPlate Modes Sig
forall a. Fractional a => Modes a
C.redwoodPlateModes
scrapeDouglasFirWoodPlate :: Patch2
scrapeDouglasFirWoodPlate = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeDouglasFirWoodPlate Modes Sig
forall a. Fractional a => Modes a
C.douglasFirWoodPlateModes
scrapeUniformWoodenBar :: Patch2
scrapeUniformWoodenBar = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeUniformWoodenBar Modes Sig
forall a. Fractional a => Modes a
C.uniformWoodenBarModes
scrapeUniformAluminumBar :: Patch2
scrapeUniformAluminumBar = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeUniformAluminumBar Modes Sig
forall a. Fractional a => Modes a
C.uniformAluminumBarModes
scrapeVibraphone1 :: Patch2
scrapeVibraphone1 = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeVibraphone1 Modes Sig
forall a. Fractional a => Modes a
C.vibraphoneModes1
scrapeVibraphone2 :: Patch2
scrapeVibraphone2 = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeVibraphone2 Modes Sig
forall a. Fractional a => Modes a
C.vibraphoneModes2
scrapeChalandiPlates :: Patch2
scrapeChalandiPlates = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeChalandiPlates Modes Sig
forall a. Fractional a => Modes a
C.chalandiPlatesModes
scrapeTibetanBowl152 :: Patch2
scrapeTibetanBowl152 = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeTibetanBowl152 Modes Sig
forall a. Fractional a => Modes a
C.tibetanBowlModes152
scrapeTibetanBowl140 :: Patch2
scrapeTibetanBowl140 = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeTibetanBowl140 Modes Sig
forall a. Fractional a => Modes a
C.tibetanBowlModes140
scrapeWineGlass :: Patch2
scrapeWineGlass = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeWineGlass Modes Sig
forall a. Fractional a => Modes a
C.wineGlassModes
scrapeSmallHandbell :: Patch2
scrapeSmallHandbell = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeSmallHandbell Modes Sig
forall a. Fractional a => Modes a
C.smallHandbellModes
scrapeAlbertClockBellBelfast :: Patch2
scrapeAlbertClockBellBelfast = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeAlbertClockBellBelfast Modes Sig
forall a. Fractional a => Modes a
C.albertClockBellBelfastModes
scrapeWoodBlock :: Patch2
scrapeWoodBlock = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapeWoodBlock Modes Sig
forall a. Fractional a => Modes a
C.woodBlockModes

scrapeDahinam :: Patch2
scrapeDahinam = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeDahina Modes Sig
forall a. Fractional a => Modes a
C.dahinaModes
scrapeBanyanm :: Patch2
scrapeBanyanm = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeBanyan Modes Sig
forall a. Fractional a => Modes a
C.banyanModes
scrapeXylophonem :: Patch2
scrapeXylophonem = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeXylophone Modes Sig
forall a. Fractional a => Modes a
C.xylophoneModes
scrapeTibetanBowl180m :: Patch2
scrapeTibetanBowl180m = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeTibetanBowl180 Modes Sig
forall a. Fractional a => Modes a
C.tibetanBowlModes180
scrapeSpinelSpherem :: Patch2
scrapeSpinelSpherem = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeSpinelSphere Modes Sig
forall a. Fractional a => Modes a
C.spinelSphereModes
scrapePotLidm :: Patch2
scrapePotLidm = Sig -> Modes Sig -> Patch2
scrape Sig
scaleScrapePotLid Modes Sig
forall a. Fractional a => Modes a
C.potLidModes
scrapeRedCedarWoodPlatem :: Patch2
scrapeRedCedarWoodPlatem = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeRedCedarWoodPlate Modes Sig
forall a. Fractional a => Modes a
C.redCedarWoodPlateModes
scrapeTubularBellm :: Patch2
scrapeTubularBellm = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeTubularBell Modes Sig
forall a. Fractional a => Modes a
C.tubularBellModes
scrapeRedwoodPlatem :: Patch2
scrapeRedwoodPlatem = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeRedwoodPlate Modes Sig
forall a. Fractional a => Modes a
C.redwoodPlateModes
scrapeDouglasFirWoodPlatem :: Patch2
scrapeDouglasFirWoodPlatem = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeDouglasFirWoodPlate Modes Sig
forall a. Fractional a => Modes a
C.douglasFirWoodPlateModes
scrapeUniformWoodenBarm :: Patch2
scrapeUniformWoodenBarm = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeUniformWoodenBar Modes Sig
forall a. Fractional a => Modes a
C.uniformWoodenBarModes
scrapeUniformAluminumBarm :: Patch2
scrapeUniformAluminumBarm = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeUniformAluminumBar Modes Sig
forall a. Fractional a => Modes a
C.uniformAluminumBarModes
scrapeVibraphone1m :: Patch2
scrapeVibraphone1m = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeVibraphone1 Modes Sig
forall a. Fractional a => Modes a
C.vibraphoneModes1
scrapeVibraphone2m :: Patch2
scrapeVibraphone2m = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeVibraphone2 Modes Sig
forall a. Fractional a => Modes a
C.vibraphoneModes2
scrapeChalandiPlatesm :: Patch2
scrapeChalandiPlatesm = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeChalandiPlates Modes Sig
forall a. Fractional a => Modes a
C.chalandiPlatesModes
scrapeTibetanBowl152m :: Patch2
scrapeTibetanBowl152m = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeTibetanBowl152 Modes Sig
forall a. Fractional a => Modes a
C.tibetanBowlModes152
scrapeTibetanBowl140m :: Patch2
scrapeTibetanBowl140m = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeTibetanBowl140 Modes Sig
forall a. Fractional a => Modes a
C.tibetanBowlModes140
scrapeWineGlassm :: Patch2
scrapeWineGlassm = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeWineGlass Modes Sig
forall a. Fractional a => Modes a
C.wineGlassModes
scrapeSmallHandbellm :: Patch2
scrapeSmallHandbellm = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeSmallHandbell Modes Sig
forall a. Fractional a => Modes a
C.smallHandbellModes
scrapeAlbertClockBellBelfastm :: Patch2
scrapeAlbertClockBellBelfastm = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeAlbertClockBellBelfast Modes Sig
forall a. Fractional a => Modes a
C.albertClockBellBelfastModes
scrapeWoodBlockm :: Patch2
scrapeWoodBlockm = Sig -> Modes Sig -> Patch2
scrapem Sig
scaleScrapeWoodBlock Modes Sig
forall a. Fractional a => Modes a
C.woodBlockModes

scrapeFastDahina :: Patch2
scrapeFastDahina = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeDahina Modes Sig
forall a. Fractional a => Modes a
C.dahinaModes
scrapeFastBanyan :: Patch2
scrapeFastBanyan = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeBanyan Modes Sig
forall a. Fractional a => Modes a
C.banyanModes
scrapeFastXylophone :: Patch2
scrapeFastXylophone = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeXylophone Modes Sig
forall a. Fractional a => Modes a
C.xylophoneModes
scrapeFastTibetanBowl180 :: Patch2
scrapeFastTibetanBowl180 = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeTibetanBowl180 Modes Sig
forall a. Fractional a => Modes a
C.tibetanBowlModes180
scrapeFastSpinelSphere :: Patch2
scrapeFastSpinelSphere = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeSpinelSphere Modes Sig
forall a. Fractional a => Modes a
C.spinelSphereModes
scrapeFastPotLid :: Patch2
scrapeFastPotLid = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapePotLid Modes Sig
forall a. Fractional a => Modes a
C.potLidModes
scrapeFastRedCedarWoodPlate :: Patch2
scrapeFastRedCedarWoodPlate = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeRedCedarWoodPlate Modes Sig
forall a. Fractional a => Modes a
C.redCedarWoodPlateModes
scrapeFastTubularBell :: Patch2
scrapeFastTubularBell = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeTubularBell Modes Sig
forall a. Fractional a => Modes a
C.tubularBellModes
scrapeFastRedwoodPlate :: Patch2
scrapeFastRedwoodPlate = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeRedwoodPlate Modes Sig
forall a. Fractional a => Modes a
C.redwoodPlateModes
scrapeFastDouglasFirWoodPlate :: Patch2
scrapeFastDouglasFirWoodPlate = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeDouglasFirWoodPlate Modes Sig
forall a. Fractional a => Modes a
C.douglasFirWoodPlateModes
scrapeFastUniformWoodenBar :: Patch2
scrapeFastUniformWoodenBar = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeUniformWoodenBar Modes Sig
forall a. Fractional a => Modes a
C.uniformWoodenBarModes
scrapeFastUniformAluminumBar :: Patch2
scrapeFastUniformAluminumBar = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeUniformAluminumBar Modes Sig
forall a. Fractional a => Modes a
C.uniformAluminumBarModes
scrapeFastVibraphone1 :: Patch2
scrapeFastVibraphone1 = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeVibraphone1 Modes Sig
forall a. Fractional a => Modes a
C.vibraphoneModes1
scrapeFastVibraphone2 :: Patch2
scrapeFastVibraphone2 = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeVibraphone2 Modes Sig
forall a. Fractional a => Modes a
C.vibraphoneModes2
scrapeFastChalandiPlates :: Patch2
scrapeFastChalandiPlates = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeChalandiPlates Modes Sig
forall a. Fractional a => Modes a
C.chalandiPlatesModes
scrapeFastTibetanBowl152 :: Patch2
scrapeFastTibetanBowl152 = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeTibetanBowl152 Modes Sig
forall a. Fractional a => Modes a
C.tibetanBowlModes152
scrapeFastTibetanBowl140 :: Patch2
scrapeFastTibetanBowl140 = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeTibetanBowl140 Modes Sig
forall a. Fractional a => Modes a
C.tibetanBowlModes140
scrapeFastWineGlass :: Patch2
scrapeFastWineGlass = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeWineGlass Modes Sig
forall a. Fractional a => Modes a
C.wineGlassModes
scrapeFastSmallHandbell :: Patch2
scrapeFastSmallHandbell = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeSmallHandbell Modes Sig
forall a. Fractional a => Modes a
C.smallHandbellModes
scrapeFastAlbertClockBellBelfast :: Patch2
scrapeFastAlbertClockBellBelfast = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeAlbertClockBellBelfast Modes Sig
forall a. Fractional a => Modes a
C.albertClockBellBelfastModes
scrapeFastWoodBlock :: Patch2
scrapeFastWoodBlock = Sig -> Modes Sig -> Patch2
scrapeFast Sig
scaleScrapeWoodBlock Modes Sig
forall a. Fractional a => Modes a
C.woodBlockModes

scrapePadDahina :: Patch2
scrapePadDahina = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeDahina Modes Sig
forall a. Fractional a => Modes a
C.dahinaModes
scrapePadBanyan :: Patch2
scrapePadBanyan = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeBanyan Modes Sig
forall a. Fractional a => Modes a
C.banyanModes
scrapePadXylophone :: Patch2
scrapePadXylophone = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeXylophone Modes Sig
forall a. Fractional a => Modes a
C.xylophoneModes
scrapePadTibetanBowl180 :: Patch2
scrapePadTibetanBowl180 = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeTibetanBowl180 Modes Sig
forall a. Fractional a => Modes a
C.tibetanBowlModes180
scrapePadSpinelSphere :: Patch2
scrapePadSpinelSphere = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeSpinelSphere Modes Sig
forall a. Fractional a => Modes a
C.spinelSphereModes
scrapePadPotLid :: Patch2
scrapePadPotLid = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapePotLid Modes Sig
forall a. Fractional a => Modes a
C.potLidModes
scrapePadRedCedarWoodPlate :: Patch2
scrapePadRedCedarWoodPlate = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeRedCedarWoodPlate Modes Sig
forall a. Fractional a => Modes a
C.redCedarWoodPlateModes
scrapePadTubularBell :: Patch2
scrapePadTubularBell = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeTubularBell Modes Sig
forall a. Fractional a => Modes a
C.tubularBellModes
scrapePadRedwoodPlate :: Patch2
scrapePadRedwoodPlate = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeRedwoodPlate Modes Sig
forall a. Fractional a => Modes a
C.redwoodPlateModes
scrapePadDouglasFirWoodPlate :: Patch2
scrapePadDouglasFirWoodPlate = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeDouglasFirWoodPlate Modes Sig
forall a. Fractional a => Modes a
C.douglasFirWoodPlateModes
scrapePadUniformWoodenBar :: Patch2
scrapePadUniformWoodenBar = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeUniformWoodenBar Modes Sig
forall a. Fractional a => Modes a
C.uniformWoodenBarModes
scrapePadUniformAluminumBar :: Patch2
scrapePadUniformAluminumBar = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeUniformAluminumBar Modes Sig
forall a. Fractional a => Modes a
C.uniformAluminumBarModes
scrapePadVibraphone1 :: Patch2
scrapePadVibraphone1 = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeVibraphone1 Modes Sig
forall a. Fractional a => Modes a
C.vibraphoneModes1
scrapePadVibraphone2 :: Patch2
scrapePadVibraphone2 = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeVibraphone2 Modes Sig
forall a. Fractional a => Modes a
C.vibraphoneModes2
scrapePadChalandiPlates :: Patch2
scrapePadChalandiPlates = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeChalandiPlates Modes Sig
forall a. Fractional a => Modes a
C.chalandiPlatesModes
scrapePadTibetanBowl152 :: Patch2
scrapePadTibetanBowl152 = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeTibetanBowl152 Modes Sig
forall a. Fractional a => Modes a
C.tibetanBowlModes152
scrapePadTibetanBowl140 :: Patch2
scrapePadTibetanBowl140 = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeTibetanBowl140 Modes Sig
forall a. Fractional a => Modes a
C.tibetanBowlModes140
scrapePadWineGlass :: Patch2
scrapePadWineGlass = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeWineGlass Modes Sig
forall a. Fractional a => Modes a
C.wineGlassModes
scrapePadSmallHandbell :: Patch2
scrapePadSmallHandbell = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeSmallHandbell Modes Sig
forall a. Fractional a => Modes a
C.smallHandbellModes
scrapePadAlbertClockBellBelfast :: Patch2
scrapePadAlbertClockBellBelfast = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeAlbertClockBellBelfast Modes Sig
forall a. Fractional a => Modes a
C.albertClockBellBelfastModes
scrapePadWoodBlock :: Patch2
scrapePadWoodBlock = Sig -> Modes Sig -> Patch2
scrapePad Sig
scaleScrapeWoodBlock Modes Sig
forall a. Fractional a => Modes a
C.woodBlockModes

scrapePadDahinam :: Patch2
scrapePadDahinam = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeDahina Modes Sig
forall a. Fractional a => Modes a
C.dahinaModes
scrapePadBanyanm :: Patch2
scrapePadBanyanm = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeBanyan Modes Sig
forall a. Fractional a => Modes a
C.banyanModes
scrapePadXylophonem :: Patch2
scrapePadXylophonem = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeXylophone Modes Sig
forall a. Fractional a => Modes a
C.xylophoneModes
scrapePadTibetanBowl180m :: Patch2
scrapePadTibetanBowl180m = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeTibetanBowl180 Modes Sig
forall a. Fractional a => Modes a
C.tibetanBowlModes180
scrapePadSpinelSpherem :: Patch2
scrapePadSpinelSpherem = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeSpinelSphere Modes Sig
forall a. Fractional a => Modes a
C.spinelSphereModes
scrapePadPotLidm :: Patch2
scrapePadPotLidm = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapePotLid Modes Sig
forall a. Fractional a => Modes a
C.potLidModes
scrapePadRedCedarWoodPlatem :: Patch2
scrapePadRedCedarWoodPlatem = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeRedCedarWoodPlate Modes Sig
forall a. Fractional a => Modes a
C.redCedarWoodPlateModes
scrapePadTubularBellm :: Patch2
scrapePadTubularBellm = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeTubularBell Modes Sig
forall a. Fractional a => Modes a
C.tubularBellModes
scrapePadRedwoodPlatem :: Patch2
scrapePadRedwoodPlatem = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeRedwoodPlate Modes Sig
forall a. Fractional a => Modes a
C.redwoodPlateModes
scrapePadDouglasFirWoodPlatem :: Patch2
scrapePadDouglasFirWoodPlatem = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeDouglasFirWoodPlate Modes Sig
forall a. Fractional a => Modes a
C.douglasFirWoodPlateModes
scrapePadUniformWoodenBarm :: Patch2
scrapePadUniformWoodenBarm = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeUniformWoodenBar Modes Sig
forall a. Fractional a => Modes a
C.uniformWoodenBarModes
scrapePadUniformAluminumBarm :: Patch2
scrapePadUniformAluminumBarm = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeUniformAluminumBar Modes Sig
forall a. Fractional a => Modes a
C.uniformAluminumBarModes
scrapePadVibraphone1m :: Patch2
scrapePadVibraphone1m = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeVibraphone1 Modes Sig
forall a. Fractional a => Modes a
C.vibraphoneModes1
scrapePadVibraphone2m :: Patch2
scrapePadVibraphone2m = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeVibraphone2 Modes Sig
forall a. Fractional a => Modes a
C.vibraphoneModes2
scrapePadChalandiPlatesm :: Patch2
scrapePadChalandiPlatesm = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeChalandiPlates Modes Sig
forall a. Fractional a => Modes a
C.chalandiPlatesModes
scrapePadTibetanBowl152m :: Patch2
scrapePadTibetanBowl152m = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeTibetanBowl152 Modes Sig
forall a. Fractional a => Modes a
C.tibetanBowlModes152
scrapePadTibetanBowl140m :: Patch2
scrapePadTibetanBowl140m = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeTibetanBowl140 Modes Sig
forall a. Fractional a => Modes a
C.tibetanBowlModes140
scrapePadWineGlassm :: Patch2
scrapePadWineGlassm = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeWineGlass Modes Sig
forall a. Fractional a => Modes a
C.wineGlassModes
scrapePadSmallHandbellm :: Patch2
scrapePadSmallHandbellm = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeSmallHandbell Modes Sig
forall a. Fractional a => Modes a
C.smallHandbellModes
scrapePadAlbertClockBellBelfastm :: Patch2
scrapePadAlbertClockBellBelfastm = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeAlbertClockBellBelfast Modes Sig
forall a. Fractional a => Modes a
C.albertClockBellBelfastModes
scrapePadWoodBlockm :: Patch2
scrapePadWoodBlockm = Sig -> Modes Sig -> Patch2
scrapePadm Sig
scaleScrapeWoodBlock Modes Sig
forall a. Fractional a => Modes a
C.woodBlockModes


------------------------------------
-- woodwind

data Wind = Wind
  { Wind -> D
windAtt :: D
  , Wind -> D
windDec :: D
  , Wind -> D
windSus :: D
  , Wind -> D
windVib :: D
  , Wind -> D
windBright :: D }

woodWind' :: Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' Wind
spec t -> D -> D -> D -> D -> D -> D -> Sig
instr = Patch2 -> Patch2
withSmallHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ \(D
amp, D
cps) -> Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
1.3 (SE (Sig, Sig) -> SE (Sig, Sig)) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ do
    t
seed <- t -> SE t
forall a. SigOrD a => a -> SE a
rnd t
1
    D
vibDisp <- D -> SE D
forall a. SigOrD a => a -> SE a
rnd (D
0.1 D -> D -> D
forall a. Num a => a -> a -> a
* D
amp)
    let dispVib :: D -> D
dispVib D
vib = D
vib D -> D -> D
forall a. Num a => a -> a -> a
* (D
0.9 D -> D -> D
forall a. Num a => a -> a -> a
+ D
vibDisp)
    (Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> (Sig, Sig)
fromMono (Sig -> (Sig, Sig)) -> Sig -> (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.8 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
sig D
amp Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
fadeOut (Wind -> D
windDec Wind
spec)) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ t -> D -> D -> D -> D -> D -> D -> Sig
instr t
seed (D -> D
dispVib (D -> D) -> D -> D
forall a b. (a -> b) -> a -> b
$ Wind -> D
windVib Wind
spec) (Wind -> D
windAtt Wind
spec) (Wind -> D
windSus Wind
spec) (Wind -> D
windDec Wind
spec) (D
0.4 D -> D -> D
forall a. Num a => a -> a -> a
+ D
0.75 D -> D -> D
forall a. Num a => a -> a -> a
* Wind -> D
windBright Wind
spec D -> D -> D
forall a. Num a => a -> a -> a
* D
amp) D
cps

-- flute

fluteSpec :: D -> D -> Wind
fluteSpec D
bright D
vib = Wind :: D -> D -> D -> D -> D -> Wind
Wind
  { windAtt :: D
windAtt = D
0.08
  , windDec :: D
windDec = D
0.1
  , windSus :: D
windSus = D
20
  , windVib :: D
windVib = D
vib
  , windBright :: D
windBright = D
bright }

shortFluteSpec :: D -> D -> Wind
shortFluteSpec D
bright D
vib = Wind :: D -> D -> D -> D -> D -> Wind
Wind
  { windAtt :: D
windAtt = D
0.03
  , windDec :: D
windDec = D
0.05
  , windSus :: D
windSus = D
20
  , windVib :: D
windVib = D
vib
  , windBright :: D
windBright = D
bright }

flute :: Patch2
flute = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
fluteSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.flute
  where
    br :: D
br = D
0.7
    vib :: D
vib = D
0.015

shortFlute :: Patch2
shortFlute = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
shortFluteSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.flute
  where
    br :: D
br = D
0.7
    vib :: D
vib = D
0.015

fluteVibrato :: Patch2
fluteVibrato = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
fluteSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.flute
  where
    br :: D
br = D
0.7
    vib :: D
vib = D
0.04

mutedFlute :: Patch2
mutedFlute = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
fluteSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.flute
  where
    br :: D
br = D
0.25
    vib :: D
vib = D
0.015

brightFlute :: Patch2
brightFlute = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
fluteSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.flute
  where
    br :: D
br = D
1.2
    vib :: D
vib = D
0.015

-- bass clarinet

bassClarinetSpec :: D -> D -> Wind
bassClarinetSpec D
bright D
vib = Wind :: D -> D -> D -> D -> D -> Wind
Wind
  { windAtt :: D
windAtt = D
0.06
  , windDec :: D
windDec = D
0.15
  , windSus :: D
windSus = D
20
  , windVib :: D
windVib = D
vib
  , windBright :: D
windBright = D
bright }

shortBassClarinetSpec :: D -> D -> Wind
shortBassClarinetSpec D
bright D
vib = Wind :: D -> D -> D -> D -> D -> Wind
Wind
  { windAtt :: D
windAtt = D
0.03
  , windDec :: D
windDec = D
0.04
  , windSus :: D
windSus = D
20
  , windVib :: D
windVib = D
vib
  , windBright :: D
windBright = D
bright }

bassClarinet :: Patch2
bassClarinet = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
bassClarinetSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.bassClarinet
  where
    br :: D
br = D
0.7
    vib :: D
vib = D
0.01

shortBassClarinet :: Patch2
shortBassClarinet = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
shortBassClarinetSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.bassClarinet
  where
    br :: D
br = D
0.7
    vib :: D
vib = D
0.01

bassClarinetVibrato :: Patch2
bassClarinetVibrato = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
bassClarinetSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.bassClarinet
  where
    br :: D
br = D
0.7
    vib :: D
vib = D
0.035

mutedBassClarinet :: Patch2
mutedBassClarinet = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
bassClarinetSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.bassClarinet
  where
    br :: D
br = D
0.25
    vib :: D
vib = D
0.01

brightBassClarinet :: Patch2
brightBassClarinet = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
bassClarinetSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.bassClarinet
  where
    br :: D
br = D
1.2
    vib :: D
vib = D
0.01

-- french horn

frenchHornSpec :: D -> D -> Wind
frenchHornSpec D
bright D
vib = Wind :: D -> D -> D -> D -> D -> Wind
Wind
  { windAtt :: D
windAtt = D
0.08
  , windDec :: D
windDec = D
0.25
  , windSus :: D
windSus = D
20
  , windVib :: D
windVib = D
vib
  , windBright :: D
windBright = D
bright }

shortFrenchHornSpec :: D -> D -> Wind
shortFrenchHornSpec D
bright D
vib = Wind :: D -> D -> D -> D -> D -> Wind
Wind
  { windAtt :: D
windAtt = D
0.03
  , windDec :: D
windDec = D
0.04
  , windSus :: D
windSus = D
20
  , windVib :: D
windVib = D
vib
  , windBright :: D
windBright = D
bright }

frenchHorn :: Patch2
frenchHorn = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
frenchHornSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.frenchHorn
  where
    br :: D
br = D
0.7
    vib :: D
vib = D
0.01

shortFrenchHorn :: Patch2
shortFrenchHorn = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
shortFrenchHornSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.frenchHorn
  where
    br :: D
br = D
0.7
    vib :: D
vib = D
0.01

frenchHornVibrato :: Patch2
frenchHornVibrato = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
frenchHornSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.frenchHorn
  where
    br :: D
br = D
0.7
    vib :: D
vib = D
0.035

mutedFrenchHorn :: Patch2
mutedFrenchHorn = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
frenchHornSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.frenchHorn
  where
    br :: D
br = D
0.25
    vib :: D
vib = D
0.01

brightFrenchHorn :: Patch2
brightFrenchHorn = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
frenchHornSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.frenchHorn
  where
    br :: D
br = D
1.2
    vib :: D
vib = D
0.01

-- sheng

shengSpec :: D -> D -> Wind
shengSpec D
bright D
vib = Wind :: D -> D -> D -> D -> D -> Wind
Wind
  { windAtt :: D
windAtt = D
0.1
  , windDec :: D
windDec = D
0.2
  , windSus :: D
windSus = D
20
  , windVib :: D
windVib = D
vib
  , windBright :: D
windBright = D
bright }

shortShengSpec :: D -> D -> Wind
shortShengSpec D
bright D
vib = Wind :: D -> D -> D -> D -> D -> Wind
Wind
  { windAtt :: D
windAtt = D
0.03
  , windDec :: D
windDec = D
0.04
  , windSus :: D
windSus = D
20
  , windVib :: D
windVib = D
vib
  , windBright :: D
windBright = D
bright }

sheng :: Patch2
sheng = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
shengSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.sheng
  where
    br :: D
br = D
0.7
    vib :: D
vib = D
0.01

shortSheng :: Patch2
shortSheng = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
shortShengSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.sheng
  where
    br :: D
br = D
0.7
    vib :: D
vib = D
0.01

shengVibrato :: Patch2
shengVibrato = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
shengSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.sheng
  where
    br :: D
br = D
0.7
    vib :: D
vib = D
0.025

mutedSheng :: Patch2
mutedSheng = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
shengSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.sheng
  where
    br :: D
br = D
0.25
    vib :: D
vib = D
0.01

brightSheng :: Patch2
brightSheng = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
shortShengSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.sheng
  where
    br :: D
br = D
1.2
    vib :: D
vib = D
0.01

-- hulusi

hulusiSpec :: D -> D -> Wind
hulusiSpec D
bright D
vib = Wind :: D -> D -> D -> D -> D -> Wind
Wind
  { windAtt :: D
windAtt = D
0.12
  , windDec :: D
windDec = D
0.14
  , windSus :: D
windSus = D
20
  , windVib :: D
windVib = D
vib
  , windBright :: D
windBright = D
bright }

shortHulusiSpec :: D -> D -> Wind
shortHulusiSpec D
bright D
vib = Wind :: D -> D -> D -> D -> D -> Wind
Wind
  { windAtt :: D
windAtt = D
0.03
  , windDec :: D
windDec = D
0.04
  , windSus :: D
windSus = D
20
  , windVib :: D
windVib = D
vib
  , windBright :: D
windBright = D
bright }

hulusi :: Patch2
hulusi = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
hulusiSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.hulusi
  where
    br :: D
br = D
0.7
    vib :: D
vib = D
0.015

shortHulusi :: Patch2
shortHulusi = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
shortHulusiSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.hulusi
  where
    br :: D
br = D
0.7
    vib :: D
vib = D
0.015

hulusiVibrato :: Patch2
hulusiVibrato = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
hulusiSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.hulusi
  where
    br :: D
br = D
0.7
    vib :: D
vib = D
0.035

mutedHulusi :: Patch2
mutedHulusi = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
hulusiSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.hulusi
  where
    br :: D
br = D
0.25
    vib :: D
vib = D
0.015

brightHulusi :: Patch2
brightHulusi = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
shortHulusiSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.hulusi
  where
    br :: D
br = D
1.2
    vib :: D
vib = D
0.015


-- dizi

diziSpec :: D -> D -> Wind
diziSpec D
bright D
vib = Wind :: D -> D -> D -> D -> D -> Wind
Wind
  { windAtt :: D
windAtt = D
0.03
  , windDec :: D
windDec = D
0.2
  , windSus :: D
windSus = D
20
  , windVib :: D
windVib = D
vib
  , windBright :: D
windBright = D
bright }

shortDiziSpec :: D -> D -> Wind
shortDiziSpec D
bright D
vib = Wind :: D -> D -> D -> D -> D -> Wind
Wind
  { windAtt :: D
windAtt = D
0.1
  , windDec :: D
windDec = D
0.04
  , windSus :: D
windSus = D
20
  , windVib :: D
windVib = D
vib
  , windBright :: D
windBright = D
bright }

dizi :: Patch2
dizi = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
diziSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.dizi
  where
    br :: D
br = D
0.7
    vib :: D
vib = D
0.01

shortDizi :: Patch2
shortDizi = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
shortDiziSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.dizi
  where
    br :: D
br = D
0.7
    vib :: D
vib = D
0.01

diziVibrato :: Patch2
diziVibrato = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
diziSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.dizi
  where
    br :: D
br = D
0.7
    vib :: D
vib = D
0.035

mutedDizi :: Patch2
mutedDizi = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
diziSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.dizi
  where
    br :: D
br = D
0.25
    vib :: D
vib = D
0.01

brightDizi :: Patch2
brightDizi = Wind -> (D -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
forall t.
SigOrD t =>
Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch2
woodWind' (D -> D -> Wind
shortDiziSpec D
br D
vib) D -> D -> D -> D -> D -> D -> D -> Sig
C.dizi
  where
    br :: D
br = D
1.2
    vib :: D
vib = D
0.01

------------------------------------
-- x-rays

pulseWidth :: Patch2
pulseWidth = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.15 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.75 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.6) (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> Sig
fades D
0.07 D
0.1)(SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Sig, Sig) -> Sig)
-> CsdNote D -> SE (CpsInstrOut ((Sig, Sig) -> Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps ((Sig -> Sig -> Sig) -> (Sig, Sig) -> Sig
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Sig -> Sig -> Sig
C.pulseWidth)

xanadu :: Patch2
xanadu = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.27 (Sig, Sig) -> (Sig, Sig)
largeHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul (Sig
1.2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.6) (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> Sig
fades D
0.01 D
2.2)(SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (D -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps D -> SE Sig
C.xanadu1

alienIsAngry :: Patch2
alienIsAngry = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.15 (Sig, Sig) -> (Sig, Sig)
smallRoom2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.01 D
2.3)(SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (D -> Sig -> Sig
C.fmMod D
5)

noiz :: Patch2
noiz = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.15 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
1.5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.01 D
0.5)(SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps Sig -> SE Sig
C.noiz

blue :: Patch2
blue = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.25 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
1.5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.01 D
0.5)(SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (D -> D -> D -> Sig -> Sig -> SE Sig
C.blue D
5 D
7 D
0.24 Sig
12)

black :: Patch2
black = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.25 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.01 D
0.5)(SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (D -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (\D
cps -> D -> D -> D -> Sig -> Sig -> SE Sig
C.black D
3 (D
cps D -> D -> D
forall a. Fractional a => a -> a -> a
/ D
2) (D
cps D -> D -> D
forall a. Num a => a -> a -> a
* D
2) Sig
12 (D -> Sig
sig D
cps))

simpleMarimba :: Patch2
simpleMarimba = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.25 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.8 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.01 D
0.5)(SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (D -> Sig -> Sig
C.simpleMarimba D
5)

impulseMarimba1 :: Patch2
impulseMarimba1 = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.3 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.8 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
fadeOut D
0.75)(SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps Sig -> Sig
C.impulseMarimba1

impulseMarimba2 :: Patch2
impulseMarimba2 = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.3 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.8 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
fadeOut D
0.75)(SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps Sig -> Sig
C.impulseMarimba2

okComputer :: Patch2
okComputer = (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D (Sig, Sig)) -> Patch2)
-> (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter (D
amp, D
cps) -> ((Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig))
-> (Sig -> SE Sig) -> Sig -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.75 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
sig D
amp Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.01 D
0.01) (SE Sig -> SE Sig) -> (Sig -> SE Sig) -> Sig -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> SE Sig -> AtOut Sig Sig (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (ResonFilter
filter (Sig
1500 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ D -> Sig
sig D
amp Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
8500) Sig
0.1) (SE Sig -> SE Sig) -> (Sig -> SE Sig) -> Sig -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig
C.okComputer (Sig -> SE Sig) -> (Sig -> Sig) -> Sig -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
25))) (D -> Sig
sig D
cps)

snowCrackle :: Patch2
snowCrackle = Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ \(D
amp, D
cps) -> ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> (Sig -> (Sig, Sig)) -> Sig -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> (Sig, Sig)
fromMono (Sig -> (Sig, Sig)) -> (Sig -> Sig) -> Sig -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.8 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> Sig
sig D
amp Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.001 D
0.001) (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig
C.snowCrackle (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
25))) (D -> Sig
sig D
cps)

noiseBell :: Patch2
noiseBell = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.25 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.75 (SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (CsdNote D -> D -> Sig -> Sig -> SE Sig
C.noiseBell (D
31, D
125) D
2.3 Sig
0.2 (Sig -> SE Sig) -> (Sig -> Sig) -> Sig -> SE Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ( Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
8))

------------------------------------
-- vowels

robotVowels :: [(Vowel, D)] -> Vowel -> Patch2
robotVowels [(Vowel, D)]
vows Vowel
latVow = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.15 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
1.1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.1 D
0.1)(SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (D -> [(Vowel, D)] -> Vowel -> Sig -> Sig
C.vowels D
25 [(Vowel, D)]
vows Vowel
latVow)

robotLoopVowels :: Sig -> [(Vowel, D)] -> Patch2
robotLoopVowels Sig
loopDur [(Vowel, D)]
vows = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.15 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
1.1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.1 D
0.1)(SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (D -> Sig -> [(Vowel, D)] -> Sig -> Sig
C.loopVowels D
25 Sig
loopDur [(Vowel, D)]
vows)

robotVowel :: Vowel -> Patch2
robotVowel Vowel
vow = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.15 (Sig, Sig) -> (Sig, Sig)
smallHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
1.1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.1 D
0.1)(SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (D -> Vowel -> Sig -> Sig
C.oneVowel D
25 Vowel
vow)

------------------------------------
-- nature / effects

windWall :: Patch2
windWall = Patch2 -> Patch2
withLargeHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
1.25 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.1 D
5)(SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps Sig -> SE Sig
C.windWall

mildWind :: Patch2
mildWind = Patch2 -> Patch2
withLargeHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
1.25 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.1 D
1.5)(SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps Sig -> SE Sig
C.mildWind

wind :: Patch2
wind = Patch2 -> Patch2
withLargeHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> SE Sig -> SE Sig
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.8 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.1 D
1.5)(SE Sig -> SE Sig) -> Instr D Sig -> Instr D Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (Sig -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (\Sig
cps -> Sig -> Sig -> (Sig, Sig) -> SE Sig
C.thorWind (Sig
cps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
2) Sig
150 (Sig
0.3, Sig
1))

------------------------------------
-- drums

------------------------------------
-- SHARC patches

-- | Solo instrument.
soloSharc :: SharcInstr -> Patch2
soloSharc :: SharcInstr -> Patch2
soloSharc SharcInstr
instr = Patch2 -> Patch2
withSmallHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> SE (Sig, Sig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (D -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (SharcInstr -> D -> SE Sig
C.soloSharcOsc SharcInstr
instr)

-- | Instrumet played in ensemble (with chorus).
orcSharc :: SharcInstr -> Patch2
orcSharc :: SharcInstr -> Patch2
orcSharc SharcInstr
instr = Patch2 -> Patch2
withLargeHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> SE (Sig, Sig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (D -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (SharcInstr -> D -> SE Sig
C.orcSharcOsc SharcInstr
instr)

-- | Pad orchestra instrument.
padSharc :: SharcInstr -> Patch2
padSharc :: SharcInstr -> Patch2
padSharc SharcInstr
instr = Patch2 -> Patch2
withLargeHall (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> SE (Sig, Sig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (D -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (SharcInstr -> D -> SE Sig
C.padSharcOsc SharcInstr
instr)

-- | Pad solo instrument.`
purePadSharc :: SharcInstr -> Patch2
purePadSharc :: SharcInstr -> Patch2
purePadSharc SharcInstr
instr = Sig -> ((Sig, Sig) -> (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> a) -> Patch a -> Patch a
fx1 Sig
0.35 (Sig, Sig) -> (Sig, Sig)
largeHall2 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> (Sig, Sig)) -> SE Sig -> SE (Sig, Sig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig -> (Sig, Sig)
fromMono (SE Sig -> SE (Sig, Sig)) -> Instr D Sig -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D -> SE Sig) -> CsdNote D -> SE (CpsInstrOut (D -> SE Sig))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (SharcInstr -> D -> SE Sig
C.purePadSharcOsc SharcInstr
instr)

-- | Dream Pad patch made with SHARC oscillators.
dreamSharc :: SharcInstr -> Patch2
dreamSharc :: SharcInstr -> Patch2
dreamSharc SharcInstr
instr = Sig -> (D -> Sig -> SE Sig) -> Patch2
dreamPadWithKey Sig
0.35 (SharcInstr -> D -> Sig -> SE Sig
C.rndSigSharcOsc SharcInstr
instr)

-- | Dream Pad patch made with SHARC oscillators.
lightIsTooBrightSharc :: SharcInstr -> Patch2
lightIsTooBrightSharc :: SharcInstr -> Patch2
lightIsTooBrightSharc SharcInstr
instr = Sig -> (D -> Sig -> SE Sig) -> Patch2
lightIsTooBrightPadWithKey Sig
0.6 (SharcInstr -> D -> Sig -> SE Sig
C.rndSigSharcOsc SharcInstr
instr)

-- | Dream Pad patch made with SHARC oscillators.
whaleSongSharc :: SharcInstr -> Patch2
whaleSongSharc :: SharcInstr -> Patch2
whaleSongSharc SharcInstr
instr = Sig -> (D -> Sig -> SE Sig) -> Patch2
whaleSongPadWithKey Sig
0.4 (SharcInstr -> D -> Sig -> SE Sig
C.rndSigSharcOsc SharcInstr
instr)

sharcOrgan :: SharcInstr -> Patch2
sharcOrgan :: SharcInstr -> Patch2
sharcOrgan SharcInstr
instr = (D -> Sig -> SE Sig) -> Patch2
waveOrganWithKey (SharcInstr -> D -> Sig -> SE Sig
C.rndSigSharcOsc SharcInstr
instr)

type PadsynthBandwidth = Double

-- | Padsynth instrument with organ-like amplitude envelope.
psOrganSharc :: SharcInstr -> Patch2
psOrganSharc :: SharcInstr -> Patch2
psOrganSharc = PadSharcSpec -> SharcInstr -> Patch2
psOrganSharc' PadSharcSpec
forall a. Default a => a
def

hiDef :: PadSharcSpec
hiDef = PadSharcSpec
forall a. Default a => a
def { padSharcSize :: Int
padSharcSize = Int
35 }

-- | High resolution Padsynth instrument with organ-like amplitude envelope.
psOrganSharcHifi :: SharcInstr -> Patch2
psOrganSharcHifi :: SharcInstr -> Patch2
psOrganSharcHifi = PadSharcSpec -> SharcInstr -> Patch2
psOrganSharc' PadSharcSpec
hiDef

-- | Padsynth instrument with organ-like amplitude envelope. We can specify aux parameters.
psOrganSharc' :: PadSharcSpec -> SharcInstr -> Patch2
psOrganSharc' :: PadSharcSpec -> SharcInstr -> Patch2
psOrganSharc' PadSharcSpec
spec SharcInstr
sh = Patch2 -> Patch2
fxs (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.01 D
0.1) (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D -> SE (Sig, Sig))
-> CsdNote D -> SE (CpsInstrOut (D -> SE (Sig, Sig)))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
C.padsynthSharcOsc2' PadSharcSpec
spec SharcInstr
sh)
    where fxs :: Patch2 -> Patch2
fxs = [GenFxSpec (Sig, Sig)] -> Patch2 -> Patch2
forall a. [GenFxSpec a] -> Patch a -> Patch a
FxChain [Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
0.25 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> (Sig, Sig)
smallHall2), Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
1 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig))
-> (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
1.4 (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig
saturator Sig
0.75))]

-- | Padsynth instrument with organ-like amplitude envelope and huge reverb.
psLargeOrganSharc :: SharcInstr -> Patch2
psLargeOrganSharc :: SharcInstr -> Patch2
psLargeOrganSharc = PadSharcSpec -> SharcInstr -> Patch2
psLargeOrganSharc' PadSharcSpec
forall a. Default a => a
def

-- | High resolution Padsynth instrument with organ-like amplitude envelope and huge reverb.
psLargeOrganSharcHifi :: SharcInstr -> Patch2
psLargeOrganSharcHifi :: SharcInstr -> Patch2
psLargeOrganSharcHifi = PadSharcSpec -> SharcInstr -> Patch2
psLargeOrganSharc' PadSharcSpec
hiDef

-- | Padsynth instrument with organ-like amplitude envelope and huge reverb.
psLargeOrganSharc' :: PadSharcSpec -> SharcInstr -> Patch2
psLargeOrganSharc' :: PadSharcSpec -> SharcInstr -> Patch2
psLargeOrganSharc' PadSharcSpec
spec SharcInstr
sh = Patch2 -> Patch2
fxs (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.65 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.01 D
0.1) (SE (Sig, Sig) -> SE (Sig, Sig))
-> Instr D (Sig, Sig) -> Instr D (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D -> SE (Sig, Sig))
-> CsdNote D -> SE (CpsInstrOut (D -> SE (Sig, Sig)))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
C.padsynthSharcOsc2' PadSharcSpec
spec SharcInstr
sh)
    where fxs :: Patch2 -> Patch2
fxs = [GenFxSpec (Sig, Sig)] -> Patch2 -> Patch2
forall a. [GenFxSpec a] -> Patch a -> Patch a
FxChain [Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
0.35 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> (Sig, Sig)
largeHall2), Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
1 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig))
-> (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
1.4 (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig
saturator Sig
0.75))]

-- | Padsynth instrument with piano-like amplitude envelope.
psPianoSharc :: ReleaseTime -> SharcInstr -> Patch2
psPianoSharc :: D -> SharcInstr -> Patch2
psPianoSharc = PadSharcSpec -> D -> SharcInstr -> Patch2
psPianoSharc' PadSharcSpec
forall a. Default a => a
def

-- | High resolution Padsynth instrument with piano-like amplitude envelope.
psPianoSharcHifi :: ReleaseTime -> SharcInstr -> Patch2
psPianoSharcHifi :: D -> SharcInstr -> Patch2
psPianoSharcHifi = PadSharcSpec -> D -> SharcInstr -> Patch2
psPianoSharc' PadSharcSpec
hiDef

-- | Padsynth instrument with piano-like amplitude envelope. We can specify aux parameters.
psPianoSharc' :: PadSharcSpec -> ReleaseTime -> SharcInstr -> Patch2
psPianoSharc' :: PadSharcSpec -> D -> SharcInstr -> Patch2
psPianoSharc' PadSharcSpec
spec D
releaseTime SharcInstr
sh = Patch2 -> Patch2
fxs (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ \CsdNote D
ampCps -> Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.75 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> CsdNote D -> Sig
C.pianoEnv D
releaseTime CsdNote D
ampCps) (SE (Sig, Sig) -> SE (Sig, Sig)) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ (D -> SE (Sig, Sig))
-> CsdNote D -> SE (CpsInstrOut (D -> SE (Sig, Sig)))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
C.padsynthSharcOsc2' PadSharcSpec
spec SharcInstr
sh) CsdNote D
ampCps
    where fxs :: Patch2 -> Patch2
fxs = [GenFxSpec (Sig, Sig)] -> Patch2 -> Patch2
forall a. [GenFxSpec a] -> Patch a -> Patch a
FxChain [Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
0.15 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> (Sig, Sig)
smallHall2), Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
1 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig))
-> (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
1.4 (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig
saturator Sig
0.75))]

-- | Padsynth instrument with piano-like amplitude envelope.
xpsPianoSharc :: ReleaseTime -> SharcInstr -> Patch2
xpsPianoSharc :: D -> SharcInstr -> Patch2
xpsPianoSharc = PadSharcSpec -> D -> SharcInstr -> Patch2
xpsPianoSharc' PadSharcSpec
forall a. Default a => a
def

-- | High resolution Padsynth instrument with piano-like amplitude envelope.
xpsPianoSharcHifi :: ReleaseTime -> SharcInstr -> Patch2
xpsPianoSharcHifi :: D -> SharcInstr -> Patch2
xpsPianoSharcHifi = PadSharcSpec -> D -> SharcInstr -> Patch2
xpsPianoSharc' PadSharcSpec
hiDef

-- | Padsynth instrument with piano-like amplitude envelope. We can specify aux parameters.
xpsPianoSharc' :: PadSharcSpec -> ReleaseTime -> SharcInstr -> Patch2
xpsPianoSharc' :: PadSharcSpec -> D -> SharcInstr -> Patch2
xpsPianoSharc' PadSharcSpec
spec D
releaseTime SharcInstr
sh = Sig -> Patch2 -> Patch2
addHammer Sig
0.12 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Patch2 -> Patch2
fxs (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ \CsdNote D
ampCps -> Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.75 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> CsdNote D -> Sig
C.xpianoEnv D
releaseTime CsdNote D
ampCps) (SE (Sig, Sig) -> SE (Sig, Sig)) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ (D -> SE (Sig, Sig))
-> CsdNote D -> SE (CpsInstrOut (D -> SE (Sig, Sig)))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
C.padsynthSharcOsc2' PadSharcSpec
spec SharcInstr
sh) CsdNote D
ampCps
    where fxs :: Patch2 -> Patch2
fxs = [GenFxSpec (Sig, Sig)] -> Patch2 -> Patch2
forall a. [GenFxSpec a] -> Patch a -> Patch a
FxChain [Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
0.15 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> (Sig, Sig)
smallHall2), Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
1 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig))
-> (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
1.4 (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig
saturator Sig
0.75))]

-- | Padsynth instrument with piano-like amplitude envelope.
psLargePianoSharc :: ReleaseTime -> SharcInstr -> Patch2
psLargePianoSharc :: D -> SharcInstr -> Patch2
psLargePianoSharc = PadSharcSpec -> D -> SharcInstr -> Patch2
psLargePianoSharc' PadSharcSpec
forall a. Default a => a
def

-- | High resolution Padsynth instrument with piano-like amplitude envelope.
psLargePianoSharcHifi :: ReleaseTime -> SharcInstr -> Patch2
psLargePianoSharcHifi :: D -> SharcInstr -> Patch2
psLargePianoSharcHifi = PadSharcSpec -> D -> SharcInstr -> Patch2
psLargePianoSharc' PadSharcSpec
hiDef

-- | Padsynth instrument with piano-like amplitude envelope. We can specify aux parameters.
psLargePianoSharc' :: PadSharcSpec -> ReleaseTime -> SharcInstr -> Patch2
psLargePianoSharc' :: PadSharcSpec -> D -> SharcInstr -> Patch2
psLargePianoSharc' PadSharcSpec
spec D
releaseTime SharcInstr
sh = Patch2 -> Patch2
fxs (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ \CsdNote D
ampCps -> Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.75 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> CsdNote D -> Sig
C.pianoEnv D
releaseTime CsdNote D
ampCps) (SE (Sig, Sig) -> SE (Sig, Sig)) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ (D -> SE (Sig, Sig))
-> CsdNote D -> SE (CpsInstrOut (D -> SE (Sig, Sig)))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
C.padsynthSharcOsc2' PadSharcSpec
spec SharcInstr
sh) CsdNote D
ampCps
    where fxs :: Patch2 -> Patch2
fxs = [GenFxSpec (Sig, Sig)] -> Patch2 -> Patch2
forall a. [GenFxSpec a] -> Patch a -> Patch a
FxChain [Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
0.15 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> (Sig, Sig)
largeHall2), Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
1 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig))
-> (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
1.4 (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig
saturator Sig
0.75))]

-- | Padsynth instrument with piano-like amplitude envelope.
xpsLargePianoSharc :: ReleaseTime -> SharcInstr -> Patch2
xpsLargePianoSharc :: D -> SharcInstr -> Patch2
xpsLargePianoSharc = PadSharcSpec -> D -> SharcInstr -> Patch2
xpsLargePianoSharc' PadSharcSpec
forall a. Default a => a
def

-- | High resolution Padsynth instrument with piano-like amplitude envelope.
xpsLargePianoSharcHifi :: ReleaseTime -> SharcInstr -> Patch2
xpsLargePianoSharcHifi :: D -> SharcInstr -> Patch2
xpsLargePianoSharcHifi = PadSharcSpec -> D -> SharcInstr -> Patch2
xpsLargePianoSharc' PadSharcSpec
hiDef

-- | Padsynth instrument with piano-like amplitude envelope. We can specify aux parameters.
xpsLargePianoSharc' :: PadSharcSpec -> ReleaseTime -> SharcInstr -> Patch2
xpsLargePianoSharc' :: PadSharcSpec -> D -> SharcInstr -> Patch2
xpsLargePianoSharc' PadSharcSpec
spec D
releaseTime SharcInstr
sh = Patch2 -> Patch2
fxs (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ \CsdNote D
ampCps -> Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul (Sig
0.75 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> CsdNote D -> Sig
C.xpianoEnv D
releaseTime CsdNote D
ampCps) (SE (Sig, Sig) -> SE (Sig, Sig)) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ (D -> SE (Sig, Sig))
-> CsdNote D -> SE (CpsInstrOut (D -> SE (Sig, Sig)))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
C.padsynthSharcOsc2' PadSharcSpec
spec SharcInstr
sh) CsdNote D
ampCps
    where fxs :: Patch2 -> Patch2
fxs = [GenFxSpec (Sig, Sig)] -> Patch2 -> Patch2
forall a. [GenFxSpec a] -> Patch a -> Patch a
FxChain [Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
0.15 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> (Sig, Sig)
largeHall2), Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
1 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig))
-> (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
1.4 (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig
saturator Sig
0.75))]

psPadFilterBy :: Sig -> Sig -> (Sig -> Sig -> Sig -> Sig) -> (D, D) -> Sig -> Sig
psPadFilterBy :: Sig -> Sig -> ResonFilter -> CsdNote D -> Sig -> Sig
psPadFilterBy Sig
rippleLevel Sig
q ResonFilter
resonFilter CsdNote D
ampCps = ResonFilter
resonFilter (Sig
0.3 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ CsdNote D -> D
forall a b. (a, b) -> b
snd CsdNote D
ampCps) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
2500 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
2000 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.15 (D
0.6 D -> D -> D
forall a. Num a => a -> a -> a
+ CsdNote D -> D
forall a. Fractional a => (a, a) -> a
rel CsdNote D
ampCps) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
rippleLevel Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
slope D
0.75 D
0.5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
osc Sig
8) Sig
q
  where rel :: (a, a) -> a
rel (a
amp, a
cps) = a
amp a -> a -> a
forall a. Num a => a -> a -> a
- a
cps a -> a -> a
forall a. Fractional a => a -> a -> a
/ a
3500

psPadFilter :: ResonFilter -> CsdNote D -> Sig -> Sig
psPadFilter ResonFilter
filter = Sig -> Sig -> ResonFilter -> CsdNote D -> Sig -> Sig
psPadFilterBy Sig
75 Sig
15 ResonFilter
filter
psSoftPadFilter :: ResonFilter -> CsdNote D -> Sig -> Sig
psSoftPadFilter ResonFilter
filter = Sig -> Sig -> ResonFilter -> CsdNote D -> Sig -> Sig
psPadFilterBy Sig
350 Sig
0.15 ResonFilter
filter

deepOsc :: (Num a, SigSpace a) => (D -> a) -> (D -> a)
deepOsc :: (D -> a) -> D -> a
deepOsc D -> a
f D
x = Sig -> a -> a
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.5 (D -> a
f D
x a -> a -> a
forall a. Num a => a -> a -> a
+ D -> a
f (D
x D -> D -> D
forall a. Fractional a => a -> a -> a
/ D
2))

psOsc :: PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
psOsc PadSharcSpec
spec SharcInstr
sh D
x = PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
C.padsynthSharcOsc2' PadSharcSpec
spec SharcInstr
sh D
x
psDeepOsc :: PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
psDeepOsc PadSharcSpec
spec SharcInstr
sh = (D -> SE (Sig, Sig)) -> D -> SE (Sig, Sig)
forall a. (Num a, SigSpace a) => (D -> a) -> D -> a
deepOsc (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
C.padsynthSharcOsc2' PadSharcSpec
spec SharcInstr
sh)

psOscCfd :: Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> D
-> SE (Sig, Sig)
psOscCfd Sig
koeff (PadSharcSpec
spec1, SharcInstr
sh1) (PadSharcSpec
spec2, SharcInstr
sh2) D
x = Sig -> SE (Sig, Sig) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. (Num a, SigSpace a) => Sig -> a -> a -> a
cfd Sig
koeff (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
C.padsynthSharcOsc2' PadSharcSpec
spec1 SharcInstr
sh1 D
x) (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
C.padsynthSharcOsc2' PadSharcSpec
spec2 SharcInstr
sh2 D
x)
psOscCfd4 :: Sig
-> Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> D
-> SE (Sig, Sig)
psOscCfd4 Sig
koeffX Sig
koeffY (PadSharcSpec
spec1, SharcInstr
sh1) (PadSharcSpec
spec2, SharcInstr
sh2) (PadSharcSpec
spec3, SharcInstr
sh3) (PadSharcSpec
spec4, SharcInstr
sh4) D
x = Sig
-> Sig
-> SE (Sig, Sig)
-> SE (Sig, Sig)
-> SE (Sig, Sig)
-> SE (Sig, Sig)
-> SE (Sig, Sig)
forall a.
(Num a, SigSpace a) =>
Sig -> Sig -> a -> a -> a -> a -> a
cfd4 Sig
koeffX Sig
koeffY (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
C.padsynthSharcOsc2' PadSharcSpec
spec1 SharcInstr
sh1 D
x) (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
C.padsynthSharcOsc2' PadSharcSpec
spec2 SharcInstr
sh2 D
x) (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
C.padsynthSharcOsc2' PadSharcSpec
spec3 SharcInstr
sh3 D
x) (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
C.padsynthSharcOsc2' PadSharcSpec
spec4 SharcInstr
sh4 D
x)

psDeepOscCfd :: Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> D
-> SE (Sig, Sig)
psDeepOscCfd Sig
koeff (PadSharcSpec
spec1, SharcInstr
sh1) (PadSharcSpec
spec2, SharcInstr
sh2) = (D -> SE (Sig, Sig)) -> D -> SE (Sig, Sig)
forall a. (Num a, SigSpace a) => (D -> a) -> D -> a
deepOsc (Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> D
-> SE (Sig, Sig)
psOscCfd Sig
koeff (PadSharcSpec
spec1, SharcInstr
sh1) (PadSharcSpec
spec2, SharcInstr
sh2))
psDeepOscCfd4 :: Sig
-> Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> D
-> SE (Sig, Sig)
psDeepOscCfd4 Sig
koeffX Sig
koeffY (PadSharcSpec
spec1, SharcInstr
sh1) (PadSharcSpec
spec2, SharcInstr
sh2) (PadSharcSpec
spec3, SharcInstr
sh3) (PadSharcSpec
spec4, SharcInstr
sh4) = (D -> SE (Sig, Sig)) -> D -> SE (Sig, Sig)
forall a. (Num a, SigSpace a) => (D -> a) -> D -> a
deepOsc (Sig
-> Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> D
-> SE (Sig, Sig)
psOscCfd4 Sig
koeffX Sig
koeffY (PadSharcSpec
spec1, SharcInstr
sh1) (PadSharcSpec
spec2, SharcInstr
sh2) (PadSharcSpec
spec3, SharcInstr
sh3) (PadSharcSpec
spec4, SharcInstr
sh4))

genPsPad :: (Sig2 -> Sig2) -> (ResonFilter -> (D, D) -> Sig -> Sig) -> (D -> SE Sig2) -> Patch2
genPsPad :: ((Sig, Sig) -> (Sig, Sig))
-> (ResonFilter -> CsdNote D -> Sig -> Sig)
-> (D -> SE (Sig, Sig))
-> Patch2
genPsPad (Sig, Sig) -> (Sig, Sig)
effect ResonFilter -> CsdNote D -> Sig -> Sig
mkFilter D -> SE (Sig, Sig)
wave =
  Patch2 -> Patch2
fxs (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a. (ResonFilter -> Instr D a) -> Patch a
polySyntFilter ((ResonFilter -> Instr D (Sig, Sig)) -> Patch2)
-> (ResonFilter -> Instr D (Sig, Sig)) -> Patch2
forall a b. (a -> b) -> a -> b
$ \ResonFilter
filter CsdNote D
ampCps -> Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul (Sig
1.2 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* D -> D -> Sig
fades D
0.5 (D
0.6 D -> D -> D
forall a. Num a => a -> a -> a
+ CsdNote D -> D
forall a. Fractional a => (a, a) -> a
rel CsdNote D
ampCps)) (SE (Sig, Sig) -> SE (Sig, Sig)) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ (D -> SE (Sig, Sig))
-> CsdNote D -> SE (CpsInstrOut (D -> SE (Sig, Sig)))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps ((Sig -> Sig) -> SE (Sig, Sig) -> AtOut Sig Sig (SE (Sig, Sig))
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (ResonFilter -> CsdNote D -> Sig -> Sig
mkFilter ResonFilter
filter CsdNote D
ampCps) (SE (Sig, Sig) -> SE (Sig, Sig))
-> (D -> SE (Sig, Sig)) -> D -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> SE (Sig, Sig)
wave) CsdNote D
ampCps
  where
        fxs :: Patch2 -> Patch2
fxs = [GenFxSpec (Sig, Sig)] -> Patch2 -> Patch2
forall a. [GenFxSpec a] -> Patch a -> Patch a
FxChain [Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
0.25 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> (Sig, Sig)
effect), Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
0.5 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig))
-> (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
forall a. SigSpace a => Sig -> a -> a
mul Sig
2.1 (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig
saturator Sig
0.75)), Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
0.3 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig))
-> (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ D -> Sig -> Sig -> Sig
echo D
0.125 Sig
0.65))]
        rel :: (a, a) -> a
rel (a
amp, a
cps) = a
amp a -> a -> a
forall a. Num a => a -> a -> a
- a
cps a -> a -> a
forall a. Fractional a => a -> a -> a
/ a
3500

-- | Padsynth instrument with pad-like amplitude envelope.
psPadSharc :: SharcInstr -> Patch2
psPadSharc :: SharcInstr -> Patch2
psPadSharc = PadSharcSpec -> SharcInstr -> Patch2
psPadSharc' PadSharcSpec
forall a. Default a => a
def

-- | High resolution Padsynth instrument with pad-like amplitude envelope.
psPadSharcHifi :: SharcInstr -> Patch2
psPadSharcHifi :: SharcInstr -> Patch2
psPadSharcHifi = PadSharcSpec -> SharcInstr -> Patch2
psPadSharc' PadSharcSpec
hiDef

-- | Padsynth instrument with pad-like amplitude envelope.
psPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
psPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
psPadSharc' PadSharcSpec
spec SharcInstr
sh = ((Sig, Sig) -> (Sig, Sig))
-> (ResonFilter -> CsdNote D -> Sig -> Sig)
-> (D -> SE (Sig, Sig))
-> Patch2
genPsPad (Sig, Sig) -> (Sig, Sig)
largeHall2 ResonFilter -> CsdNote D -> Sig -> Sig
psPadFilter (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
psOsc PadSharcSpec
spec SharcInstr
sh)

-- | Padsynth instrument with pad-like amplitude envelope. Plays a note and one octave below it.
psDeepPadSharc :: SharcInstr -> Patch2
psDeepPadSharc :: SharcInstr -> Patch2
psDeepPadSharc = PadSharcSpec -> SharcInstr -> Patch2
psDeepPadSharc' PadSharcSpec
forall a. Default a => a
def

psDeepPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
psDeepPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
psDeepPadSharc' PadSharcSpec
spec SharcInstr
sh = ((Sig, Sig) -> (Sig, Sig))
-> (ResonFilter -> CsdNote D -> Sig -> Sig)
-> (D -> SE (Sig, Sig))
-> Patch2
genPsPad (Sig, Sig) -> (Sig, Sig)
largeHall2 ResonFilter -> CsdNote D -> Sig -> Sig
psPadFilter (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
psDeepOsc PadSharcSpec
spec SharcInstr
sh)

psPadSharcCfd :: Sig -> SharcInstr -> SharcInstr -> Patch2
psPadSharcCfd :: Sig -> SharcInstr -> SharcInstr -> Patch2
psPadSharcCfd Sig
k SharcInstr
sh1 SharcInstr
sh2 = Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> Patch2
psPadSharcCfd' Sig
k (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh1) (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh2)

-- | Crossfade between timbres.
psPadSharcCfd' :: Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
psPadSharcCfd' :: Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> Patch2
psPadSharcCfd' Sig
k (PadSharcSpec, SharcInstr)
spec1 (PadSharcSpec, SharcInstr)
spec2 = ((Sig, Sig) -> (Sig, Sig))
-> (ResonFilter -> CsdNote D -> Sig -> Sig)
-> (D -> SE (Sig, Sig))
-> Patch2
genPsPad (Sig, Sig) -> (Sig, Sig)
largeHall2 ResonFilter -> CsdNote D -> Sig -> Sig
psPadFilter (Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> D
-> SE (Sig, Sig)
psOscCfd Sig
k (PadSharcSpec, SharcInstr)
spec1 (PadSharcSpec, SharcInstr)
spec2)

psPadSharcCfd4 :: Sig -> Sig -> SharcInstr -> SharcInstr -> SharcInstr -> SharcInstr -> Patch2
psPadSharcCfd4 :: Sig
-> Sig
-> SharcInstr
-> SharcInstr
-> SharcInstr
-> SharcInstr
-> Patch2
psPadSharcCfd4 Sig
k1 Sig
k2 SharcInstr
sh1 SharcInstr
sh2 SharcInstr
sh3 SharcInstr
sh4 = Sig
-> Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> Patch2
psPadSharcCfd4' Sig
k1 Sig
k2 (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh1) (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh2) (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh3) (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh4)

-- | Crossfade between timbres.
psPadSharcCfd4' :: Sig -> Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
psPadSharcCfd4' :: Sig
-> Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> Patch2
psPadSharcCfd4' Sig
k1 Sig
k2  (PadSharcSpec, SharcInstr)
spec1 (PadSharcSpec, SharcInstr)
spec2 (PadSharcSpec, SharcInstr)
spec3 (PadSharcSpec, SharcInstr)
spec4 = ((Sig, Sig) -> (Sig, Sig))
-> (ResonFilter -> CsdNote D -> Sig -> Sig)
-> (D -> SE (Sig, Sig))
-> Patch2
genPsPad (Sig, Sig) -> (Sig, Sig)
largeHall2 ResonFilter -> CsdNote D -> Sig -> Sig
psPadFilter (Sig
-> Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> D
-> SE (Sig, Sig)
psOscCfd4 Sig
k1 Sig
k2 (PadSharcSpec, SharcInstr)
spec1 (PadSharcSpec, SharcInstr)
spec2 (PadSharcSpec, SharcInstr)
spec3 (PadSharcSpec, SharcInstr)
spec4)

psDeepPadSharcCfd :: Sig -> SharcInstr -> SharcInstr -> Patch2
psDeepPadSharcCfd :: Sig -> SharcInstr -> SharcInstr -> Patch2
psDeepPadSharcCfd Sig
k SharcInstr
sh1 SharcInstr
sh2 = Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> Patch2
psDeepPadSharcCfd' Sig
k (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh1) (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh2)

-- | Crossfade between timbres.
psDeepPadSharcCfd' :: Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
psDeepPadSharcCfd' :: Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> Patch2
psDeepPadSharcCfd' Sig
k (PadSharcSpec, SharcInstr)
spec1 (PadSharcSpec, SharcInstr)
spec2 = ((Sig, Sig) -> (Sig, Sig))
-> (ResonFilter -> CsdNote D -> Sig -> Sig)
-> (D -> SE (Sig, Sig))
-> Patch2
genPsPad (Sig, Sig) -> (Sig, Sig)
largeHall2 ResonFilter -> CsdNote D -> Sig -> Sig
psPadFilter (Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> D
-> SE (Sig, Sig)
psDeepOscCfd Sig
k (PadSharcSpec, SharcInstr)
spec1 (PadSharcSpec, SharcInstr)
spec2)

psDeepPadSharcCfd4 :: Sig -> Sig -> SharcInstr -> SharcInstr -> SharcInstr -> SharcInstr -> Patch2
psDeepPadSharcCfd4 :: Sig
-> Sig
-> SharcInstr
-> SharcInstr
-> SharcInstr
-> SharcInstr
-> Patch2
psDeepPadSharcCfd4 Sig
k1 Sig
k2 SharcInstr
sh1 SharcInstr
sh2 SharcInstr
sh3 SharcInstr
sh4 = Sig
-> Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> Patch2
psDeepPadSharcCfd4' Sig
k1 Sig
k2 (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh1) (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh2) (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh3) (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh4)

-- | Crossfade between timbres.
psDeepPadSharcCfd4' :: Sig -> Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
psDeepPadSharcCfd4' :: Sig
-> Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> Patch2
psDeepPadSharcCfd4' Sig
k1 Sig
k2  (PadSharcSpec, SharcInstr)
spec1 (PadSharcSpec, SharcInstr)
spec2 (PadSharcSpec, SharcInstr)
spec3 (PadSharcSpec, SharcInstr)
spec4 = ((Sig, Sig) -> (Sig, Sig))
-> (ResonFilter -> CsdNote D -> Sig -> Sig)
-> (D -> SE (Sig, Sig))
-> Patch2
genPsPad (Sig, Sig) -> (Sig, Sig)
largeHall2 ResonFilter -> CsdNote D -> Sig -> Sig
psPadFilter (Sig
-> Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> D
-> SE (Sig, Sig)
psDeepOscCfd4 Sig
k1 Sig
k2 (PadSharcSpec, SharcInstr)
spec1 (PadSharcSpec, SharcInstr)
spec2 (PadSharcSpec, SharcInstr)
spec3 (PadSharcSpec, SharcInstr)
spec4)


-- | Padsynth instrument with pad-like amplitude envelope and moog filter.
psSoftPadSharc :: SharcInstr -> Patch2
psSoftPadSharc :: SharcInstr -> Patch2
psSoftPadSharc = PadSharcSpec -> SharcInstr -> Patch2
psSoftPadSharc' PadSharcSpec
forall a. Default a => a
def

-- | High resolution Padsynth instrument with pad-like amplitude envelope and moog filter (resource hungry).
psSoftPadSharcHifi :: SharcInstr -> Patch2
psSoftPadSharcHifi :: SharcInstr -> Patch2
psSoftPadSharcHifi = PadSharcSpec -> SharcInstr -> Patch2
psSoftPadSharc' PadSharcSpec
hiDef

-- | Padsynth instrument with pad-like amplitude envelope and moog filter.
-- We can specify aux parameters.
psSoftPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
psSoftPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
psSoftPadSharc' PadSharcSpec
spec SharcInstr
sh = ((Sig, Sig) -> (Sig, Sig))
-> (ResonFilter -> CsdNote D -> Sig -> Sig)
-> (D -> SE (Sig, Sig))
-> Patch2
genPsPad (Sig, Sig) -> (Sig, Sig)
largeHall2 ResonFilter -> CsdNote D -> Sig -> Sig
psSoftPadFilter (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
psOsc PadSharcSpec
spec SharcInstr
sh)

-- | Padsynth instrument with pad-like amplitude envelope and moog filter. Plays a note and one octave below it.
psDeepSoftPadSharc :: SharcInstr -> Patch2
psDeepSoftPadSharc :: SharcInstr -> Patch2
psDeepSoftPadSharc = PadSharcSpec -> SharcInstr -> Patch2
psDeepSoftPadSharc' PadSharcSpec
forall a. Default a => a
def

psDeepSoftPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
psDeepSoftPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
psDeepSoftPadSharc' PadSharcSpec
spec SharcInstr
sh = ((Sig, Sig) -> (Sig, Sig))
-> (ResonFilter -> CsdNote D -> Sig -> Sig)
-> (D -> SE (Sig, Sig))
-> Patch2
genPsPad (Sig, Sig) -> (Sig, Sig)
largeHall2 ResonFilter -> CsdNote D -> Sig -> Sig
psSoftPadFilter (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
psDeepOsc PadSharcSpec
spec SharcInstr
sh)


psSoftPadSharcCfd :: Sig -> SharcInstr -> SharcInstr -> Patch2
psSoftPadSharcCfd :: Sig -> SharcInstr -> SharcInstr -> Patch2
psSoftPadSharcCfd Sig
k SharcInstr
sh1 SharcInstr
sh2 = Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> Patch2
psSoftPadSharcCfd' Sig
k (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh1) (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh2)

-- | Crossfade between timbres.
psSoftPadSharcCfd' :: Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
psSoftPadSharcCfd' :: Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> Patch2
psSoftPadSharcCfd' Sig
k (PadSharcSpec, SharcInstr)
spec1 (PadSharcSpec, SharcInstr)
spec2 = ((Sig, Sig) -> (Sig, Sig))
-> (ResonFilter -> CsdNote D -> Sig -> Sig)
-> (D -> SE (Sig, Sig))
-> Patch2
genPsPad (Sig, Sig) -> (Sig, Sig)
largeHall2 ResonFilter -> CsdNote D -> Sig -> Sig
psSoftPadFilter (Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> D
-> SE (Sig, Sig)
psOscCfd Sig
k (PadSharcSpec, SharcInstr)
spec1 (PadSharcSpec, SharcInstr)
spec2)

psSoftPadSharcCfd4 :: Sig -> Sig -> SharcInstr -> SharcInstr -> SharcInstr -> SharcInstr -> Patch2
psSoftPadSharcCfd4 :: Sig
-> Sig
-> SharcInstr
-> SharcInstr
-> SharcInstr
-> SharcInstr
-> Patch2
psSoftPadSharcCfd4 Sig
k1 Sig
k2 SharcInstr
sh1 SharcInstr
sh2 SharcInstr
sh3 SharcInstr
sh4 = Sig
-> Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> Patch2
psSoftPadSharcCfd4' Sig
k1 Sig
k2 (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh1) (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh2) (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh3) (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh4)

-- | Crossfade between timbres.
psSoftPadSharcCfd4' :: Sig -> Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
psSoftPadSharcCfd4' :: Sig
-> Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> Patch2
psSoftPadSharcCfd4' Sig
k1 Sig
k2  (PadSharcSpec, SharcInstr)
spec1 (PadSharcSpec, SharcInstr)
spec2 (PadSharcSpec, SharcInstr)
spec3 (PadSharcSpec, SharcInstr)
spec4 = ((Sig, Sig) -> (Sig, Sig))
-> (ResonFilter -> CsdNote D -> Sig -> Sig)
-> (D -> SE (Sig, Sig))
-> Patch2
genPsPad (Sig, Sig) -> (Sig, Sig)
largeHall2 ResonFilter -> CsdNote D -> Sig -> Sig
psSoftPadFilter (Sig
-> Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> D
-> SE (Sig, Sig)
psOscCfd4 Sig
k1 Sig
k2 (PadSharcSpec, SharcInstr)
spec1 (PadSharcSpec, SharcInstr)
spec2 (PadSharcSpec, SharcInstr)
spec3 (PadSharcSpec, SharcInstr)
spec4)

psDeepSoftPadSharcCfd :: Sig -> SharcInstr -> SharcInstr -> Patch2
psDeepSoftPadSharcCfd :: Sig -> SharcInstr -> SharcInstr -> Patch2
psDeepSoftPadSharcCfd Sig
k SharcInstr
sh1 SharcInstr
sh2 = Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> Patch2
psDeepSoftPadSharcCfd' Sig
k (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh1) (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh2)

-- | Crossfade between timbres.
psDeepSoftPadSharcCfd' :: Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
psDeepSoftPadSharcCfd' :: Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> Patch2
psDeepSoftPadSharcCfd' Sig
k (PadSharcSpec, SharcInstr)
spec1 (PadSharcSpec, SharcInstr)
spec2 = ((Sig, Sig) -> (Sig, Sig))
-> (ResonFilter -> CsdNote D -> Sig -> Sig)
-> (D -> SE (Sig, Sig))
-> Patch2
genPsPad (Sig, Sig) -> (Sig, Sig)
largeHall2 ResonFilter -> CsdNote D -> Sig -> Sig
psSoftPadFilter (Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> D
-> SE (Sig, Sig)
psDeepOscCfd Sig
k (PadSharcSpec, SharcInstr)
spec1 (PadSharcSpec, SharcInstr)
spec2)

psDeepSoftPadSharcCfd4 :: Sig -> Sig -> SharcInstr -> SharcInstr -> SharcInstr -> SharcInstr -> Patch2
psDeepSoftPadSharcCfd4 :: Sig
-> Sig
-> SharcInstr
-> SharcInstr
-> SharcInstr
-> SharcInstr
-> Patch2
psDeepSoftPadSharcCfd4 Sig
k1 Sig
k2 SharcInstr
sh1 SharcInstr
sh2 SharcInstr
sh3 SharcInstr
sh4 = Sig
-> Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> Patch2
psDeepSoftPadSharcCfd4' Sig
k1 Sig
k2 (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh1) (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh2) (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh3) (PadSharcSpec
forall a. Default a => a
def, SharcInstr
sh4)

-- | Crossfade between timbres.
psDeepSoftPadSharcCfd4' :: Sig -> Sig -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> (PadSharcSpec, SharcInstr) -> Patch2
psDeepSoftPadSharcCfd4' :: Sig
-> Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> Patch2
psDeepSoftPadSharcCfd4' Sig
k1 Sig
k2  (PadSharcSpec, SharcInstr)
spec1 (PadSharcSpec, SharcInstr)
spec2 (PadSharcSpec, SharcInstr)
spec3 (PadSharcSpec, SharcInstr)
spec4 = ((Sig, Sig) -> (Sig, Sig))
-> (ResonFilter -> CsdNote D -> Sig -> Sig)
-> (D -> SE (Sig, Sig))
-> Patch2
genPsPad (Sig, Sig) -> (Sig, Sig)
largeHall2 ResonFilter -> CsdNote D -> Sig -> Sig
psSoftPadFilter (Sig
-> Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> D
-> SE (Sig, Sig)
psDeepOscCfd4 Sig
k1 Sig
k2 (PadSharcSpec, SharcInstr)
spec1 (PadSharcSpec, SharcInstr)
spec2 (PadSharcSpec, SharcInstr)
spec3 (PadSharcSpec, SharcInstr)
spec4)


-- | Padsynth instrument with pad-like amplitude envelope and @magicCave2@ reverb.
psMagicPadSharc :: SharcInstr -> Patch2
psMagicPadSharc :: SharcInstr -> Patch2
psMagicPadSharc = PadSharcSpec -> SharcInstr -> Patch2
psMagicPadSharc' PadSharcSpec
forall a. Default a => a
def

-- | High resolution Padsynth instrument with pad-like amplitude envelope and @magicCave2@ reverb.
psMagicPadSharcHifi :: SharcInstr -> Patch2
psMagicPadSharcHifi :: SharcInstr -> Patch2
psMagicPadSharcHifi = PadSharcSpec -> SharcInstr -> Patch2
psMagicPadSharc' PadSharcSpec
hiDef

-- | Padsynth instrument with pad-like amplitude envelope and @magicCave2@ reverb.
psMagicPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
psMagicPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
psMagicPadSharc' PadSharcSpec
spec SharcInstr
sh = ((Sig, Sig) -> (Sig, Sig))
-> (ResonFilter -> CsdNote D -> Sig -> Sig)
-> (D -> SE (Sig, Sig))
-> Patch2
genPsPad (Sig, Sig) -> (Sig, Sig)
magicCave2 ResonFilter -> CsdNote D -> Sig -> Sig
psPadFilter (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
psOsc PadSharcSpec
spec SharcInstr
sh)

-- | Padsynth instrument with pad-like amplitude envelope and @magicCave2@ reverb. Plays a note and one octave below it.
psDeepMagicPadSharc :: SharcInstr -> Patch2
psDeepMagicPadSharc :: SharcInstr -> Patch2
psDeepMagicPadSharc = PadSharcSpec -> SharcInstr -> Patch2
psDeepMagicPadSharc' PadSharcSpec
forall a. Default a => a
def

-- | Padsynth instrument with pad-like amplitude envelope and @magicCave2@ reverb. Plays a note and one octave below it.
psDeepMagicPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
psDeepMagicPadSharc' :: PadSharcSpec -> SharcInstr -> Patch2
psDeepMagicPadSharc' PadSharcSpec
spec SharcInstr
sh = ((Sig, Sig) -> (Sig, Sig))
-> (ResonFilter -> CsdNote D -> Sig -> Sig)
-> (D -> SE (Sig, Sig))
-> Patch2
genPsPad (Sig, Sig) -> (Sig, Sig)
magicCave2 ResonFilter -> CsdNote D -> Sig -> Sig
psPadFilter (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
psDeepOsc PadSharcSpec
spec SharcInstr
sh)

-- | Padsynth instrument with pad-like amplitude envelope and moog filter and @magicCave2@ reverb (resource hungry).
psMagicSoftPadSharc :: SharcInstr -> Patch2
psMagicSoftPadSharc :: SharcInstr -> Patch2
psMagicSoftPadSharc = PadSharcSpec -> SharcInstr -> Patch2
psMagicSoftPadSharc' PadSharcSpec
forall a. Default a => a
def

-- | High resolution Padsynth instrument with pad-like amplitude envelope and moog filter and @magicCave2@ reverb (resource hungry).
psMagicSoftPadSharcHifi :: SharcInstr -> Patch2
psMagicSoftPadSharcHifi :: SharcInstr -> Patch2
psMagicSoftPadSharcHifi = PadSharcSpec -> SharcInstr -> Patch2
psMagicSoftPadSharc' PadSharcSpec
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' :: PadSharcSpec -> SharcInstr -> Patch2
psMagicSoftPadSharc' PadSharcSpec
spec SharcInstr
sh = ((Sig, Sig) -> (Sig, Sig))
-> (ResonFilter -> CsdNote D -> Sig -> Sig)
-> (D -> SE (Sig, Sig))
-> Patch2
genPsPad (Sig, Sig) -> (Sig, Sig)
magicCave2 ResonFilter -> CsdNote D -> Sig -> Sig
psSoftPadFilter (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
psOsc PadSharcSpec
spec SharcInstr
sh)


-- | Padsynth instrument with pad-like amplitude envelope and moog filter and @magicCave2@ reverb (resource hungry).
psDeepMagicSoftPadSharc :: SharcInstr -> Patch2
psDeepMagicSoftPadSharc :: SharcInstr -> Patch2
psDeepMagicSoftPadSharc = PadSharcSpec -> SharcInstr -> Patch2
psDeepMagicSoftPadSharc' PadSharcSpec
forall a. Default a => a
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' :: PadSharcSpec -> SharcInstr -> Patch2
psDeepMagicSoftPadSharc' PadSharcSpec
spec SharcInstr
sh = ((Sig, Sig) -> (Sig, Sig))
-> (ResonFilter -> CsdNote D -> Sig -> Sig)
-> (D -> SE (Sig, Sig))
-> Patch2
genPsPad (Sig, Sig) -> (Sig, Sig)
magicCave2 ResonFilter -> CsdNote D -> Sig -> Sig
psSoftPadFilter (PadSharcSpec -> SharcInstr -> D -> SE (Sig, Sig)
psDeepOsc PadSharcSpec
spec SharcInstr
sh)

-- | Deep spiritual drones.
--
-- > vedicPad sharcInstrument bandwidth
--
-- Good values for bandwidth lies in the interval [0, 120]
vedicPad :: SharcInstr -> PadsynthBandwidth -> Patch2
vedicPad :: SharcInstr -> PadsynthBandwidth -> Patch2
vedicPad SharcInstr
instr PadsynthBandwidth
bandwidth = Sig -> Patch2 -> Patch2
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.8 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$
  Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> SE a) -> Patch a -> Patch a
addPreFx Sig
0.45 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig -> (Sig, Sig) -> (Sig, Sig)
pingPong Sig
0.25 Sig
0.65 Sig
0.5) (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$
  PadSharcSpec -> SharcInstr -> Patch2
psDeepSoftPadSharc' (PadSharcSpec
forall a. Default a => a
def { padSharcBandwidth :: PadsynthBandwidth
padSharcBandwidth = PadsynthBandwidth
bandwidth, padSharcSize :: Int
padSharcSize = Int
15 })  SharcInstr
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 :: Sig -> SharcInstr -> SharcInstr -> PadsynthBandwidth -> Patch2
vedicPadCfd Sig
k SharcInstr
instr1 SharcInstr
instr2 PadsynthBandwidth
bandwidth = Sig -> Patch2 -> Patch2
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.8 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$
  Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> SE a) -> Patch a -> Patch a
addPreFx Sig
0.45 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig -> (Sig, Sig) -> (Sig, Sig)
pingPong Sig
0.25 Sig
0.65 Sig
0.5) (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$
  Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> Patch2
psDeepSoftPadSharcCfd' Sig
k (PadSharcSpec
forall a. Default a => a
def { padSharcBandwidth :: PadsynthBandwidth
padSharcBandwidth = PadsynthBandwidth
bandwidth, padSharcSize :: Int
padSharcSize = Int
15 },  SharcInstr
instr1) (PadSharcSpec
forall a. Default a => a
def { padSharcBandwidth :: PadsynthBandwidth
padSharcBandwidth = PadsynthBandwidth
bandwidth, padSharcSize :: Int
padSharcSize = Int
15 },  SharcInstr
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 :: Sig
-> Sig
-> SharcInstr
-> SharcInstr
-> SharcInstr
-> SharcInstr
-> PadsynthBandwidth
-> Patch2
vedicPadCfd4 Sig
kX Sig
kY SharcInstr
instr1 SharcInstr
instr2 SharcInstr
instr3 SharcInstr
instr4 PadsynthBandwidth
bandwidth = Sig -> Patch2 -> Patch2
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.8 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$
  Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> SE a) -> Patch a -> Patch a
addPreFx Sig
0.45 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  Sig -> Sig -> Sig -> (Sig, Sig) -> (Sig, Sig)
pingPong Sig
0.25 Sig
0.65 Sig
0.5) (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$
  Sig
-> Sig
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> (PadSharcSpec, SharcInstr)
-> Patch2
psDeepSoftPadSharcCfd4' Sig
kX Sig
kY
    (PadSharcSpec
forall a. Default a => a
def { padSharcBandwidth :: PadsynthBandwidth
padSharcBandwidth = PadsynthBandwidth
bandwidth, padSharcSize :: Int
padSharcSize = Int
15 },  SharcInstr
instr1) (PadSharcSpec
forall a. Default a => a
def { padSharcBandwidth :: PadsynthBandwidth
padSharcBandwidth = PadsynthBandwidth
bandwidth, padSharcSize :: Int
padSharcSize = Int
15 },  SharcInstr
instr2)
    (PadSharcSpec
forall a. Default a => a
def { padSharcBandwidth :: PadsynthBandwidth
padSharcBandwidth = PadsynthBandwidth
bandwidth, padSharcSize :: Int
padSharcSize = Int
15 },  SharcInstr
instr3) (PadSharcSpec
forall a. Default a => a
def { padSharcBandwidth :: PadsynthBandwidth
padSharcBandwidth = PadsynthBandwidth
bandwidth, padSharcSize :: Int
padSharcSize = Int
15 },  SharcInstr
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 :: SharcInstr -> PadsynthBandwidth -> Patch2
vedicPadHifi SharcInstr
instr PadsynthBandwidth
bandwidth = Sig -> Patch2 -> Patch2
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.8 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$
  Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> SE a) -> Patch a -> Patch a
addPreFx Sig
0.45 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig -> (Sig, Sig) -> (Sig, Sig)
pingPong Sig
0.25 Sig
0.65 Sig
0.5) (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$
  Patch2 -> Patch2
forall b. (SigSpace b, Sigs b) => Patch b -> Patch b
deepPad (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$
  PadSharcSpec -> SharcInstr -> Patch2
psSoftPadSharc' (PadSharcSpec
forall a. Default a => a
def { padSharcBandwidth :: PadsynthBandwidth
padSharcBandwidth = PadsynthBandwidth
bandwidth, padSharcSize :: Int
padSharcSize = Int
32 })  SharcInstr
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 :: SharcInstr -> PadsynthBandwidth -> Patch2
vedicPadLofi SharcInstr
instr PadsynthBandwidth
bandwidth = Sig -> Patch2 -> Patch2
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.8 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$
  Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> Patch2 -> Patch2
forall a. Sig -> (a -> SE a) -> Patch a -> Patch a
addPreFx Sig
0.45 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig -> Sig -> (Sig, Sig) -> (Sig, Sig)
pingPong Sig
0.25 Sig
0.65 Sig
0.5) (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$
  Patch2 -> Patch2
forall b. (SigSpace b, Sigs b) => Patch b -> Patch b
deepPad (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$
  PadSharcSpec -> SharcInstr -> Patch2
psSoftPadSharc' (PadSharcSpec
forall a. Default a => a
def { padSharcBandwidth :: PadsynthBandwidth
padSharcBandwidth = PadsynthBandwidth
bandwidth, padSharcSize :: Int
padSharcSize = Int
4 })  SharcInstr
instr

-- | Eminent
vibhu :: PadsynthBandwidth -> Patch2
vibhu :: PadsynthBandwidth -> Patch2
vibhu = SharcInstr -> PadsynthBandwidth -> Patch2
vedicPad SharcInstr
shVibhu

shVibhu :: SharcInstr
shVibhu = SharcInstr
shAltoFlute

-- | Wise
rishi :: PadsynthBandwidth -> Patch2
rishi :: PadsynthBandwidth -> Patch2
rishi = SharcInstr -> PadsynthBandwidth -> Patch2
vedicPad SharcInstr
shRishi

shRishi :: SharcInstr
shRishi = SharcInstr
shFlute

-- | Fire
agni :: PadsynthBandwidth -> Patch2
agni :: PadsynthBandwidth -> Patch2
agni  =  SharcInstr -> PadsynthBandwidth -> Patch2
vedicPad SharcInstr
shAgni

shAgni :: SharcInstr
shAgni = SharcInstr
shCello

-- | Material nature
prakriti :: PadsynthBandwidth -> Patch2
prakriti :: PadsynthBandwidth -> Patch2
prakriti = SharcInstr -> PadsynthBandwidth -> Patch2
vedicPad SharcInstr
shPrakriti

shPrakriti :: SharcInstr
shPrakriti = SharcInstr
shClarinet

-- | Desire
rajas :: PadsynthBandwidth -> Patch2
rajas :: PadsynthBandwidth -> Patch2
rajas = SharcInstr -> PadsynthBandwidth -> Patch2
vedicPad SharcInstr
shRajas

shRajas :: SharcInstr
shRajas = SharcInstr
shViolin

-- | the hero
avatara :: PadsynthBandwidth -> Patch2
avatara :: PadsynthBandwidth -> Patch2
avatara = SharcInstr -> PadsynthBandwidth -> Patch2
vedicPad SharcInstr
shAvatara

shAvatara :: SharcInstr
shAvatara = SharcInstr
shFrenchHorn

-- | Earth
bhumi :: PadsynthBandwidth -> Patch2
bhumi :: PadsynthBandwidth -> Patch2
bhumi = SharcInstr -> PadsynthBandwidth -> Patch2
vedicPad SharcInstr
shBhumi

shBhumi :: SharcInstr
shBhumi = SharcInstr
shViolinsEnsemble

-- | Eminent
vibhuHifi :: PadsynthBandwidth -> Patch2
vibhuHifi :: PadsynthBandwidth -> Patch2
vibhuHifi = SharcInstr -> PadsynthBandwidth -> Patch2
vedicPadHifi SharcInstr
shAltoFlute

-- | Wise
rishiHifi :: PadsynthBandwidth -> Patch2
rishiHifi :: PadsynthBandwidth -> Patch2
rishiHifi = SharcInstr -> PadsynthBandwidth -> Patch2
vedicPadHifi SharcInstr
shFlute

-- | Fire
agniHifi :: PadsynthBandwidth -> Patch2
agniHifi :: PadsynthBandwidth -> Patch2
agniHifi  =  SharcInstr -> PadsynthBandwidth -> Patch2
vedicPadHifi SharcInstr
shCello

-- | Material nature
prakritiHifi :: PadsynthBandwidth -> Patch2
prakritiHifi :: PadsynthBandwidth -> Patch2
prakritiHifi = SharcInstr -> PadsynthBandwidth -> Patch2
vedicPadHifi SharcInstr
shClarinet

-- | Desire
rajasHifi :: PadsynthBandwidth -> Patch2
rajasHifi :: PadsynthBandwidth -> Patch2
rajasHifi = SharcInstr -> PadsynthBandwidth -> Patch2
vedicPadHifi SharcInstr
shViolin

-- | the hero
avataraHifi :: PadsynthBandwidth -> Patch2
avataraHifi :: PadsynthBandwidth -> Patch2
avataraHifi = SharcInstr -> PadsynthBandwidth -> Patch2
vedicPadHifi SharcInstr
shFrenchHorn

-- | Earth
bhumiHifi :: PadsynthBandwidth -> Patch2
bhumiHifi :: PadsynthBandwidth -> Patch2
bhumiHifi = SharcInstr -> PadsynthBandwidth -> Patch2
vedicPadHifi SharcInstr
shViolinsEnsemble


-- | Eminent
vibhuLofi :: PadsynthBandwidth -> Patch2
vibhuLofi :: PadsynthBandwidth -> Patch2
vibhuLofi = SharcInstr -> PadsynthBandwidth -> Patch2
vedicPadLofi SharcInstr
shAltoFlute

-- | Wise
rishiLofi :: PadsynthBandwidth -> Patch2
rishiLofi :: PadsynthBandwidth -> Patch2
rishiLofi = SharcInstr -> PadsynthBandwidth -> Patch2
vedicPadLofi SharcInstr
shFlute

-- | Fire
agniLofi :: PadsynthBandwidth -> Patch2
agniLofi :: PadsynthBandwidth -> Patch2
agniLofi  =  SharcInstr -> PadsynthBandwidth -> Patch2
vedicPadLofi SharcInstr
shCello

-- | Material nature
prakritiLofi :: PadsynthBandwidth -> Patch2
prakritiLofi :: PadsynthBandwidth -> Patch2
prakritiLofi = SharcInstr -> PadsynthBandwidth -> Patch2
vedicPadLofi SharcInstr
shClarinet

-- | Desire
rajasLofi :: PadsynthBandwidth -> Patch2
rajasLofi :: PadsynthBandwidth -> Patch2
rajasLofi = SharcInstr -> PadsynthBandwidth -> Patch2
vedicPadLofi SharcInstr
shViolin

-- | the hero
avataraLofi :: PadsynthBandwidth -> Patch2
avataraLofi :: PadsynthBandwidth -> Patch2
avataraLofi = SharcInstr -> PadsynthBandwidth -> Patch2
vedicPadLofi SharcInstr
shFrenchHorn

-- | Earth
bhumiLofi :: PadsynthBandwidth -> Patch2
bhumiLofi :: PadsynthBandwidth -> Patch2
bhumiLofi = SharcInstr -> PadsynthBandwidth -> Patch2
vedicPadLofi SharcInstr
shViolinsEnsemble

-----------------------------
-- crossfade pads

vedicCfd :: SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd :: SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
inst1 SharcInstr
instr2 PadsynthBandwidth
bandwidth Sig
cfdLevel = Sig -> SharcInstr -> SharcInstr -> PadsynthBandwidth -> Patch2
vedicPadCfd Sig
cfdLevel SharcInstr
inst1 SharcInstr
instr2 PadsynthBandwidth
bandwidth

vibhuRishi :: PadsynthBandwidth -> Sig  -> Patch2
vibhuRishi :: PadsynthBandwidth -> Sig -> Patch2
vibhuRishi = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shVibhu SharcInstr
shRishi

vibhuAgni :: PadsynthBandwidth -> Sig  -> Patch2
vibhuAgni :: PadsynthBandwidth -> Sig -> Patch2
vibhuAgni = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shVibhu SharcInstr
shAgni

vibhuPrakriti :: PadsynthBandwidth -> Sig  -> Patch2
vibhuPrakriti :: PadsynthBandwidth -> Sig -> Patch2
vibhuPrakriti = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shVibhu SharcInstr
shPrakriti

vibhuRajas :: PadsynthBandwidth -> Sig  -> Patch2
vibhuRajas :: PadsynthBandwidth -> Sig -> Patch2
vibhuRajas = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shVibhu SharcInstr
shRajas

vibhuAvatara :: PadsynthBandwidth -> Sig  -> Patch2
vibhuAvatara :: PadsynthBandwidth -> Sig -> Patch2
vibhuAvatara = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shVibhu SharcInstr
shAvatara

vibhuBhumi :: PadsynthBandwidth -> Sig -> Patch2
vibhuBhumi :: PadsynthBandwidth -> Sig -> Patch2
vibhuBhumi = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shVibhu SharcInstr
shBhumi

rishiAgni :: PadsynthBandwidth -> Sig -> Patch2
rishiAgni :: PadsynthBandwidth -> Sig -> Patch2
rishiAgni = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shRishi SharcInstr
shAgni

rishiPrakriti :: PadsynthBandwidth -> Sig -> Patch2
rishiPrakriti :: PadsynthBandwidth -> Sig -> Patch2
rishiPrakriti = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shRishi SharcInstr
shPrakriti

rishiRajas :: PadsynthBandwidth -> Sig -> Patch2
rishiRajas :: PadsynthBandwidth -> Sig -> Patch2
rishiRajas = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shRishi SharcInstr
shRajas

rishiAvatara :: PadsynthBandwidth -> Sig -> Patch2
rishiAvatara :: PadsynthBandwidth -> Sig -> Patch2
rishiAvatara = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shRishi SharcInstr
shAvatara

rishiBhumi :: PadsynthBandwidth -> Sig -> Patch2
rishiBhumi :: PadsynthBandwidth -> Sig -> Patch2
rishiBhumi = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shRishi SharcInstr
shRajas

agniPrakriti :: PadsynthBandwidth -> Sig -> Patch2
agniPrakriti :: PadsynthBandwidth -> Sig -> Patch2
agniPrakriti = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shAgni SharcInstr
shPrakriti

agniRajas :: PadsynthBandwidth -> Sig -> Patch2
agniRajas :: PadsynthBandwidth -> Sig -> Patch2
agniRajas = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shAgni SharcInstr
shRajas

agniAvatara :: PadsynthBandwidth -> Sig -> Patch2
agniAvatara :: PadsynthBandwidth -> Sig -> Patch2
agniAvatara = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shAgni SharcInstr
shAvatara

agniBhumi :: PadsynthBandwidth -> Sig -> Patch2
agniBhumi :: PadsynthBandwidth -> Sig -> Patch2
agniBhumi = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shAgni SharcInstr
shBhumi

prakritiRajas :: PadsynthBandwidth -> Sig -> Patch2
prakritiRajas :: PadsynthBandwidth -> Sig -> Patch2
prakritiRajas = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shPrakriti SharcInstr
shRajas

prakritiAvatara :: PadsynthBandwidth -> Sig -> Patch2
prakritiAvatara :: PadsynthBandwidth -> Sig -> Patch2
prakritiAvatara = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shPrakriti SharcInstr
shAvatara

prakritiBhumi :: PadsynthBandwidth -> Sig -> Patch2
prakritiBhumi :: PadsynthBandwidth -> Sig -> Patch2
prakritiBhumi = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shPrakriti SharcInstr
shBhumi

rajasAvatara :: PadsynthBandwidth -> Sig -> Patch2
rajasAvatara :: PadsynthBandwidth -> Sig -> Patch2
rajasAvatara = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shRajas SharcInstr
shAvatara

rajasBhumi :: PadsynthBandwidth -> Sig -> Patch2
rajasBhumi :: PadsynthBandwidth -> Sig -> Patch2
rajasBhumi = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shRajas SharcInstr
shBhumi

avataraBhumi :: PadsynthBandwidth -> Sig -> Patch2
avataraBhumi :: PadsynthBandwidth -> Sig -> Patch2
avataraBhumi = SharcInstr -> SharcInstr -> PadsynthBandwidth -> Sig -> Patch2
vedicCfd SharcInstr
shAvatara SharcInstr
shBhumi

----------------------------------------
-- noisy padsynth pads

noisyRise :: Patch2
noisyRise :: Patch2
noisyRise = Patch2 -> Patch2
fxs (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> SE (Sig, Sig))
-> CsdNote D -> SE (CpsInstrOut (Sig -> SE (Sig, Sig)))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps ((Sig -> SE (Sig, Sig))
 -> CsdNote D -> SE (CpsInstrOut (Sig -> SE (Sig, Sig))))
-> (Sig -> SE (Sig, Sig))
-> CsdNote D
-> SE (CpsInstrOut (Sig -> SE (Sig, Sig)))
forall a b. (a -> b) -> a -> b
$ \Sig
cps -> Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.24 (SE (Sig, Sig) -> SE (Sig, Sig)) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> SE (Sig, Sig)
wave Sig
cps
  where
    fxs :: Patch2 -> Patch2
fxs = [GenFxSpec (Sig, Sig)] -> Patch2 -> Patch2
forall a. [GenFxSpec a] -> Patch a -> Patch a
FxChain [Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
0.35 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> (Sig, Sig)
largeHall2), Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
0.5 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig))
-> (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ D -> Sig -> Sig -> Sig
echo D
0.25 Sig
0.85))]
    wave :: Sig -> SE (Sig, Sig)
wave Sig
x  = Sig -> SE (Sig, Sig)
noisy Sig
x SE (Sig, Sig) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. Num a => a -> a -> a
+ Sig -> SE (Sig, Sig)
pad Sig
x
    noisy :: Sig -> AtOut Sig (Sig, Sig) (SE Sig)
noisy Sig
x = (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (Sig -> (Sig, Sig) -> (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.3 ((Sig, Sig) -> (Sig, Sig))
-> (Sig -> (Sig, Sig)) -> Sig -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> (Sig, Sig)
fromMono (Sig -> (Sig, Sig)) -> (Sig -> Sig) -> Sig -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> Sig -> AtOut Sig Sig Sig
forall a b. At Sig a b => (Sig -> a) -> b -> AtOut Sig a b
bat (ResonFilter
bp (Sig
x Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
5) Sig
23) (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ResonFilter
lp (Sig
300 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
2500 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* [D] -> Sig
linseg [D
0, D
0.73, D
0, D
8, D
3]) Sig
14) SE Sig
white
    pad :: Sig -> SE (Sig, Sig)
pad Sig
x = SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => a -> a
envelope (SE (Sig, Sig) -> SE (Sig, Sig)) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
filter Sig
x (SE (Sig, Sig) -> SE (Sig, Sig)) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ PadsynthSpec -> Sig -> SE (Sig, Sig)
padsynthOsc2 PadsynthSpec
spec Sig
x SE (Sig, Sig) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. Num a => a -> a -> a
+ Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.15 (PadsynthSpec -> Sig -> SE (Sig, Sig)
padsynthOsc2 PadsynthSpec
spec (Sig
x Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
5)) SE (Sig, Sig) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. Num a => a -> a -> a
+ Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.5 (PadsynthSpec -> Sig -> SE (Sig, Sig)
padsynthOsc2 PadsynthSpec
spec (Sig
x Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
2))

    envelope :: a -> a
envelope a
asig = Sig -> a -> a
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> Sig
fades D
0.5 D
0.7) a
asig
    filter :: Sig -> c -> AtOut Sig Sig c
filter Sig
cps c
asig = (Sig -> Sig) -> c -> AtOut Sig Sig c
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (Sig -> Sig -> Sig
bhp Sig
30) (c -> AtOut Sig Sig c) -> c -> AtOut Sig Sig c
forall a b. (a -> b) -> a -> b
$ (Sig -> Sig) -> c -> AtOut Sig Sig c
forall a b. At Sig a b => (Sig -> a) -> b -> AtOut Sig a b
bat (ResonFilter
lp (Sig
200 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ (Sig
cps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
3000)) Sig
45) (c -> AtOut Sig Sig c) -> c -> AtOut Sig Sig c
forall a b. (a -> b) -> a -> b
$ c
asig

    spec :: PadsynthSpec
spec = PadsynthSpec
noisySpec

noisySpiral :: Patch2
noisySpiral :: Patch2
noisySpiral = D -> Patch2
noisySpiral' D
8

-- | Oscillating noise:
--
-- > noisySpiral' finalSpeedOfOscillation
noisySpiral' :: D -> Patch2
noisySpiral' :: D -> Patch2
noisySpiral' D
spiralSpeed = Patch2 -> Patch2
fxs (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ (Sig -> SE (Sig, Sig))
-> CsdNote D -> SE (CpsInstrOut (Sig -> SE (Sig, Sig)))
forall a. CpsInstr a => a -> CsdNote D -> SE (CpsInstrOut a)
onCps ((Sig -> SE (Sig, Sig))
 -> CsdNote D -> SE (CpsInstrOut (Sig -> SE (Sig, Sig))))
-> (Sig -> SE (Sig, Sig))
-> CsdNote D
-> SE (CpsInstrOut (Sig -> SE (Sig, Sig)))
forall a b. (a -> b) -> a -> b
$ \Sig
cps -> Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.24 (SE (Sig, Sig) -> SE (Sig, Sig)) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> SE (Sig, Sig)
wave Sig
cps
  where
    fxs :: Patch2 -> Patch2
fxs = [GenFxSpec (Sig, Sig)] -> Patch2 -> Patch2
forall a. [GenFxSpec a] -> Patch a -> Patch a
FxChain [Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
0.15 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig, Sig) -> (Sig, Sig)
magicCave2), Sig -> ((Sig, Sig) -> SE (Sig, Sig)) -> GenFxSpec (Sig, Sig)
forall a. Sig -> Fx a -> GenFxSpec a
fxSpec Sig
0.43 ((Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig))
-> ((Sig, Sig) -> (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at ((Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig))
-> (Sig -> Sig) -> (Sig, Sig) -> AtOut Sig Sig (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ D -> Sig -> Sig -> Sig
echo D
0.35 Sig
0.85))]

    wave :: Sig -> SE (Sig, Sig)
wave Sig
x  = Sig -> SE (Sig, Sig)
noisy Sig
x SE (Sig, Sig) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. Num a => a -> a -> a
+ Sig -> SE (Sig, Sig)
pad Sig
x
    noisy :: Sig -> AtOut Sig (Sig, Sig) (SE Sig)
noisy Sig
x = (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (Sig -> (Sig, Sig) -> (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.3 ((Sig, Sig) -> (Sig, Sig))
-> (Sig -> (Sig, Sig)) -> Sig -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> (Sig, Sig)
fromMono (Sig -> (Sig, Sig)) -> (Sig -> Sig) -> Sig -> (Sig, Sig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> Sig) -> Sig -> AtOut Sig Sig Sig
forall a b. At Sig a b => (Sig -> a) -> b -> AtOut Sig a b
bat (ResonFilter
bp (Sig
x Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
5) Sig
23) (Sig -> Sig) -> (Sig -> Sig) -> Sig -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ResonFilter
lp (Sig
300 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
2500 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* [D] -> Sig
linseg [D
0, D
0.73, D
0, D
8, D
3] Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
uosc ([D] -> Sig
expseg [D
0.25, D
5, D
spiralSpeed])) Sig
14) SE Sig
white
    pad :: Sig -> SE (Sig, Sig)
pad Sig
x = SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => a -> a
envelope (SE (Sig, Sig) -> SE (Sig, Sig)) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
filter Sig
x (SE (Sig, Sig) -> SE (Sig, Sig)) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ PadsynthSpec -> Sig -> SE (Sig, Sig)
padsynthOsc2 PadsynthSpec
spec Sig
x SE (Sig, Sig) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. Num a => a -> a -> a
+ Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.15 (PadsynthSpec -> Sig -> SE (Sig, Sig)
padsynthOsc2 PadsynthSpec
spec (Sig
x Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
5)) SE (Sig, Sig) -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. Num a => a -> a -> a
+ Sig -> SE (Sig, Sig) -> SE (Sig, Sig)
forall a. SigSpace a => Sig -> a -> a
mul Sig
0.5 (PadsynthSpec -> Sig -> SE (Sig, Sig)
padsynthOsc2 PadsynthSpec
spec (Sig
x Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
2))
    envelope :: a -> a
envelope a
asig = Sig -> a -> a
forall a. SigSpace a => Sig -> a -> a
mul (D -> D -> Sig
fades D
0.5 D
0.7) a
asig
    filter :: Sig -> c -> AtOut Sig Sig c
filter Sig
cps c
asig = (Sig -> Sig) -> c -> AtOut Sig Sig c
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (Sig -> Sig -> Sig
bhp Sig
30) (c -> AtOut Sig Sig c) -> c -> AtOut Sig Sig c
forall a b. (a -> b) -> a -> b
$ (Sig -> Sig) -> c -> AtOut Sig Sig c
forall a b. At Sig a b => (Sig -> a) -> b -> AtOut Sig a b
bat (ResonFilter
lp (Sig
200 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ (Sig
cps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
3000)) Sig
45) (c -> AtOut Sig Sig c) -> c -> AtOut Sig Sig c
forall a b. (a -> b) -> a -> b
$ c
asig

    spec :: PadsynthSpec
spec = PadsynthSpec
noisySpec

noisyHarms :: [PadsynthBandwidth]
noisyHarms = [ PadsynthBandwidth
1,  PadsynthBandwidth
1, PadsynthBandwidth
0.7600046992, PadsynthBandwidth
0.6199994683, PadsynthBandwidth
0.9399998784, PadsynthBandwidth
0.4400023818, PadsynthBandwidth
0.0600003302, PadsynthBandwidth
0.8499968648, PadsynthBandwidth
0.0899999291, PadsynthBandwidth
0.8199964762, PadsynthBandwidth
0.3199984133, PadsynthBandwidth
0.9400014281, PadsynthBandwidth
0.3000001907, PadsynthBandwidth
0.120003365, PadsynthBandwidth
0.1799997687, PadsynthBandwidth
0.5200006366]
noisySpec :: PadsynthSpec
noisySpec  = PadsynthBandwidth -> [PadsynthBandwidth] -> PadsynthSpec
defPadsynthSpec PadsynthBandwidth
82.2 [PadsynthBandwidth]
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)


----------------------------------

dafunkWave :: Sig -> (t -> t -> t -> t -> Sig) -> (Sig, Sig) -> AtOut Sig Sig Sig
dafunkWave Sig
cfq t -> t -> t -> t -> Sig
adsrFun (Sig
amp, Sig
cps) = (Sig -> Sig) -> Sig -> AtOut Sig Sig Sig
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (Sig -> Sig -> Sig
bhp Sig
30) (Sig -> AtOut Sig Sig Sig) -> Sig -> AtOut Sig Sig Sig
forall a b. (a -> b) -> a -> b
$ D -> ResonFilter
diode D
1.2 (Sig
550 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
4500 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
cfq) (Sig
0.52 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
0.4 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
cfq) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig
amp Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
env Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (\Sig
x -> Sig -> Sig
saw Sig
x Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
0.5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig
saw (Sig
x Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.503) Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
0.25 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig -> Sig
sqr (Sig
x Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
0.253))) (Sig -> D -> Sig
port Sig
cps D
0.001)
    where
        env :: Sig
env = t -> t -> t -> t -> Sig
adsrFun t
0.019 t
8.5 t
0.2 t
0.07

dafunkLead :: Patch2
dafunkLead = (MonoAdsr -> (Sig, Sig) -> SE (Sig, Sig)) -> Patch2
forall a. (MonoAdsr -> Instr Sig a) -> Patch a
adsrMono (\MonoAdsr
env (Sig
amp, Sig
cps) -> (Sig, Sig) -> SE (Sig, Sig)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Sig, Sig) -> SE (Sig, Sig)) -> (Sig, Sig) -> SE (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> (Sig, Sig)
fromMono (Sig -> (Sig, Sig)) -> Sig -> (Sig, Sig)
forall a b. (a -> b) -> a -> b
$ Sig -> MonoAdsr -> (Sig, Sig) -> Sig
forall t t t t.
(Fractional t, Fractional t, Fractional t, Fractional t) =>
Sig -> (t -> t -> t -> t -> Sig) -> (Sig, Sig) -> Sig
dafunkWave Sig
cfq MonoAdsr
env (Sig
amp, Sig
cps))
    where cfq :: Sig
cfq = Tab -> Sig -> Sig
uoscBy ([PadsynthBandwidth] -> Tab
sines [PadsynthBandwidth
1, PadsynthBandwidth
0, PadsynthBandwidth
0, PadsynthBandwidth
0, PadsynthBandwidth
0.05]) Sig
0.5


celloSynt :: Patch2
celloSynt :: Patch2
celloSynt = Sig -> Patch2 -> Patch2
withSmallHall' Sig
0.25 (Patch2 -> Patch2) -> Patch2 -> Patch2
forall a b. (a -> b) -> a -> b
$ Instr D (Sig, Sig) -> Patch2
forall a. Instr D a -> Patch a
polySynt (Instr D (Sig, Sig) -> Patch2) -> Instr D (Sig, Sig) -> Patch2
forall a b. (a -> b) -> a -> b
$ \(D
amp, D
cps) -> (Sig -> (Sig, Sig)) -> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> (Sig, Sig)
fromMono (SE Sig -> AtOut Sig (Sig, Sig) (SE Sig))
-> SE Sig -> AtOut Sig (Sig, Sig) (SE Sig)
forall a b. (a -> b) -> a -> b
$ (D, Sig) -> SE Sig
C.celloWave (D
amp, D -> Sig
sig D
cps)