packages feed

csound-catalog 0.2.2 → 0.3.0

raw patch · 18 files changed

+3018/−154 lines, 18 filesdep +csound-samplerdep ~csound-expressionPVP ok

version bump matches the API change (PVP)

Dependencies added: csound-sampler

Dependency ranges changed: csound-expression

API changes (from Hackage documentation)

- Csound.Catalog.Drum: bassDrum :: D -> Sig
- Csound.Catalog.Drum: closedHihat :: SE Sig
- Csound.Catalog.Drum: crash :: D -> SE Sig
- Csound.Catalog.Drum: dumb :: SE Sig
- Csound.Catalog.Drum: dumbBass :: SE Sig
- Csound.Catalog.Drum: handClap :: D -> SE Sig
- Csound.Catalog.Drum: metalBoink :: Sig
- Csound.Catalog.Drum: openHihat :: SE Sig
- Csound.Catalog.Drum: pluckSnare :: Sig
- Csound.Catalog.Drum: snare :: SE Sig
- Csound.Catalog.Drum: sortaKnockSweep :: SE Sig
- Csound.Catalog.Reson: modesFrequencies :: Modes a -> [a]
- Csound.Catalog.Reson: modesGain :: Modes a -> a
- Csound.Catalog.Reson: modesQualityFactor :: Modes a -> a
- Csound.Catalog.Reson: modesQualityRatios :: Modes a -> [a]
+ Csound.Catalog.Drum: boo :: Sam
+ Csound.Catalog.Drum: cab :: Sam
+ Csound.Catalog.Drum: crun :: Sam
+ Csound.Catalog.Drum: gro :: Sam
+ Csound.Catalog.Drum: hmBd1 :: Sam
+ Csound.Catalog.Drum: hmBd2 :: Sam
+ Csound.Catalog.Drum: hmBd3 :: Sam
+ Csound.Catalog.Drum: hmBoink :: Sam
+ Csound.Catalog.Drum: hmChh :: Sam
+ Csound.Catalog.Drum: hmClap :: Sam
+ Csound.Catalog.Drum: hmCr :: Sam
+ Csound.Catalog.Drum: hmOhh :: Sam
+ Csound.Catalog.Drum: hmSn1 :: Sam
+ Csound.Catalog.Drum: hmSn2 :: Sam
+ Csound.Catalog.Drum: hmSweeo :: Sam
+ Csound.Catalog.Drum: mpBd :: Sam
+ Csound.Catalog.Drum: mpBon1 :: Sam
+ Csound.Catalog.Drum: mpBon2 :: Sam
+ Csound.Catalog.Drum: mpBon3 :: Sam
+ Csound.Catalog.Drum: mpCl :: Sam
+ Csound.Catalog.Drum: mpCow :: Sam
+ Csound.Catalog.Drum: mpCym1 :: Sam
+ Csound.Catalog.Drum: mpCym2 :: Sam
+ Csound.Catalog.Drum: mpGro :: Sam
+ Csound.Catalog.Drum: mpMar :: Sam
+ Csound.Catalog.Drum: mpQj :: Sam
+ Csound.Catalog.Drum: mpRim :: Sam
+ Csound.Catalog.Drum: mpSn1 :: Sam
+ Csound.Catalog.Drum: mpSn2 :: Sam
+ Csound.Catalog.Drum: mpTam :: Sam
+ Csound.Catalog.Drum: sbells :: Sam
+ Csound.Catalog.Drum: shake :: Sig -> Sam
+ Csound.Catalog.Drum: spaper :: Sam
+ Csound.Catalog.Drum: tam :: Sam
+ Csound.Catalog.Drum: trBd :: Sam
+ Csound.Catalog.Drum: trChh :: Sam
+ Csound.Catalog.Drum: trCl :: Sam
+ Csound.Catalog.Drum: trCym :: Sam
+ Csound.Catalog.Drum: trHcon :: Sam
+ Csound.Catalog.Drum: trHtom :: Sam
+ Csound.Catalog.Drum: trLcon :: Sam
+ Csound.Catalog.Drum: trLtom :: Sam
+ Csound.Catalog.Drum: trMar :: Sam
+ Csound.Catalog.Drum: trMcon :: Sam
+ Csound.Catalog.Drum: trMtom :: Sam
+ Csound.Catalog.Drum: trOhh :: Sam
+ Csound.Catalog.Drum: trRim :: Sam
+ Csound.Catalog.Drum: trSn :: Sam
+ Csound.Catalog.Drum.Hm: bassDrum :: SE Sig
+ Csound.Catalog.Drum.Hm: bassDrum' :: D -> SE Sig
+ Csound.Catalog.Drum.Hm: bd1 :: Sam
+ Csound.Catalog.Drum.Hm: bd2 :: Sam
+ Csound.Catalog.Drum.Hm: bd3 :: Sam
+ Csound.Catalog.Drum.Hm: boink :: Sam
+ Csound.Catalog.Drum.Hm: chh :: Sam
+ Csound.Catalog.Drum.Hm: clap :: Sam
+ Csound.Catalog.Drum.Hm: closedHihat :: SE Sig
+ Csound.Catalog.Drum.Hm: cr :: Sam
+ Csound.Catalog.Drum.Hm: crash :: SE Sig
+ Csound.Catalog.Drum.Hm: crash' :: D -> SE Sig
+ Csound.Catalog.Drum.Hm: dumb :: SE Sig
+ Csound.Catalog.Drum.Hm: dumbBass :: SE Sig
+ Csound.Catalog.Drum.Hm: handClap :: SE Sig
+ Csound.Catalog.Drum.Hm: handClap' :: D -> SE Sig
+ Csound.Catalog.Drum.Hm: metalBoink :: SE Sig
+ Csound.Catalog.Drum.Hm: ohh :: Sam
+ Csound.Catalog.Drum.Hm: openHihat :: SE Sig
+ Csound.Catalog.Drum.Hm: pluckSnare :: SE Sig
+ Csound.Catalog.Drum.Hm: sn1 :: Sam
+ Csound.Catalog.Drum.Hm: sn2 :: Sam
+ Csound.Catalog.Drum.Hm: snare :: SE Sig
+ Csound.Catalog.Drum.Hm: sortaKnockSweep :: SE Sig
+ Csound.Catalog.Drum.Hm: sweep :: Sam
+ Csound.Catalog.Drum.MiniPops: MpSpec :: D -> D -> Maybe D -> MpSpec
+ Csound.Catalog.Drum.MiniPops: [mpCps] :: MpSpec -> D
+ Csound.Catalog.Drum.MiniPops: [mpDur] :: MpSpec -> D
+ Csound.Catalog.Drum.MiniPops: [mpRnd] :: MpSpec -> Maybe D
+ Csound.Catalog.Drum.MiniPops: bass :: SE Sig
+ Csound.Catalog.Drum.MiniPops: bass' :: MpSpec -> SE Sig
+ Csound.Catalog.Drum.MiniPops: bd :: Sam
+ Csound.Catalog.Drum.MiniPops: bd' :: MpSpec -> Sam
+ Csound.Catalog.Drum.MiniPops: bdSpec :: MpSpec
+ Csound.Catalog.Drum.MiniPops: bon1 :: Sam
+ Csound.Catalog.Drum.MiniPops: bon1' :: MpSpec -> Sam
+ Csound.Catalog.Drum.MiniPops: bon2 :: Sam
+ Csound.Catalog.Drum.MiniPops: bon2' :: MpSpec -> Sam
+ Csound.Catalog.Drum.MiniPops: bon3 :: Sam
+ Csound.Catalog.Drum.MiniPops: bon3' :: MpSpec -> Sam
+ Csound.Catalog.Drum.MiniPops: bonSpec1 :: MpSpec
+ Csound.Catalog.Drum.MiniPops: bonSpec2 :: MpSpec
+ Csound.Catalog.Drum.MiniPops: bonSpec3 :: MpSpec
+ Csound.Catalog.Drum.MiniPops: bongo1 :: SE Sig
+ Csound.Catalog.Drum.MiniPops: bongo1' :: MpSpec -> SE Sig
+ Csound.Catalog.Drum.MiniPops: bongo2 :: SE Sig
+ Csound.Catalog.Drum.MiniPops: bongo2' :: MpSpec -> SE Sig
+ Csound.Catalog.Drum.MiniPops: bongo3 :: SE Sig
+ Csound.Catalog.Drum.MiniPops: bongo3' :: MpSpec -> SE Sig
+ Csound.Catalog.Drum.MiniPops: cl :: Sam
+ Csound.Catalog.Drum.MiniPops: cl' :: MpSpec -> Sam
+ Csound.Catalog.Drum.MiniPops: clSpec :: MpSpec
+ Csound.Catalog.Drum.MiniPops: claves :: SE Sig
+ Csound.Catalog.Drum.MiniPops: claves' :: MpSpec -> SE Sig
+ Csound.Catalog.Drum.MiniPops: cow :: Sam
+ Csound.Catalog.Drum.MiniPops: cow' :: MpSpec -> Sam
+ Csound.Catalog.Drum.MiniPops: cowSpec :: MpSpec
+ Csound.Catalog.Drum.MiniPops: cowbell :: SE Sig
+ Csound.Catalog.Drum.MiniPops: cowbell' :: MpSpec -> SE Sig
+ Csound.Catalog.Drum.MiniPops: cym1 :: Sam
+ Csound.Catalog.Drum.MiniPops: cym1' :: MpSpec -> Sam
+ Csound.Catalog.Drum.MiniPops: cym2 :: Sam
+ Csound.Catalog.Drum.MiniPops: cym2' :: MpSpec -> Sam
+ Csound.Catalog.Drum.MiniPops: cymSpec1 :: MpSpec
+ Csound.Catalog.Drum.MiniPops: cymSpec2 :: MpSpec
+ Csound.Catalog.Drum.MiniPops: cymbal1 :: SE Sig
+ Csound.Catalog.Drum.MiniPops: cymbal1' :: MpSpec -> SE Sig
+ Csound.Catalog.Drum.MiniPops: cymbal2 :: SE Sig
+ Csound.Catalog.Drum.MiniPops: cymbal2' :: MpSpec -> SE Sig
+ Csound.Catalog.Drum.MiniPops: data MpSpec
+ Csound.Catalog.Drum.MiniPops: gro :: Sam
+ Csound.Catalog.Drum.MiniPops: gro' :: MpSpec -> Sam
+ Csound.Catalog.Drum.MiniPops: groSpec :: MpSpec
+ Csound.Catalog.Drum.MiniPops: guiro :: SE Sig
+ Csound.Catalog.Drum.MiniPops: guiro' :: MpSpec -> SE Sig
+ Csound.Catalog.Drum.MiniPops: mar :: Sam
+ Csound.Catalog.Drum.MiniPops: mar' :: MpSpec -> Sam
+ Csound.Catalog.Drum.MiniPops: marSpec :: MpSpec
+ Csound.Catalog.Drum.MiniPops: maracas :: SE Sig
+ Csound.Catalog.Drum.MiniPops: maracas' :: MpSpec -> SE Sig
+ Csound.Catalog.Drum.MiniPops: qj :: Sam
+ Csound.Catalog.Drum.MiniPops: qj' :: MpSpec -> Sam
+ Csound.Catalog.Drum.MiniPops: qjSpec :: MpSpec
+ Csound.Catalog.Drum.MiniPops: quijada :: SE Sig
+ Csound.Catalog.Drum.MiniPops: quijada' :: MpSpec -> SE Sig
+ Csound.Catalog.Drum.MiniPops: rim :: Sam
+ Csound.Catalog.Drum.MiniPops: rim' :: MpSpec -> Sam
+ Csound.Catalog.Drum.MiniPops: rimShot :: SE Sig
+ Csound.Catalog.Drum.MiniPops: rimShot' :: MpSpec -> SE Sig
+ Csound.Catalog.Drum.MiniPops: rimSpec :: MpSpec
+ Csound.Catalog.Drum.MiniPops: sn1 :: Sam
+ Csound.Catalog.Drum.MiniPops: sn1' :: MpSpec -> Sam
+ Csound.Catalog.Drum.MiniPops: sn2 :: Sam
+ Csound.Catalog.Drum.MiniPops: sn2' :: MpSpec -> Sam
+ Csound.Catalog.Drum.MiniPops: snSpec1 :: MpSpec
+ Csound.Catalog.Drum.MiniPops: snSpec2 :: MpSpec
+ Csound.Catalog.Drum.MiniPops: snare1 :: SE Sig
+ Csound.Catalog.Drum.MiniPops: snare1' :: MpSpec -> SE Sig
+ Csound.Catalog.Drum.MiniPops: snare2 :: SE Sig
+ Csound.Catalog.Drum.MiniPops: snare2' :: MpSpec -> SE Sig
+ Csound.Catalog.Drum.MiniPops: tam :: Sam
+ Csound.Catalog.Drum.MiniPops: tam' :: MpSpec -> Sam
+ Csound.Catalog.Drum.MiniPops: tamSpec :: MpSpec
+ Csound.Catalog.Drum.MiniPops: tamb :: SE Sig
+ Csound.Catalog.Drum.MiniPops: tamb' :: MpSpec -> SE Sig
+ Csound.Catalog.Drum.Tr808: TrSpec :: D -> D -> D -> Maybe D -> TrSpec
+ Csound.Catalog.Drum.Tr808: [trCps] :: TrSpec -> D
+ Csound.Catalog.Drum.Tr808: [trDur] :: TrSpec -> D
+ Csound.Catalog.Drum.Tr808: [trRnd] :: TrSpec -> Maybe D
+ Csound.Catalog.Drum.Tr808: [trTune] :: TrSpec -> D
+ Csound.Catalog.Drum.Tr808: bass :: SE Sig
+ Csound.Catalog.Drum.Tr808: bass' :: TrSpec -> SE Sig
+ Csound.Catalog.Drum.Tr808: bass2 :: SE Sig
+ Csound.Catalog.Drum.Tr808: bass2' :: TrSpec -> SE Sig
+ Csound.Catalog.Drum.Tr808: bd :: Sam
+ Csound.Catalog.Drum.Tr808: bd' :: TrSpec -> Sam
+ Csound.Catalog.Drum.Tr808: bd2 :: Sam
+ Csound.Catalog.Drum.Tr808: bd2' :: TrSpec -> Sam
+ Csound.Catalog.Drum.Tr808: bdSpec :: TrSpec
+ Csound.Catalog.Drum.Tr808: bdSpec2 :: TrSpec
+ Csound.Catalog.Drum.Tr808: chSpec :: TrSpec
+ Csound.Catalog.Drum.Tr808: chh :: Sam
+ Csound.Catalog.Drum.Tr808: chh' :: TrSpec -> Sam
+ Csound.Catalog.Drum.Tr808: cl :: Sam
+ Csound.Catalog.Drum.Tr808: cl' :: TrSpec -> Sam
+ Csound.Catalog.Drum.Tr808: clSpec :: TrSpec
+ Csound.Catalog.Drum.Tr808: claves :: SE Sig
+ Csound.Catalog.Drum.Tr808: claves' :: TrSpec -> SE Sig
+ Csound.Catalog.Drum.Tr808: closedHiHat :: SE Sig
+ Csound.Catalog.Drum.Tr808: closedHiHat' :: TrSpec -> SE Sig
+ Csound.Catalog.Drum.Tr808: cym :: Sam
+ Csound.Catalog.Drum.Tr808: cym' :: TrSpec -> Sam
+ Csound.Catalog.Drum.Tr808: cymSpec :: TrSpec
+ Csound.Catalog.Drum.Tr808: cymbal :: SE Sig
+ Csound.Catalog.Drum.Tr808: cymbal' :: TrSpec -> SE Sig
+ Csound.Catalog.Drum.Tr808: data TrSpec
+ Csound.Catalog.Drum.Tr808: hcSpec :: TrSpec
+ Csound.Catalog.Drum.Tr808: hcon :: Sam
+ Csound.Catalog.Drum.Tr808: hcon' :: TrSpec -> Sam
+ Csound.Catalog.Drum.Tr808: highConga :: SE Sig
+ Csound.Catalog.Drum.Tr808: highConga' :: TrSpec -> SE Sig
+ Csound.Catalog.Drum.Tr808: highTom :: SE Sig
+ Csound.Catalog.Drum.Tr808: highTom' :: TrSpec -> SE Sig
+ Csound.Catalog.Drum.Tr808: htSpec :: TrSpec
+ Csound.Catalog.Drum.Tr808: htom :: Sam
+ Csound.Catalog.Drum.Tr808: htom' :: TrSpec -> Sam
+ Csound.Catalog.Drum.Tr808: lcSpec :: TrSpec
+ Csound.Catalog.Drum.Tr808: lcon :: Sam
+ Csound.Catalog.Drum.Tr808: lcon' :: TrSpec -> Sam
+ Csound.Catalog.Drum.Tr808: lowConga :: SE Sig
+ Csound.Catalog.Drum.Tr808: lowConga' :: TrSpec -> SE Sig
+ Csound.Catalog.Drum.Tr808: lowTom :: SE Sig
+ Csound.Catalog.Drum.Tr808: lowTom' :: TrSpec -> SE Sig
+ Csound.Catalog.Drum.Tr808: ltSpec :: TrSpec
+ Csound.Catalog.Drum.Tr808: ltom :: Sam
+ Csound.Catalog.Drum.Tr808: ltom' :: TrSpec -> Sam
+ Csound.Catalog.Drum.Tr808: mar :: Sam
+ Csound.Catalog.Drum.Tr808: mar' :: TrSpec -> Sam
+ Csound.Catalog.Drum.Tr808: marSpec :: TrSpec
+ Csound.Catalog.Drum.Tr808: maraca :: SE Sig
+ Csound.Catalog.Drum.Tr808: maraca' :: TrSpec -> SE Sig
+ Csound.Catalog.Drum.Tr808: mcSpec :: TrSpec
+ Csound.Catalog.Drum.Tr808: mcon :: Sam
+ Csound.Catalog.Drum.Tr808: mcon' :: TrSpec -> Sam
+ Csound.Catalog.Drum.Tr808: midConga :: SE Sig
+ Csound.Catalog.Drum.Tr808: midConga' :: TrSpec -> SE Sig
+ Csound.Catalog.Drum.Tr808: midTom :: SE Sig
+ Csound.Catalog.Drum.Tr808: midTom' :: TrSpec -> SE Sig
+ Csound.Catalog.Drum.Tr808: mtSpec :: TrSpec
+ Csound.Catalog.Drum.Tr808: mtom :: Sam
+ Csound.Catalog.Drum.Tr808: mtom' :: TrSpec -> Sam
+ Csound.Catalog.Drum.Tr808: ohSpec :: TrSpec
+ Csound.Catalog.Drum.Tr808: ohh :: Sam
+ Csound.Catalog.Drum.Tr808: ohh' :: TrSpec -> Sam
+ Csound.Catalog.Drum.Tr808: openHiHat :: SE Sig
+ Csound.Catalog.Drum.Tr808: openHiHat' :: TrSpec -> SE Sig
+ Csound.Catalog.Drum.Tr808: rim :: Sam
+ Csound.Catalog.Drum.Tr808: rim' :: TrSpec -> Sam
+ Csound.Catalog.Drum.Tr808: rimShot :: SE Sig
+ Csound.Catalog.Drum.Tr808: rimShot' :: TrSpec -> SE Sig
+ Csound.Catalog.Drum.Tr808: rimSpec :: TrSpec
+ Csound.Catalog.Drum.Tr808: sn :: Sam
+ Csound.Catalog.Drum.Tr808: sn' :: TrSpec -> Sam
+ Csound.Catalog.Drum.Tr808: snSpec :: TrSpec
+ Csound.Catalog.Drum.Tr808: snare :: SE Sig
+ Csound.Catalog.Drum.Tr808: snare' :: TrSpec -> SE Sig
+ Csound.Catalog.Reson: [modesFrequencies] :: Modes a -> [a]
+ Csound.Catalog.Reson: [modesGain] :: Modes a -> a
+ Csound.Catalog.Reson: [modesQualityFactor] :: Modes a -> a
+ Csound.Catalog.Reson: [modesQualityRatios] :: Modes a -> [a]
+ Csound.Catalog.Wave: Accordeon :: Sig -> Sig -> Sig -> Sig -> Accordeon
+ Csound.Catalog.Wave: EpianoOsc :: Int -> Sig -> Sig -> Sig -> EpianoOsc
+ Csound.Catalog.Wave: RissetBellSpec :: [D] -> [D] -> [D] -> [Sig] -> [Sig] -> [Sig] -> RissetBellSpec
+ Csound.Catalog.Wave: [accordeonFreq1] :: Accordeon -> Sig
+ Csound.Catalog.Wave: [accordeonFreq2] :: Accordeon -> Sig
+ Csound.Catalog.Wave: [accordeonFreq3] :: Accordeon -> Sig
+ Csound.Catalog.Wave: [accordeonFreq4] :: Accordeon -> Sig
+ Csound.Catalog.Wave: [epianoOscChorusAmt] :: EpianoOsc -> Sig
+ Csound.Catalog.Wave: [epianoOscChorusNum] :: EpianoOsc -> Int
+ Csound.Catalog.Wave: [epianoOscNum] :: EpianoOsc -> Sig
+ Csound.Catalog.Wave: [epianoOscWeight] :: EpianoOsc -> Sig
+ Csound.Catalog.Wave: [rissetBellAmps] :: RissetBellSpec -> [Sig]
+ Csound.Catalog.Wave: [rissetBellDurs] :: RissetBellSpec -> [D]
+ Csound.Catalog.Wave: [rissetBellFreqShifts] :: RissetBellSpec -> [Sig]
+ Csound.Catalog.Wave: [rissetBellFreqs] :: RissetBellSpec -> [Sig]
+ Csound.Catalog.Wave: [rissetBellRandShifts] :: RissetBellSpec -> [D]
+ Csound.Catalog.Wave: [rissetBellRands] :: RissetBellSpec -> [D]
+ Csound.Catalog.Wave: accordeon :: Accordeon -> Sig -> SE Sig2
+ Csound.Catalog.Wave: accordeonFx :: Sig2 -> SE Sig2
+ Csound.Catalog.Wave: amFlavio :: t -> Sig -> Sig
+ Csound.Catalog.Wave: amPiano :: Sig -> SE Sig
+ Csound.Catalog.Wave: boom :: Sig -> SE Sig
+ Csound.Catalog.Wave: cathedralOrgan :: Sig -> SE Sig
+ Csound.Catalog.Wave: cathedralOrganFx :: Sig -> Sig2
+ Csound.Catalog.Wave: data Accordeon
+ Csound.Catalog.Wave: data EpianoOsc
+ Csound.Catalog.Wave: data RissetBellSpec
+ Csound.Catalog.Wave: deepBass :: Sig -> Sig
+ Csound.Catalog.Wave: dreamPad :: Sig -> Sig -> SE Sig
+ Csound.Catalog.Wave: epiano :: [EpianoOsc] -> (D, D) -> SE Sig
+ Csound.Catalog.Wave: fmDrone :: Sig -> (D, D) -> Sig -> (Sig, Sig)
+ Csound.Catalog.Wave: fmDrones :: Sig -> [Sig] -> [Sig] -> (D, D) -> Sig -> SE (Sig, Sig)
+ Csound.Catalog.Wave: fmFlavio :: D -> Sig -> Sig -> Sig
+ Csound.Catalog.Wave: hammondOrgan :: Sig -> Sig -> SE Sig
+ Csound.Catalog.Wave: lightIsTooBrightPad :: Sig -> Sig -> SE Sig
+ Csound.Catalog.Wave: mildWind :: Sig -> SE Sig
+ Csound.Catalog.Wave: noiseBell :: (D, D) -> D -> Sig -> Sig -> SE Sig
+ Csound.Catalog.Wave: noiseBellSpec :: RissetBellSpec
+ Csound.Catalog.Wave: noisyChoir :: Int -> Sig -> Sig -> SE Sig
+ Csound.Catalog.Wave: polySynth :: Sig -> SE Sig
+ Csound.Catalog.Wave: polySynthFx :: SE Sig -> SE Sig2
+ Csound.Catalog.Wave: pwBass :: Sig -> SE Sig
+ Csound.Catalog.Wave: pwEnsemble :: Sig -> SE Sig
+ Csound.Catalog.Wave: pwHarpsichord :: Sig -> SE Sig
+ Csound.Catalog.Wave: pwPad :: Sig -> SE Sig
+ Csound.Catalog.Wave: razorLead :: Sig -> Sig -> Sig -> Sig -> SE Sig
+ Csound.Catalog.Wave: razorPad :: Sig -> Sig -> Sig -> SE Sig
+ Csound.Catalog.Wave: rissetBell :: RissetBellSpec -> (D, D) -> D -> Sig -> Sig -> SE Sig
+ Csound.Catalog.Wave: simpleBass :: (D, D) -> Sig
+ Csound.Catalog.Wave: simpleFading :: D -> (D, D) -> SE (Sig, Sig)
+ Csound.Catalog.Wave: simpleSust :: D -> (D, D) -> SE (Sig, Sig)
+ Csound.Catalog.Wave: snowCrackle :: Sig -> Sig
+ Csound.Catalog.Wave: sopranoOsc :: (Sig -> Sig) -> Sig -> Sig -> SE Sig
+ Csound.Catalog.Wave: tenorOsc :: (Sig -> Sig) -> Sig -> Sig -> SE Sig
+ Csound.Catalog.Wave: thorWind :: Sig -> Sig -> (Sig, Sig) -> SE Sig
+ Csound.Catalog.Wave: timpani :: (D, D) -> D -> Sig -> Sig -> SE Sig
+ Csound.Catalog.Wave: timpaniSpec :: RissetBellSpec
+ Csound.Catalog.Wave: triPad :: Sig -> SE Sig
+ Csound.Catalog.Wave: triPadFx :: Sig2 -> SE Sig2
+ Csound.Catalog.Wave: underwaterPad :: Sig -> Sig -> SE Sig
+ Csound.Catalog.Wave: whaleSongPad :: Sig -> Sig -> SE Sig
+ Csound.Catalog.Wave: windWall :: Sig -> SE Sig
+ Csound.Patch: Accordeon :: Sig -> Sig -> Sig -> Sig -> Accordeon
+ Csound.Patch: Choir :: Sig -> Choir
+ Csound.Patch: Epiano1 :: D -> Epiano1
+ Csound.Patch: HammondOrgan :: Sig -> HammondOrgan
+ Csound.Patch: MutedPiano :: Sig -> D -> MutedPiano
+ Csound.Patch: NoisyChoir :: Int -> Sig -> NoisyChoir
+ Csound.Patch: RazorLead :: Sig -> Sig -> RazorLead
+ Csound.Patch: RazorPad :: Sig -> RazorPad
+ Csound.Patch: Wind :: D -> D -> D -> D -> D -> Wind
+ Csound.Patch: [accordeonFreq1] :: Accordeon -> Sig
+ Csound.Patch: [accordeonFreq2] :: Accordeon -> Sig
+ Csound.Patch: [accordeonFreq3] :: Accordeon -> Sig
+ Csound.Patch: [accordeonFreq4] :: Accordeon -> Sig
+ Csound.Patch: [choirVibr] :: Choir -> Sig
+ Csound.Patch: [epiano1Rel] :: Epiano1 -> D
+ Csound.Patch: [hammondOrganDetune] :: HammondOrgan -> Sig
+ Csound.Patch: [mutedPianoMute] :: MutedPiano -> Sig
+ Csound.Patch: [mutedPianoRel] :: MutedPiano -> D
+ Csound.Patch: [noisyChoirBw] :: NoisyChoir -> Sig
+ Csound.Patch: [noisyChoirFilterNum] :: NoisyChoir -> Int
+ Csound.Patch: [razorLeadBright] :: RazorLead -> Sig
+ Csound.Patch: [razorLeadSpeed] :: RazorLead -> Sig
+ Csound.Patch: [razorPadSpeed] :: RazorPad -> Sig
+ Csound.Patch: [windAtt] :: Wind -> D
+ Csound.Patch: [windBright] :: Wind -> D
+ Csound.Patch: [windDec] :: Wind -> D
+ Csound.Patch: [windSus] :: Wind -> D
+ Csound.Patch: [windVib] :: Wind -> D
+ Csound.Patch: accordeon :: Patch Sig2
+ Csound.Patch: accordeon' :: Accordeon -> Patch Sig2
+ Csound.Patch: accordeonBright1 :: Patch Sig2
+ Csound.Patch: accordeonBright2 :: Patch Sig2
+ Csound.Patch: albertClockBellBelfast :: Patch2
+ Csound.Patch: alienIsAngry :: Patch Sig2
+ Csound.Patch: amPiano :: Patch Sig
+ Csound.Patch: banyan :: Patch2
+ Csound.Patch: bassClarinet :: Patch (Sig, Sig)
+ Csound.Patch: bassClarinetSpec :: D -> D -> Wind
+ Csound.Patch: bassClarinetVibrato :: Patch (Sig, Sig)
+ Csound.Patch: black :: Patch Sig2
+ Csound.Patch: blue :: Patch Sig2
+ Csound.Patch: brightBassClarinet :: Patch (Sig, Sig)
+ Csound.Patch: brightDizi :: Patch (Sig, Sig)
+ Csound.Patch: brightFlute :: Patch (Sig, Sig)
+ Csound.Patch: brightFrenchHorn :: Patch (Sig, Sig)
+ Csound.Patch: brightHulusi :: Patch (Sig, Sig)
+ Csound.Patch: brightSheng :: Patch (Sig, Sig)
+ Csound.Patch: brokenAccordeon :: Patch Sig2
+ Csound.Patch: cathedralOrgan :: Patch Sig2
+ Csound.Patch: caveOvertonePad :: Patch Sig2
+ Csound.Patch: chalandiPlates :: Patch2
+ Csound.Patch: choirA :: Patch Sig2
+ Csound.Patch: choirA' :: Choir -> Patch Sig2
+ Csound.Patch: choirE :: Patch Sig2
+ Csound.Patch: choirE' :: Choir -> Patch Sig2
+ Csound.Patch: choirO :: Patch Sig2
+ Csound.Patch: choirO' :: Choir -> Patch Sig2
+ Csound.Patch: choirU :: Patch Sig2
+ Csound.Patch: choirU' :: Choir -> Patch Sig2
+ Csound.Patch: chorusel :: Patch Sig2
+ Csound.Patch: dahina :: Patch2
+ Csound.Patch: data Accordeon
+ Csound.Patch: data Choir
+ Csound.Patch: data Epiano1
+ Csound.Patch: data HammondOrgan
+ Csound.Patch: data MutedPiano
+ Csound.Patch: data NoisyChoir
+ Csound.Patch: data RazorLead
+ Csound.Patch: data RazorPad
+ Csound.Patch: data Wind
+ Csound.Patch: deepBass :: Patch Sig2
+ Csound.Patch: dizi :: Patch (Sig, Sig)
+ Csound.Patch: diziSpec :: D -> D -> Wind
+ Csound.Patch: diziVibrato :: Patch (Sig, Sig)
+ Csound.Patch: douglasFirWoodPlate :: Patch2
+ Csound.Patch: dreamPad :: Patch2
+ Csound.Patch: dreamPad' :: Sig -> Patch2
+ Csound.Patch: epiano1 :: Patch (Sig, Sig)
+ Csound.Patch: epiano1' :: Epiano1 -> Patch (Sig, Sig)
+ Csound.Patch: epiano2 :: Patch Sig2
+ Csound.Patch: epianoBright :: Patch Sig2
+ Csound.Patch: epianoHeavy :: Patch Sig2
+ Csound.Patch: femaleA :: Vowel
+ Csound.Patch: femaleE :: Vowel
+ Csound.Patch: femaleIY :: Vowel
+ Csound.Patch: femaleO :: Vowel
+ Csound.Patch: femaleOO :: Vowel
+ Csound.Patch: flute :: Patch (Sig, Sig)
+ Csound.Patch: fluteSpec :: D -> D -> Wind
+ Csound.Patch: fluteVibrato :: Patch (Sig, Sig)
+ Csound.Patch: fmDroneFast :: Patch Sig2
+ Csound.Patch: fmDroneMedium :: Patch Sig2
+ Csound.Patch: fmDroneSlow :: Patch Sig2
+ Csound.Patch: fmPiano :: Patch Sig2
+ Csound.Patch: frenchHorn :: Patch (Sig, Sig)
+ Csound.Patch: frenchHornSpec :: D -> D -> Wind
+ Csound.Patch: frenchHornVibrato :: Patch (Sig, Sig)
+ Csound.Patch: guitar :: Patch Sig2
+ Csound.Patch: hammondOrgan :: Patch Sig2
+ Csound.Patch: hammondOrgan' :: HammondOrgan -> Patch Sig2
+ Csound.Patch: handbell :: Patch2
+ Csound.Patch: harpsichord :: Patch Sig2
+ Csound.Patch: hulusi :: Patch (Sig, Sig)
+ Csound.Patch: hulusiSpec :: D -> D -> Wind
+ Csound.Patch: hulusiVibrato :: Patch (Sig, Sig)
+ Csound.Patch: instance Data.Default.Class.Default Csound.Patch.Choir
+ Csound.Patch: instance Data.Default.Class.Default Csound.Patch.Epiano1
+ Csound.Patch: instance Data.Default.Class.Default Csound.Patch.HammondOrgan
+ Csound.Patch: instance Data.Default.Class.Default Csound.Patch.MutedPiano
+ Csound.Patch: instance Data.Default.Class.Default Csound.Patch.NoisyChoir
+ Csound.Patch: instance Data.Default.Class.Default Csound.Patch.RazorLead
+ Csound.Patch: instance Data.Default.Class.Default Csound.Patch.RazorPad
+ Csound.Patch: instance Data.Default.Class.Default Csound.Patch.Strike
+ Csound.Patch: largeAlbertClockBellBelfast :: Patch2
+ Csound.Patch: largeBanyan :: Patch2
+ Csound.Patch: largeChalandiPlates :: Patch2
+ Csound.Patch: largeDahina :: Patch2
+ Csound.Patch: largeDouglasFirWoodPlate :: Patch2
+ Csound.Patch: largeHandbell :: Patch2
+ Csound.Patch: largePotLid :: Patch2
+ Csound.Patch: largeRedCedarWoodPlate :: Patch2
+ Csound.Patch: largeRedwoodPlate :: Patch2
+ Csound.Patch: largeSpinelSphere :: Patch2
+ Csound.Patch: largeTibetanBowl140 :: Patch2
+ Csound.Patch: largeTibetanBowl152 :: Patch2
+ Csound.Patch: largeTibetanBowl180 :: Patch2
+ Csound.Patch: largeTubularBell :: Patch2
+ Csound.Patch: largeUniformAluminumBar :: Patch2
+ Csound.Patch: largeUniformWoodenBar :: Patch2
+ Csound.Patch: largeVibraphone1 :: Patch2
+ Csound.Patch: largeVibraphone2 :: Patch2
+ Csound.Patch: largeWineGlass :: Patch2
+ Csound.Patch: largeWoodBlock :: Patch2
+ Csound.Patch: largeXylophone :: Patch2
+ Csound.Patch: lightIsTooBrightPad :: Patch2
+ Csound.Patch: lightIsTooBrightPad' :: Sig -> Patch2
+ Csound.Patch: limRel :: SigSpace a => D -> Patch a -> Patch a
+ Csound.Patch: longNoisyChoir :: Patch Sig2
+ Csound.Patch: longNoisyChoir' :: NoisyChoir -> Patch Sig2
+ Csound.Patch: magicAlbertClockBellBelfast :: Patch2
+ Csound.Patch: magicBanyan :: Patch2
+ Csound.Patch: magicChalandiPlates :: Patch2
+ Csound.Patch: magicDahina :: Patch2
+ Csound.Patch: magicDouglasFirWoodPlate :: Patch2
+ Csound.Patch: magicHandbell :: Patch2
+ Csound.Patch: magicPotLid :: Patch2
+ Csound.Patch: magicRedCedarWoodPlate :: Patch2
+ Csound.Patch: magicRedwoodPlate :: Patch2
+ Csound.Patch: magicSpinelSphere :: Patch2
+ Csound.Patch: magicTibetanBowl140 :: Patch2
+ Csound.Patch: magicTibetanBowl152 :: Patch2
+ Csound.Patch: magicTibetanBowl180 :: Patch2
+ Csound.Patch: magicTubularBell :: Patch2
+ Csound.Patch: magicUniformAluminumBar :: Patch2
+ Csound.Patch: magicUniformWoodenBar :: Patch2
+ Csound.Patch: magicVibraphone1 :: Patch2
+ Csound.Patch: magicVibraphone2 :: Patch2
+ Csound.Patch: magicWineGlass :: Patch2
+ Csound.Patch: magicWoodBlock :: Patch2
+ Csound.Patch: magicXylophone :: Patch2
+ Csound.Patch: maleA :: Vowel
+ Csound.Patch: maleE :: Vowel
+ Csound.Patch: maleER :: Vowel
+ Csound.Patch: maleIY :: Vowel
+ Csound.Patch: maleO :: Vowel
+ Csound.Patch: maleOO :: Vowel
+ Csound.Patch: maleU :: Vowel
+ Csound.Patch: maleUH :: Vowel
+ Csound.Patch: mildWind :: Patch Sig2
+ Csound.Patch: mutedBassClarinet :: Patch (Sig, Sig)
+ Csound.Patch: mutedDizi :: Patch (Sig, Sig)
+ Csound.Patch: mutedFlute :: Patch (Sig, Sig)
+ Csound.Patch: mutedFrenchHorn :: Patch (Sig, Sig)
+ Csound.Patch: mutedHulusi :: Patch (Sig, Sig)
+ Csound.Patch: mutedPiano :: Patch (Sig, Sig)
+ Csound.Patch: mutedPiano' :: MutedPiano -> Patch (Sig, Sig)
+ Csound.Patch: mutedSheng :: Patch (Sig, Sig)
+ Csound.Patch: nightPad :: Patch Sig2
+ Csound.Patch: noiseBell :: Patch Sig2
+ Csound.Patch: noisyChoir :: Patch Sig2
+ Csound.Patch: noisyChoir' :: NoisyChoir -> Patch Sig2
+ Csound.Patch: noiz :: Patch Sig2
+ Csound.Patch: okComputer :: Patch Sig2
+ Csound.Patch: overtoneLead :: Patch2
+ Csound.Patch: overtonePad :: Patch Sig2
+ Csound.Patch: phasingLead :: Patch Sig2
+ Csound.Patch: polySynth :: Patch (Sig, Sig)
+ Csound.Patch: potLid :: Patch2
+ Csound.Patch: pulseWidth :: Patch Sig2
+ Csound.Patch: pwBass :: Patch Sig2
+ Csound.Patch: pwEnsemble :: Patch Sig2
+ Csound.Patch: pwOrgan :: Sig -> Patch2
+ Csound.Patch: pwPad :: Patch Sig2
+ Csound.Patch: razorLead :: Patch Sig2
+ Csound.Patch: razorLead' :: RazorLead -> Patch Sig2
+ Csound.Patch: razorLeadFast :: Patch Sig2
+ Csound.Patch: razorLeadSlow :: Patch Sig2
+ Csound.Patch: razorLeadTremolo :: Patch Sig2
+ Csound.Patch: razorPad :: Patch Sig2
+ Csound.Patch: razorPad' :: RazorPad -> Patch Sig2
+ Csound.Patch: razorPadFast :: Patch Sig2
+ Csound.Patch: razorPadSlow :: Patch Sig2
+ Csound.Patch: razorPadTremolo :: Patch Sig2
+ Csound.Patch: redCedarWoodPlate :: Patch2
+ Csound.Patch: redwoodPlate :: Patch2
+ Csound.Patch: robotLoopVowels :: Sig -> [(Vowel, D)] -> Patch Sig2
+ Csound.Patch: robotVowel :: Vowel -> Patch Sig2
+ Csound.Patch: robotVowels :: [(Vowel, D)] -> Vowel -> Patch Sig2
+ Csound.Patch: sawOrgan :: Patch2
+ Csound.Patch: scrapeAlbertClockBellBelfast :: Patch Sig2
+ Csound.Patch: scrapeBanyan :: Patch Sig2
+ Csound.Patch: scrapeChalandiPlates :: Patch Sig2
+ Csound.Patch: scrapeDahina :: Patch Sig2
+ Csound.Patch: scrapeDouglasFirWoodPlate :: Patch Sig2
+ Csound.Patch: scrapeFastAlbertClockBellBelfast :: Patch Sig2
+ Csound.Patch: scrapeFastBanyan :: Patch Sig2
+ Csound.Patch: scrapeFastChalandiPlates :: Patch Sig2
+ Csound.Patch: scrapeFastDahina :: Patch Sig2
+ Csound.Patch: scrapeFastDouglasFirWoodPlate :: Patch Sig2
+ Csound.Patch: scrapeFastPotLid :: Patch Sig2
+ Csound.Patch: scrapeFastRedCedarWoodPlate :: Patch Sig2
+ Csound.Patch: scrapeFastRedwoodPlate :: Patch Sig2
+ Csound.Patch: scrapeFastSmallHandbell :: Patch Sig2
+ Csound.Patch: scrapeFastSpinelSphere :: Patch Sig2
+ Csound.Patch: scrapeFastTibetanBowl140 :: Patch Sig2
+ Csound.Patch: scrapeFastTibetanBowl152 :: Patch Sig2
+ Csound.Patch: scrapeFastTibetanBowl180 :: Patch Sig2
+ Csound.Patch: scrapeFastTubularBell :: Patch Sig2
+ Csound.Patch: scrapeFastUniformAluminumBar :: Patch Sig2
+ Csound.Patch: scrapeFastUniformWoodenBar :: Patch Sig2
+ Csound.Patch: scrapeFastVibraphone1 :: Patch Sig2
+ Csound.Patch: scrapeFastVibraphone2 :: Patch Sig2
+ Csound.Patch: scrapeFastWineGlass :: Patch Sig2
+ Csound.Patch: scrapeFastWoodBlock :: Patch Sig2
+ Csound.Patch: scrapeFastXylophone :: Patch Sig2
+ Csound.Patch: scrapePadAlbertClockBellBelfast :: Patch Sig2
+ Csound.Patch: scrapePadBanyan :: Patch Sig2
+ Csound.Patch: scrapePadChalandiPlates :: Patch Sig2
+ Csound.Patch: scrapePadDahina :: Patch Sig2
+ Csound.Patch: scrapePadDouglasFirWoodPlate :: Patch Sig2
+ Csound.Patch: scrapePadPotLid :: Patch Sig2
+ Csound.Patch: scrapePadRedCedarWoodPlate :: Patch Sig2
+ Csound.Patch: scrapePadRedwoodPlate :: Patch Sig2
+ Csound.Patch: scrapePadSmallHandbell :: Patch Sig2
+ Csound.Patch: scrapePadSpinelSphere :: Patch Sig2
+ Csound.Patch: scrapePadTibetanBowl140 :: Patch Sig2
+ Csound.Patch: scrapePadTibetanBowl152 :: Patch Sig2
+ Csound.Patch: scrapePadTibetanBowl180 :: Patch Sig2
+ Csound.Patch: scrapePadTubularBell :: Patch Sig2
+ Csound.Patch: scrapePadUniformAluminumBar :: Patch Sig2
+ Csound.Patch: scrapePadUniformWoodenBar :: Patch Sig2
+ Csound.Patch: scrapePadVibraphone1 :: Patch Sig2
+ Csound.Patch: scrapePadVibraphone2 :: Patch Sig2
+ Csound.Patch: scrapePadWineGlass :: Patch Sig2
+ Csound.Patch: scrapePadWoodBlock :: Patch Sig2
+ Csound.Patch: scrapePadXylophone :: Patch Sig2
+ Csound.Patch: scrapePotLid :: Patch Sig2
+ Csound.Patch: scrapeRedCedarWoodPlate :: Patch Sig2
+ Csound.Patch: scrapeRedwoodPlate :: Patch Sig2
+ Csound.Patch: scrapeSmallHandbell :: Patch Sig2
+ Csound.Patch: scrapeSpinelSphere :: Patch Sig2
+ Csound.Patch: scrapeTibetanBowl140 :: Patch Sig2
+ Csound.Patch: scrapeTibetanBowl152 :: Patch Sig2
+ Csound.Patch: scrapeTibetanBowl180 :: Patch Sig2
+ Csound.Patch: scrapeTubularBell :: Patch Sig2
+ Csound.Patch: scrapeUniformAluminumBar :: Patch Sig2
+ Csound.Patch: scrapeUniformWoodenBar :: Patch Sig2
+ Csound.Patch: scrapeVibraphone1 :: Patch Sig2
+ Csound.Patch: scrapeVibraphone2 :: Patch Sig2
+ Csound.Patch: scrapeWineGlass :: Patch Sig2
+ Csound.Patch: scrapeWoodBlock :: Patch Sig2
+ Csound.Patch: scrapeXylophone :: Patch Sig2
+ Csound.Patch: sheng :: Patch (Sig, Sig)
+ Csound.Patch: shengSpec :: D -> D -> Wind
+ Csound.Patch: shengVibrato :: Patch (Sig, Sig)
+ Csound.Patch: shortBassClarinet :: Patch (Sig, Sig)
+ Csound.Patch: shortBassClarinetSpec :: D -> D -> Wind
+ Csound.Patch: shortDizi :: Patch (Sig, Sig)
+ Csound.Patch: shortDiziSpec :: D -> D -> Wind
+ Csound.Patch: shortFlute :: Patch (Sig, Sig)
+ Csound.Patch: shortFluteSpec :: D -> D -> Wind
+ Csound.Patch: shortFrenchHorn :: Patch (Sig, Sig)
+ Csound.Patch: shortFrenchHornSpec :: D -> D -> Wind
+ Csound.Patch: shortHulusi :: Patch (Sig, Sig)
+ Csound.Patch: shortHulusiSpec :: D -> D -> Wind
+ Csound.Patch: shortSheng :: Patch (Sig, Sig)
+ Csound.Patch: shortShengSpec :: D -> D -> Wind
+ Csound.Patch: simpleBass :: Patch Sig2
+ Csound.Patch: simpleMarimba :: Patch Sig2
+ Csound.Patch: singleFx :: Sig -> (a -> a) -> [FxSpec a]
+ Csound.Patch: singleFx' :: Sig -> (a -> SE a) -> [FxSpec a]
+ Csound.Patch: smallAlbertClockBellBelfast :: Patch2
+ Csound.Patch: smallBanyan :: Patch2
+ Csound.Patch: smallChalandiPlates :: Patch2
+ Csound.Patch: smallDahina :: Patch2
+ Csound.Patch: smallDouglasFirWoodPlate :: Patch2
+ Csound.Patch: smallHandbell :: Patch2
+ Csound.Patch: smallPotLid :: Patch2
+ Csound.Patch: smallRedCedarWoodPlate :: Patch2
+ Csound.Patch: smallRedwoodPlate :: Patch2
+ Csound.Patch: smallSpinelSphere :: Patch2
+ Csound.Patch: smallTibetanBowl140 :: Patch2
+ Csound.Patch: smallTibetanBowl152 :: Patch2
+ Csound.Patch: smallTibetanBowl180 :: Patch2
+ Csound.Patch: smallTubularBell :: Patch2
+ Csound.Patch: smallUniformAluminumBar :: Patch2
+ Csound.Patch: smallUniformWoodenBar :: Patch2
+ Csound.Patch: smallVibraphone1 :: Patch2
+ Csound.Patch: smallVibraphone2 :: Patch2
+ Csound.Patch: smallWineGlass :: Patch2
+ Csound.Patch: smallWoodBlock :: Patch2
+ Csound.Patch: smallXylophone :: Patch2
+ Csound.Patch: snowCrackle :: Patch (Sig, Sig)
+ Csound.Patch: spinelSphere :: Patch2
+ Csound.Patch: sqrOrgan :: Patch2
+ Csound.Patch: tibetanBowl140 :: Patch2
+ Csound.Patch: tibetanBowl152 :: Patch2
+ Csound.Patch: tibetanBowl180 :: Patch2
+ Csound.Patch: toneWheelOrgan :: Patch Sig2
+ Csound.Patch: triOrgan :: Patch2
+ Csound.Patch: triPad :: Patch (Sig, Sig)
+ Csound.Patch: tubularBell :: Patch2
+ Csound.Patch: underwaterPad :: Patch2
+ Csound.Patch: underwaterPad' :: Sig -> Patch2
+ Csound.Patch: uniformAluminumBar :: Patch2
+ Csound.Patch: uniformWoodenBar :: Patch2
+ Csound.Patch: vibraphone1 :: Patch2
+ Csound.Patch: vibraphone2 :: Patch2
+ Csound.Patch: vibraphonePiano1 :: Patch Sig2
+ Csound.Patch: vibraphonePiano2 :: Patch Sig2
+ Csound.Patch: vibrophonePad :: Patch Sig2
+ Csound.Patch: waveOrgan :: (Sig -> SE Sig) -> Patch2
+ Csound.Patch: whaleSongPad :: Patch2
+ Csound.Patch: whaleSongPad' :: Sig -> Patch2
+ Csound.Patch: wind :: Patch Sig2
+ Csound.Patch: windSings :: Patch Sig2
+ Csound.Patch: windWall :: Patch Sig2
+ Csound.Patch: wineGlass :: Patch2
+ Csound.Patch: withDeepBass :: Sig -> Patch2 -> Patch2
+ Csound.Patch: woodBlock :: Patch2
+ Csound.Patch: woodWind' :: (Num t, SigOrD t) => Wind -> (t -> D -> D -> D -> D -> D -> D -> Sig) -> Patch (Sig, Sig)
+ Csound.Patch: xanadu :: Patch Sig2
+ Csound.Patch: xylophone :: Patch2

Files

csound-catalog.cabal view
@@ -1,5 +1,5 @@ Name:          csound-catalog-Version:       0.2.2+Version:       0.3.0 Cabal-Version: >= 1.6 License:       BSD3 License-file:  LICENSE@@ -27,15 +27,19 @@ Library   Ghc-Options:    -Wall   Build-Depends:-        base >= 4, base < 5, transformers >= 0.3, csound-expression >= 4.3+        base >= 4, base < 5, transformers >= 0.3, csound-expression >= 4.8.3, csound-sampler >=0.0.6.3   Hs-Source-Dirs:      src/   Exposed-Modules:         Csound.Catalog         Csound.Catalog.Drum+        Csound.Catalog.Drum.Hm+        Csound.Catalog.Drum.Tr808+        Csound.Catalog.Drum.MiniPops         Csound.Catalog.Effect         Csound.Catalog.Envelope         Csound.Catalog.Reson         Csound.Catalog.Wave+        Csound.Patch   Other-Modules:         Csound.Catalog.Wave.Woodwind         Csound.Catalog.Wave.WoodwindAlg     @@ -47,4 +51,8 @@         Csound.Catalog.Wave.TrappedInConvert         Csound.Catalog.Wave.Amsterdam         Csound.Catalog.Wave.Misc+        Csound.Catalog.Wave.Sean+        Csound.Catalog.Wave.Flavio+        Csound.Catalog.Wave.Thor+        Csound.Catalog.Wave.Bitwig       
src/Csound/Catalog.hs view
@@ -12,7 +12,7 @@     , module Csound.Catalog.Effect     , module Csound.Catalog.Envelope     , module Csound.Catalog.Reson-    , module Csound.Catalog.Wave+    , module Csound.Catalog.Wave         ) where   import Csound.Catalog.Drum
src/Csound/Catalog/Drum.hs view
@@ -1,156 +1,76 @@ -- | A gallery of the percussive sounds. module Csound.Catalog.Drum(-    -- * Subtractive-    dumb, dumbBass, pluckSnare, sortaKnockSweep, metalBoink,+    -- * Hans Mikelson Drum kit+    hmBd1, hmBd2, hmBd3, hmSn1, hmSn2, hmSweeo, hmBoink, hmOhh, hmChh, hmCr, hmClap, -    -- * Fullkit    +    -- * Tr808 Drum kit+    trBd, trSn, trOhh, trChh, trHtom, trMtom, trLtom, trCym, trCl, trRim, trMar, trHcon, trMcon, trLcon, -    -- ** Non-pitched drums-    snare, openHihat, closedHihat,  +    -- * Korg MiniPops Drum kit+    mpBd, mpSn1, mpSn2, mpRim, mpCym1, mpCym2, mpBon1, mpBon2, mpBon3, mpCl, mpCow, mpGro, mpMar, mpQj, mpTam, -    -- ** Pitched drums-    ---    -- The instrument turns a pitch (in Hz) to the signal.-    bassDrum, crash, handClap +    -- * Csound percussive models kit    +    boo, gro, sbells, tam, cab, crun, shake, spaper,  ) where  import Csound.Base---- subtractive --bpb :: Sig -> Sig -> Sig -> Sig-bpb cfq q asig = balance (bp cfq q asig) asig---- | A \"dumb\" drum.-dumb :: SE Sig-dumb = fmap (bpb 1000 100) $ rand $ expseg [0.0001, 0.01, 1, 0.04, 0.01]--dumbBass :: SE Sig-dumbBass = fmap (bpb kfreqenv (kfreqenv / 8)) $ rand $ expseg [0.0001, 0.01, 1, 0.08, 0.01]-    where kfreqenv = expseg [50, 0.01, 200, 0.08, 50]-    -pluckSnare :: Sig -pluckSnare = pluck kampenv4 kptchenv 50 (elins [1, 1]) 4 `withDs` [0.8, 3] -    where-        kampenv4 = linseg [0, 0.001, 1, xdur - 0.21, 1, 0.02, 0]-        kptchenv = linseg [100, 0.01, 300, 0.2, 200, 0.01, 200]-        xdur     = 1.25---sortaKnockSweep :: SE Sig-sortaKnockSweep = -    fmap (resonsBy bpb-            [ (kfreqenv41, kfreqenv41 / 8)-            , (kfreqenv42, kfreqenv42 / 4) -            ]-         ) $ rand kampenv4-    where-        kfreqenv41  = expseg [ 50, 0.01, 200, 0.08, 50]-        kfreqenv42  = linseg [ 150, 0.01, 1000, 0.08, 250] -        kampenv4	= linseg [ 0, 0.01, 1, 0.08, 0, 0.01, 0] --metalBoink :: Sig-metalBoink = foscil kampenv61 30 1 6.726 kampenv62 sine -    where-        kampenv61   = expseg [ 0.01, 0.01, 1, 0.2, 0.1, 0.1, 0.001 ]-        kampenv62   = linseg [ 1, 0.1, 10, 0.1, 0.5, 0.01, 1 ]---- fullkit+import Csound.Sam -bassDrum :: D -> Sig-bassDrum cps= env * osc (sig cps * kgliss * 0.5)-    where env = linseg [0, 0.00245, 1, 0.1225, 0]-          kgliss = expseg [10, 0.625, 1, 0.25, 1]  +import qualified Csound.Catalog.Drum.Hm       as H+import qualified Csound.Catalog.Drum.Tr808    as T+import qualified Csound.Catalog.Drum.MiniPops as M  -openHihat :: SE Sig-openHihat = hihat $ linseg [0, 0.004, 1, 0.121, 0]--closedHihat :: SE Sig-closedHihat = hihat $ linseg [0, 0.00245, 1, 0.1225, 0]--hihat :: Sig -> SE Sig-hihat kenv = do-    asig <- rand kenv-    let a1 = moogvcf (butbp asig cf (cf / 2)) cf 0.7-        a2 = comb a1 0.5 (1/cpspch(8))-    return $ a2 * 0.05 + a1 * 0.93-    where cf = cpspch (5.08 + 8)--snare :: SE Sig-snare = do-    asound <- rand 1-    let as1 = butbp asound 210 55-    return $ kenv2 * (as1 * 0.9 + asound * 0.8 * kenv1)-    where -        kenv1 = linseg [0, 0.00176, 1, 0.1232, 0]-        kenv2 = expseg [0.01, 0.0002, 1, 0.0297, 0.01, 0.09, 0.01]  ---- | Recommended values cpspch(13.03) - cpspch(13.10)-crash :: D -> SE Sig-crash cps = do-    asig <- rand 1-    return $ 0.5 * (0.5 * aall + resonator (aall + asig * kenv2))-    where-        kenv2 = expseg [0.001, 0.0466, 1, 3.95, 0.001]--        resonator asig = 0.7 * a1 + 0.6 * kenv18 * a2-            where -                flt a = butbp asig (sig $ a * cps) (sig $ 0.5 * cps)-                a1 = sum $ fmap flt [1, 2.1, 2.8]-                a2 = comb a1 0.5 (0.5 / cps)-                kenv18 = expseg [0.01, 0.02, 1, 3.98, 0.01]--        harm k amp hs = k * amp * mean (fmap (osc . sig . ( * cps)) hs)--        aall = sum $ zipWith3 harm weights envelopes harmonics--        harmonics = -            [ [1, 0.89, 1.12341]-            , [2.24, 2.4 * 0.98, 2.14 * 1.02]-            , [3.312, 3.513312*0.89, 3.123312*1.11]-            , [4.89, 5.89*0.89, 6.89 * 1.03]-            , [5.12, 5.5612*1.02, 7.7312 * 0.998]-            , [6.97, 6.97 * 1.02, 6.97 * 0.98]-            , [7.89, 7.89 * 1.02, 7.89 * 0.98]-            , [1.25, 1.125 * 1.004, 1.134 * 0.996]-            ]--        weights = replicate 7 0.2 ++ [0.1]--        envelopes = fmap (\(a, b) -> expseg [0.01, a, 1, b, 0.01]) -            [ (0.0274, 3.972)-            , (0.0264, 3.973)-            , (0.0209, 3.979)-            , (0.0248, 3.975)-            , (0.0283, 3.971)-            , (0.0330, 3.966)-            , (0.0396, 3.960)-            , (0.0209, 3.979)-            ]--handClap :: D -> SE Sig-handClap cps = fmap onNoise $ rand 1-    where-        kenv1 = expseg [1.25, 0.03, 0.0001]-        kenv2 = expseg [0.001, 0.005, 1, 0.35, 0.001]+hmBd1   = H.bd1+hmBd2   = H.bd2+hmBd3   = H.bd3+hmSn1   = H.sn1+hmSn2   = H.sn2+hmSweeo = H.sweep+hmBoink = H.boink+hmOhh   = H.ohh+hmChh   = H.chh+hmCr    = H.cr+hmClap  = H.clap -        onNoise asig = aout-            where -                anoise1 = kenv1 * asig-                anoise2 = kenv2 * asig+trBd   = T.bd+trSn   = T.sn+trOhh  = T.ohh+trChh  = T.chh+trHtom = T.htom+trMtom = T.mtom+trLtom = T.ltom+trCym  = T.cym+trCl   = T.cl+trRim  = T.rim+trMar  = T.mar+trHcon = T.hcon+trMcon = T.mcon+trLcon = T.lcon -                adel1   = anoise1-                adel2   = delaySig 0.01 anoise1 -                adel3   = delaySig 0.02 anoise1 -                adel4   = delaySig 0.03 anoise2 -            -                aout    = mean-                    [ rz adel1 2-                    , rz adel2 3-                    , rz adel3 4-                    , rz adel4 5.5-                    ]+mpBd   = M.bd+mpSn1  = M.sn1+mpSn2  = M.sn2+mpRim  = M.rim+mpCym1 = M.cym1+mpCym2 = M.cym2+mpBon1 = M.bon1+mpBon2 = M.bon2+mpBon3 = M.bon3+mpCl   = M.cl+mpCow  = M.cow+mpGro  = M.gro+mpMar  = M.mar+mpQj   = M.qj+mpTam  = M.tam -                rz x y = resonz x (sig $ cps * y) (sig $ cps * 5.5)+mkSam = limSam 1  +boo = mkSam $ bamboo 1 0.01+gro = mkSam $ guiro  1 0.01+sbells = mkSam $ sleighbells 1 0.01+tam = mkSam $ tambourine 1 0.01+cab = mkSam $ cabasa 1 0.01+crun = mkSam $ crunch 1 0.1+shake cps = mkSam $ shaker 1 cps 8 0.999 100 `withD` 0+spaper = mkSam $ sandpaper 1 0.01
+ src/Csound/Catalog/Drum/Hm.hs view
@@ -0,0 +1,197 @@+-- | Drums defined by Hans Mikelson.+module Csound.Catalog.Drum.Hm(+    -- * Subtractive+    dumb, dumbBass, pluckSnare, sortaKnockSweep, metalBoink,++    -- * Fullkit    ++    -- ** Non-pitched drums+    snare, openHihat, closedHihat,  ++    -- ** Pitched drums+    --+    -- The instrument turns a pitch (in Hz) to the signal.+    bassDrum, crash, handClap, +    bassDrum', crash', handClap',++    -- * Sampler+    bd1, bd2, sn1, sweep, boink, sn2, ohh, chh, bd3, cr, clap+) where++import Csound.Base+import Csound.Sam++-- subtractive ++bpb :: Sig -> Sig -> Sig -> Sig+bpb cfq q asig = balance (bp cfq q asig) asig++rndAmp :: Sig -> SE Sig+rndAmp a = do+    k <- birnd 0.09+    return $ a * (1 + sig k)++addDur' dt x = xtratim dt >> return x+addDur = addDur' 0.1++toDrum :: Sig -> SE Sig+toDrum a = rndAmp =<< addDur a++-- | A \"dumb\" drum.+dumb :: SE Sig+dumb = (toDrum =<<) $ fmap (bpb 1000 100) $ rand $ expseg [0.0001, 0.01, 1, 0.04, 0.01]++dumbBass :: SE Sig+dumbBass = (toDrum =<<) $ fmap (bpb kfreqenv (kfreqenv / 8)) $ rand $ expseg [0.0001, 0.01, 1, 0.08, 0.01]+    where kfreqenv = expseg [50, 0.01, 200, 0.08, 50]+    +pluckSnare :: SE Sig +pluckSnare = toDrum $ pluck kampenv4 kptchenv 50 (elins [1, 1]) 4 `withDs` [0.8, 3] +    where+        kampenv4 = linseg [0, 0.001, 1, xdur - 0.21, 1, 0.02, 0]+        kptchenv = linseg [100, 0.01, 300, 0.2, 200, 0.01, 200]+        xdur     = 1.25+++sortaKnockSweep :: SE Sig+sortaKnockSweep = (toDrum =<<) $+    fmap (resonsBy bpb+            [ (kfreqenv41, kfreqenv41 / 8)+            , (kfreqenv42, kfreqenv42 / 4) +            ]+         ) $ rand kampenv4+    where+        kfreqenv41  = expseg [ 50, 0.01, 200, 0.08, 50]+        kfreqenv42  = linseg [ 150, 0.01, 1000, 0.08, 250] +        kampenv4	= linseg [ 0, 0.01, 1, 0.08, 0, 0.01, 0] ++metalBoink :: SE Sig+metalBoink = toDrum $ foscil kampenv61 30 1 6.726 kampenv62 sine +    where+        kampenv61   = expseg [ 0.01, 0.01, 1, 0.2, 0.1, 0.1, 0.001 ]+        kampenv62   = linseg [ 1, 0.1, 10, 0.1, 0.5, 0.01, 1 ]++-- fullkit++bassDrum = bassDrum' 64++bassDrum' :: D -> SE Sig+bassDrum' cps = toDrum $ env * osc (sig cps * kgliss * 0.5)+    where env = linseg [0, 0.00245, 1, 0.1225, 0]+          kgliss = expseg [10, 0.625, 1, 0.25, 1]  +++openHihat :: SE Sig+openHihat = hihat $ linseg [0, 0.004, 1, 0.121, 0]++closedHihat :: SE Sig+closedHihat = hihat $ linseg [0, 0.00245, 1, 0.1225, 0]++hihat :: Sig -> SE Sig+hihat kenv = toDrum =<< do+    asig <- rand kenv+    let a1 = moogvcf (butbp asig cf (cf / 2)) cf 0.7+        a2 = comb a1 0.5 (1/cpspch(8))+    return $ a2 * 0.05 + a1 * 0.93+    where cf = cpspch (5.08 + 8)++snare :: SE Sig+snare = toDrum =<< do+    asound <- rand 1+    let as1 = butbp asound 210 55+    return $ kenv2 * (as1 * 0.9 + asound * 0.8 * kenv1)+    where +        kenv1 = linseg [0, 0.00176, 1, 0.1232, 0]+        kenv2 = expseg [0.01, 0.0002, 1, 0.0297, 0.01, 0.09, 0.01]  ++crash = crash' $ cpspch 13.05++-- | Recommended values cpspch(13.03) - cpspch(13.10)+crash' :: D -> SE Sig+crash' cps = toDrum =<< do+    asig <- rand 1+    return $ 0.5 * (0.5 * aall + resonator (aall + asig * kenv2))+    where+        kenv2 = expseg [0.001, 0.0466, 1, 3.95, 0.001]++        resonator asig = 0.7 * a1 + 0.6 * kenv18 * a2+            where +                flt a = butbp asig (sig $ a * cps) (sig $ 0.5 * cps)+                a1 = sum $ fmap flt [1, 2.1, 2.8]+                a2 = comb a1 0.5 (0.5 / cps)+                kenv18 = expseg [0.01, 0.02, 1, 3.98, 0.01]++        harm k amp hs = k * amp * mean (fmap (osc . sig . ( * cps)) hs)++        aall = sum $ zipWith3 harm weights envelopes harmonics++        harmonics = +            [ [1, 0.89, 1.12341]+            , [2.24, 2.4 * 0.98, 2.14 * 1.02]+            , [3.312, 3.513312*0.89, 3.123312*1.11]+            , [4.89, 5.89*0.89, 6.89 * 1.03]+            , [5.12, 5.5612*1.02, 7.7312 * 0.998]+            , [6.97, 6.97 * 1.02, 6.97 * 0.98]+            , [7.89, 7.89 * 1.02, 7.89 * 0.98]+            , [1.25, 1.125 * 1.004, 1.134 * 0.996]+            ]++        weights = replicate 7 0.2 ++ [0.1]++        envelopes = fmap (\(a, b) -> expseg [0.01, a, 1, b, 0.01]) +            [ (0.0274, 3.972)+            , (0.0264, 3.973)+            , (0.0209, 3.979)+            , (0.0248, 3.975)+            , (0.0283, 3.971)+            , (0.0330, 3.966)+            , (0.0396, 3.960)+            , (0.0209, 3.979)+            ]++handClap = handClap' 400++handClap' :: D -> SE Sig+handClap' cps = (toDrum =<< ) $ fmap onNoise $ rand 1+    where+        kenv1 = expseg [1.25, 0.03, 0.0001]+        kenv2 = expseg [0.001, 0.005, 1, 0.35, 0.001]++        onNoise asig = aout+            where +                anoise1 = kenv1 * asig+                anoise2 = kenv2 * asig++                adel1   = anoise1+                adel2   = delaySig 0.01 anoise1 +                adel3   = delaySig 0.02 anoise1 +                adel4   = delaySig 0.03 anoise2 +            +                aout    = mean+                    [ rz adel1 2+                    , rz adel2 3+                    , rz adel3 4+                    , rz adel4 5.5+                    ]++                rz x y = resonz x (sig $ cps * y) (sig $ cps * 5.5)++--------------------------------------------------+-- sampler++mkSam = limSam 1++bd1 = mkSam dumb+bd2 = mkSam dumbBass++sn1 = mkSam pluckSnare+sweep = mkSam sortaKnockSweep+boink = mkSam metalBoink++sn2 = mkSam snare+ohh = mkSam openHihat+chh = mkSam closedHihat++bd3 = mkSam bassDrum+cr  = mkSam crash+clap = mkSam handClap 
+ src/Csound/Catalog/Drum/MiniPops.hs view
@@ -0,0 +1,444 @@+-- |  Drums of the Korg Mini Pops 7 drum machine (recoded from 	Iain McCurdy).+module Csound.Catalog.Drum.MiniPops(+	MpSpec(..),++	bass, snare1, snare2, rimShot, cymbal1, cymbal2, bongo1, bongo2, bongo3, +	claves, cowbell, guiro, maracas, quijada, tamb,++	-- * Generic+	bass', bdSpec, snare1', snSpec1, snare2', snSpec2, rimShot', rimSpec, +	cymbal1', cymSpec1, cymbal2', cymSpec2, bongo1', bonSpec1, bongo2', bonSpec2, bongo3', bonSpec3, +	claves', clSpec, cowbell', cowSpec, guiro', groSpec, maracas', marSpec, quijada', qjSpec, tamb', tamSpec,++	-- * Sample+	bd, sn1, sn2, rim, cym1, cym2, bon1, bon2, bon3, cl, cow, gro, mar, qj, tam, ++	-- ** Generic+	bd', sn1', sn2', rim', cym1', cym2', bon1', bon2', bon3', cl', cow', gro', mar', qj', tam'+) where++import Csound.Base hiding (guiro) +import Csound.Sam++data MpSpec = MpSpec {+	  mpDur 	:: D	+	, mpCps 	:: D+	, mpRnd     :: Maybe D }+++rndAmp :: Sig -> SE Sig+rndAmp a = do+	k <- birnd 0.09+	return $ a * (1 + sig k)++addDur' dt x = xtratim dt >> return x+addDur = addDur' 0.1++toDrum :: Sig -> SE Sig+toDrum a = rndAmp =<< addDur a++defSpec dur cps = MpSpec +	{ mpDur   = dur+	, mpCps   = cps +	, mpRnd   = Just 0.085 }++rndVal :: D -> D -> D -> SE D+rndVal total amount x = do+	k <- birnd amount +	return $ x  + k * total++rndDur amt x = rndVal x amt x+rndCps amt x = rndVal x (amt / 10) x++rndSpec :: MpSpec -> SE MpSpec+rndSpec spec = do+	dur  <- rndDur'	+	cps  <- rndCps'+	return $ spec +		{ mpDur  = dur 		+		, mpCps  = cps }+	where +		rndDur'  = (maybe return rndDur $ (mpRnd spec)) $ mpDur spec		+		rndCps'  = (maybe return rndCps $ (mpRnd spec)) $ mpCps spec++rezz cps bw = reson (mpulse 1 0) cps (cps * bw) `withD` 2++bass = bass' bdSpec++bdSpec = defSpec 0.43 64++bass' spec = pureBass' =<< rndSpec spec++-- dur = 1.7+-- cps = 64+pureBass' spec = toDrum aout+	where+		dur = mpDur spec+		cps = sig $ mpCps spec++		aout = mul (env * 225 * fadeOut dur) $ lp1 500 $ rezz cps 0.001+		env  = transeg [1, dur, -14, 0]+++snare1 = snare1' snSpec1++snSpec1 = defSpec 0.38 800++snare1' spec = pureSnare1' =<< rndSpec spec++-- cps = 800+pureSnare1' spec = toDrum =<< (mul (fadeOut dur) $ aout)+	where+		dur = mpDur spec+		cps = mpCps spec++		anoise = pink+		asig   = fmap (\x -> reson x 6250 9000 `withD` 1) anoise+		aenv   = transeg [1, dur ,-5 , 0]+		asig1  = at (bhp 3000) $ mul aenv asig++		xdur   = 0.006		+		astrike = osc (transeg [cps,xdur,-4,60])+		aenv2 = transeg	[1,xdur,-2,0]+		astrike1 = aenv2 * astrike++		aout = fmap ((0.7 * astrike1) + ) $ mul 2 $ asig1++snare2 = snare2' snSpec2++snSpec2 = defSpec 0.4 800++snare2' spec = pureSnare2' =<< rndSpec spec++pureSnare2' spec = toDrum =<< (mul (fadeOut dur) $ aout)+	where+		dur = mpDur spec+		cps = mpCps spec++		anoise = pink+		asig   = fmap (\x -> butbp x 5200 5200 `withD` 1) anoise+		aenv   = transeg [1, dur ,-8 , 0]+		asig1  = at (bhp 3000) $ mul aenv asig	++		xdur   = 0.005		+		astrike = osc (transeg [cps,xdur,-4,cps / 4])+		aenv2 = transeg	[1,xdur,-2,0]+		astrike1 = aenv2 * astrike++		aout = fmap ((0.5 * astrike1) + ) $ mul 2.3 $ asig1+++rimShot = rimShot' rimSpec++rimSpec = defSpec 0.005 1700++rimShot' spec = pureRimShot' =<< rndSpec spec++-- cps = 1700+-- dur = 0.005+pureRimShot' spec = toDrum $ mul (fadeOut dur) $ asig+	where+		dur = mpDur spec+		cps = sig $ mpCps spec++		aenv = expon 1 dur 0.0001		+		asig1 = osc' 0.2 cps+		asig2 = reson asig1 cps 1500 `withD` 2+		asig  = bhp 500 (asig1 + asig2 * 0.4 * 0.3)++cymbal1 = cymbal1' cymSpec1++cymSpec1 = defSpec 0.304 6000++cymbal1' spec = pureCymbal1' =<< rndSpec spec++-- dur = 0.304+-- cps = 6000+pureCymbal1' spec = (toDrum =<< ) $ mul (fadeOut dur) $ do+	anoise <- white+	let asig1 = blp 14000 $ reson	(anoise*aenv) icf (icf*0.7) `withD` 1+	    asig2 = bhp 6000 $ (asig1 + anoise * 0.001)+	return $ 0.25 * aenv * asig2+	where	+		dur = mpDur spec+		cps = sig $ mpCps spec++		aenv = transeg	[1,dur,-2,0]+		icf = cps+++cymbal2 = cymbal2' cymSpec2++cymSpec2 = defSpec 1.404 1000++cymbal2' spec = pureCymbal2' =<< rndSpec spec++pureCymbal2' spec = (toDrum =<< ) $ mul (fadeOut dur) $ do+	anoise <- white+	let asig = mul aenv $ bhp 6000 $ mul aenv $ lp1 12000 $ reson (anoise * aenv) icf (icf * 0.9) `withD` 1+	return $ astrike * 0.2 + asig * 1.5+	where+		dur = mpDur spec+		cps = mpCps spec++		icf = sig $ cps * 5+		aenv = transeg	[1,dur,-2,0]+		xdur = 0.004+		aenv2 = transeg	[1,xdur,-2,0]+		astrike = mul aenv2 $ osc (transeg	[cps,xdur,-4,0.4*cps])++-- dur = 0.2+-- cps = 630+bongo1 = bongo1' bonSpec1++bonSpec1 = defSpec 0.2 630++bongo1' spec = pureBongo1' =<< rndSpec spec++pureBongo1' spec = toDrum $ mul (fadeOut dur) $ asig+	where+		dur = mpDur spec+		cps = sig $ mpCps spec++		asig = mul (4 * aenv ) $ blp 8000 $ bhp 300 $ rezz cps 0.03+		aenv = transeg	[1,dur,13,0]++bongo2 = bongo2' bonSpec2++bonSpec2 = defSpec 0.2 400++bongo2' spec = pureBongo2' =<< rndSpec spec++-- dur = 0.2+-- cps = 400+pureBongo2' spec = toDrum $ mul (fadeOut dur) $ asig+	where+		dur = mpDur spec+		cps = mpCps spec++		kcps =	expon	cps dur (cps * 0.975)+		aenv =	transeg	[1,dur-0.005,0,0.1,0.005,0, 0]+		asig = mul (4 * aenv) $ bhp 100 $ lp1 5000 $ rezz kcps 0.03+++bongo3 = bongo3' bonSpec3++bonSpec3 = defSpec 1.229 194++bongo3' spec = pureBongo3' =<< rndSpec spec++-- dur = 1.229+-- cps = 194+pureBongo3' spec = toDrum $ mul (fadeOut dur) $ asig+	where+		dur = mpDur spec+		cps = sig $ mpCps spec++		aenv  =	transeg	[0, 0.001, -2, 1, dur-0.001, -2, 0]+		kbw   = linseg	[0.05,0.01,0.008]+		asig  = mul (5 * aenv) $ blp 11000 $ rezz cps kbw++claves = claves' clSpec++clSpec = defSpec 0.186 400++claves' spec = pureClaves' =<< rndSpec spec ++pureClaves' spec = toDrum aout+	where+		dur = mpDur spec+		cps = sig $ mpCps spec++		aenv = linseg [1, dur, 0]+		asig1 = rezz cps 0.025+		asig2 = rezz (cps * 5.45) 0.03 +		aout  = mul (3.2 * aenv * fadeOut dur) $ asig1 + 1.3 * asig2++cowbell = cowbell' cowSpec++cowSpec = defSpec 0.3 850++cowbell' spec = pureCowbell' =<< rndSpec spec ++pureCowbell' spec = toDrum asig+	where+		dur = mpDur spec+		cps = sig $ mpCps spec++		asig = mul (aenv * 3 * fadeOut dur) $ bhp 100 $+			  rezz cps 0.007+			+ 0.8 * rezz (cps * 5.537) 0.03+		aenv = linseg [1, dur, 0]++guiro = guiro' groSpec++groSpec = defSpec 0.256 66++guiro' spec = pureGuiro' =<< rndSpec spec ++pureGuiro' spec = toDrum asig+	where+		dur = mpDur spec+		cps = mpCps spec++		aenv =	linseg	[0,0.001,1,dur-0.111,0.6,0.1,1,0.01,0]+		asig = mul (3 * aenv * fadeOut dur) $ bhp 1000 $ reson (0.1 * sqr kcps) 4300 3000 `withD` 1+		kcps =	transeg	[cps,dur,2,(1.1 * cps)]++maracas = maracas' marSpec++marSpec = defSpec 0.05 5000++maracas' spec = pureMaracas' =<< rndSpec spec ++pureMaracas' spec = toDrum =<< do+	asig <- noise 1 0.04+	return $ mul (0.35 * aenv * fadeOut dur) $ bhp 2000 $ reson asig 9000 4000 `withD` 2+	where+		dur = mpDur spec+		cps = sig $ mpCps spec++		aenv =	transeg	[1,dur,-4,0]+	++quijada = quijada' qjSpec++qjSpec = defSpec 0.817 550++quijada' spec = pureQuijada' =<< rndSpec spec ++pureQuijada' spec = toDrum $ bhp cps $ mul (6 * fadeOut dur) $ phi dur (1/22.7272) + phi (dur * 0.39) (1/13.1579)+	where+		dur = mpDur spec+		cps = sig $ mpCps spec++		phi dt freq = mul kenv $ reson (mpulse	1 freq) 2727 400 `withD` 1	+			where kenv = transeg	[0.8,0.05,1, 1,dt-0.05,-6,0]+++tamb = tamb' tamSpec++tamSpec = defSpec 0.271 7000++tamb' spec = pureTamb' =<< rndSpec spec ++pureTamb' spec = toDrum =<< do+	anoise <- noise 1 0+	return $ mul (1.5 * aenv * fadeOut dur) +		$ reson (bhp cps $ (+ (anoise * 0.1 * aenv)) $ reson (anoise * aenv) 4600 100 `withD` 2) 9000 3000 `withD` 1+	where +		dur = mpDur spec+		cps = sig $ mpCps spec+		aenv = transeg	[1,dur,-8,0]++-------------------------------------------------------+-- Sampler++mkSam = limSam 1++-- | Bass drum+bd :: Sam+bd = mkSam bass++-- | Snare 1+sn1 :: Sam+sn1 = mkSam snare1++-- | Snare 2+sn2 :: Sam+sn2 = mkSam snare2++-- | Rim shot+rim :: Sam+rim = mkSam rimShot++-- | Cymbal 1+cym1 :: Sam+cym1 = mkSam cymbal1++-- | Cymbal 2+cym2 :: Sam+cym2 = mkSam cymbal2++-- | Bongo 1+bon1 :: Sam+bon1 = mkSam bongo1++-- | Bongo 2+bon2 :: Sam+bon2 = mkSam bongo2++-- | Bongo 3+bon3 :: Sam+bon3 = mkSam bongo3++-- | Claves+cl :: Sam+cl = mkSam claves++-- | Cowbell+cow :: Sam+cow = mkSam cowbell++-- | Guiro+gro :: Sam+gro = mkSam guiro++-- | Maracas+mar :: Sam+mar = mkSam maracas++-- | Quijada+qj :: Sam+qj = mkSam quijada++-- | Tambourine+tam :: Sam+tam = mkSam tamb++mkSam' f spec = mkSam $ f spec++bd' :: MpSpec -> Sam+bd' = mkSam' bass'++sn1' :: MpSpec -> Sam+sn1' = mkSam' snare1'++sn2' :: MpSpec -> Sam+sn2' = mkSam' snare2'++rim' :: MpSpec -> Sam+rim' = mkSam' rimShot'++cym1' :: MpSpec -> Sam+cym1' = mkSam' cymbal1'++cym2' :: MpSpec -> Sam+cym2' = mkSam' cymbal2'++bon1' :: MpSpec -> Sam+bon1' = mkSam' bongo1'++bon2' :: MpSpec -> Sam+bon2' = mkSam' bongo2'++bon3' :: MpSpec -> Sam+bon3' = mkSam' bongo3'++cl' :: MpSpec -> Sam+cl' = mkSam' claves'++cow' :: MpSpec -> Sam+cow' = mkSam' cowbell'++gro' :: MpSpec -> Sam+gro' = mkSam' guiro'++mar' :: MpSpec -> Sam+mar' = mkSam' maracas'++qj' :: MpSpec -> Sam+qj' = mkSam' quijada'++tam' :: MpSpec -> Sam+tam' = mkSam' tamb'
+ src/Csound/Catalog/Drum/Tr808.hs view
@@ -0,0 +1,555 @@+-- |  Drums of the Korg TR-808 drum machine (recoded from 	Iain McCurdy).+module Csound.Catalog.Drum.Tr808(+	TrSpec(..),++	bass, bass2, snare, openHiHat, closedHiHat, +	lowTom, midTom, highTom, cymbal, claves, rimShot,+	maraca, highConga, midConga, lowConga,++	-- * Generic+	bass', bass2', bdSpec, bdSpec2, snare', snSpec, openHiHat', ohSpec, closedHiHat', chSpec,+	lowTom', ltSpec, midTom', mtSpec, highTom', htSpec, cymbal', cymSpec, claves', clSpec, rimShot', rimSpec,+	maraca', marSpec, highConga', hcSpec, midConga', mcSpec, lowConga', lcSpec,++	-- * Sampler+	bd, bd2, sn, ohh, chh, htom, mtom, ltom, cym, cl, rim, mar, hcon, mcon, lcon,++	-- ** Generic+	bd', bd2', sn', ohh', chh', htom', mtom', ltom', cym', cl', rim', mar', hcon', mcon', lcon'++) where++import Control.Monad++import Csound.Base+import Csound.Sam++-- don't forget to update the gen-opcodes and the hackage opcodes++rndAmp :: Sig -> SE Sig+rndAmp a = do+	k <- birnd 0.09+	return $ a * (1 + sig k)++data TrSpec = TrSpec {+	  trDur 	:: D+	, trTune 	:: D+	, trCps 	:: D+	, trRnd     :: Maybe D+	}++cpsSpec cps = TrSpec +	{ trDur   = 0.8+	, trTune  = 0+	, trCps   = cps +	, trRnd   = Just 0.085 }+++rndVal :: D -> D -> D -> SE D+rndVal total amount x = do+	k <- birnd amount +	return $ x  + k * total++rndDur amt x = rndVal x amt x+rndCps amt x = rndVal x (amt / 10) x+rndTune amt x = rndVal 0.7 amt x++rndSpec ::TrSpec -> SE TrSpec+rndSpec spec = do+	dur  <- rndDur'+	tune <- rndTune'+	cps  <- rndCps'+	return $ spec +		{ trDur  = dur +		, trTune = tune+		, trCps  = cps }+	where +		rndDur'  = (maybe return rndDur $ (trRnd spec)) $ trDur spec+		rndTune' = (maybe return rndTune $ (trRnd spec)) $ trTune spec+		rndCps'  = (maybe return rndCps $ (trRnd spec)) $ trCps spec++bdSpec = TrSpec +	{ trDur   = 0.95+	, trTune  = 1+	, trCps   = 55 +	, trRnd   = Just 0.05 }++addDur' dt x = xtratim dt >> return x+addDur = addDur' 0.1++bass = bass' bdSpec++bass' spec = pureBass' =<< rndSpec spec++pureBass' :: TrSpec -> SE Sig+pureBass' spec = rndAmp =<< addDur amix+	where+		dur = trDur spec+		cps = trCps spec++		kmul  = transegr [0.2, dur * 0.5, -15, 0.01, dur * 0.5, 0, 0] dur 0 0+		kbend = transegr [0.5, 1.2, -4, 0, 1, 0, 0] dur 0 0+		asig  = gbuzz 0.5 (sig cps * semitone kbend) 20 1 kmul cosine+		aenv  = transeg [1, dur - 0.004, -6, 0]+		att   = linseg [0, 0.004, 1]+		asig1 = asig * aenv * att++		aenv1 = linseg [1, 0.07, 0]+		acps  = expsega [8 * cps,0.07,0.001]+		aimp  = oscili  aenv1 acps sine+		amix  = asig1 * 0.7 +  aimp * 0.25++bdSpec2 = TrSpec +	{ trDur   = 1.3+	, trTune  = 1+	, trCps   = 57+	, trRnd   = Just 0.05 }++bass2 = bass2' bdSpec2++bass2' spec = pureBass2' =<< rndSpec spec++pureBass2' :: TrSpec -> SE Sig+pureBass2' spec = (rndAmp <=< addDur) $ compr $ mul (expsegr [1, 0.6 * dur, 0.1, 0.4 * dur, 0.001] (0.4 * dur) 0.001) $ +    fosc 1 2 (0.5 * xeg 0.01 0.1 0.2 0.5) (cps * semitone (expseg [12, 0.01, 27, 0.3, 0.001]))+    where +    	compr x = dam x 0.65 2.4 2.3 0.05 0.1+    	dur = trDur spec+    	cps = sig $ trCps spec +++snSpec = cpsSpec 342+	+snare = snare' snSpec++snare' spec = pureSnare' =<< rndSpec spec++-- sound consists of two sine tones, an octave apart and a noise signal		+pureSnare' :: TrSpec -> SE Sig+pureSnare' spec = rndAmp =<< addDur =<< (apitch + anoise)+	where	+		dur 	= trDur  spec+		tune    = trTune spec+		cps     = trCps  spec++		iNseDur = dur * 0.3+		iPchDur  = dur * 0.1++		-- sine tones component+		aenv1 	= expsegr [1, iPchDur, 0.0001] iNseDur 0.0001+		apitch1 = rndOsc (sig cps)+		apitch2 = rndOsc (0.5 * sig cps)+		apitch  = mul (0.75 * aenv1) (apitch1 + apitch2)++		-- noise component		+		aenv2	= expon 1 iNseDur 0.0005+		kcf 	= expsegr [5000, 0.1, 3000] iNseDur 0.0001+		anoise	= mul aenv2 $ do+			x <- noise 0.75 0+			return $ blp kcf $ bhp 1000 $ bbp (10000 * octave (sig tune)) 10000 x++ohSpec = cpsSpec 296+chSpec = cpsSpec 296++openHiHat = openHiHat' ohSpec+closedHiHat = closedHiHat' chSpec++openHiHat' :: TrSpec -> SE Sig+openHiHat' spec = genHiHat (linsegr [1, (dur/2) - 0.05, 0.1, 0.05, 0] dur 0) spec+	where dur = trDur spec++closedHiHat' :: TrSpec -> SE Sig+closedHiHat' spec = genHiHat (expsega [1, (dur / 2), 0.001]) spec+	where dur = trDur spec++-- sound consists of 6 pulse oscillators mixed with a noise component+-- cps = 296+genHiHat :: Sig -> TrSpec -> SE Sig+genHiHat pitchedEnv spec = rndAmp =<< addDur =<< (amix1 + anoise)+	where 	+		dur 	= trDur  spec+		tune    = trTune spec+		cps     = trCps  spec++		halfDur = dur * 0.5		++		-- pitched element+		harmonics = [1.0, 0.962, 1.233, 1.175,1.419, 2.821]		+		amix 	= mul 0.5 $ fmap sum $ mapM (rndPw 0.25 . sig . (* (cps * octave tune))) harmonics+		amix1   = mul pitchedEnv $ at (\asig -> bhp 5000 $ bhp 5000 $ reson asig (5000 * octave (sig tune)) 5000 `withD` 1) amix++		-- noise element+		kcf		= expseg [20000, 0.7, 9000, halfDur-0.1, 9000] +		anoise 	= mul pitchedEnv $ do+			x <- noise 0.8 0+			return $ bhp 8000 $ blp kcf x++htSpec = cpsSpec 200+mtSpec = cpsSpec 133+ltSpec = cpsSpec 90++lowTom = lowTom' ltSpec+midTom = midTom' mtSpec+highTom = highTom' htSpec ++-- cps = 200+highTom' :: TrSpec -> SE Sig+highTom' = genTom 0.5 (400, 100, 1000)++-- cps = 133+midTom' :: TrSpec -> SE Sig+midTom' = genTom 0.6 (400, 100, 600)++-- cps =  90+lowTom' :: TrSpec -> SE Sig+lowTom' = genTom 0.6 (40, 100, 600)++genTom :: D -> (Sig, Sig, Sig) -> TrSpec -> SE Sig+genTom durDt (resonCf, hpCf, lpCf) spec = rndAmp =<< addDur =<< (asig + anoise)+	where	+		dur 	= trDur  spec+		tune    = trTune spec+		cps     = trCps  spec++		ifrq 	= cps * octave tune+		halfDur = durDt * dur++		-- sine tone signal+		aAmpEnv	= transeg [1, halfDur, -10, 0.001]+		afmod	= expsega  [5, 0.125/ifrq, 1]+		asig  	= mul (-aAmpEnv) $ rndOsc (sig ifrq * afmod)++		-- noise signal+		aEnvNse = transeg [1, halfDur, -6 , 0.001]+		otune = sig $ octave tune+		anoise  = mul aEnvNse $ do +			x <- noise 1 0.4+			return $ blp (lpCf * otune) $ bhp (hpCf * otune) $ reson x (resonCf * otune) 800 `withD` 1++cymSpec = cpsSpec 296++cymbal = cymbal' cymSpec++-- sound consists of 6 pulse oscillators mixed with a noise component+-- cps = 296+cymbal' :: TrSpec -> SE Sig+cymbal' spec = rndAmp =<< addDur =<< (fmap (amix1 + ) anoise)+	where +		dur 	= trDur  spec+		tune    = trTune spec+		cps     = trCps  spec++		fullDur = dur * 2++		-- pitched element+		harmonics = [1.0, 0.962, 1.233, 1.175,1.419, 2.821]+		aenv 	= expon 1 fullDur 0.0001+		amix 	= mul 0.5 $ sum $ fmap (pw 0.25 . sig . (* (cps * octave tune))) harmonics+		amix1   = mul aenv $ blp 12000 $ blp 12000 $ bhp 10000 $ reson amix (5000 * octave (sig tune)) 5000 `withD` 1++		-- noise element+		aenv2   = expsega [1,0.3,0.07,fullDur-0.1,0.00001]+		kcf		= expseg [14000, 0.7, 7000, fullDur-0.1, 5000] +		anoise 	= mul aenv2 $ do+			x <- noise 0.8 0+			return $ bhp 8000 $ blp kcf x++clSpec = cpsSpec 2500++claves = claves' clSpec++-- cps = 2500+claves' :: TrSpec -> SE Sig+claves' spec = rndAmp =<< addDur =<< asig+	where+		dur 	= trDur  spec+		tune    = trTune spec+		cps     = trCps  spec++		ifrq = cps * octave tune+		dt   = 0.045 * dur+		aenv = expsega	[1, dt, 0.001]+		afmod = expsega	[3,0.00005,1]+		asig = mul (- 0.4 * (aenv-0.001)) $ rndOsc (sig ifrq * afmod)++rimSpec = cpsSpec 1700++rimShot = rimShot' rimSpec++rimShot' spec = pureRimShot' =<< rndSpec spec++-- cps = 1700+pureRimShot' :: TrSpec -> SE Sig+pureRimShot' spec = rndAmp =<< addDur =<< (mul 0.8 $ aring + anoise)+	where+		dur 	= trDur  spec+		tune    = trTune spec+		cps     = trCps  spec++		fullDur = 0.027 * dur++		-- ring+		aenv1 =	expsega	[1,fullDur,0.001]+		ifrq1 =	sig $ cps * octave tune		+		aring = mul (0.5 * (aenv1 - 0.001)) $ at (bbp ifrq1 (ifrq1 * 8)) $ rndOscBy tabTR808RimShot ifrq1++		-- noise+		aenv2 =	expsega	[1, 0.002, 0.8, 0.005, 0.5, fullDur-0.002-0.005, 0.0001]+		kcf	  = expsegr [4000, fullDur, 20] fullDur 20+		anoise = mul (aenv2 - 0.001) $ fmap (blp kcf) $ noise 1 0++		tabTR808RimShot = setSize 1024 $ sines [0.971,0.269,0.041,0.054,0.011,0.013,0.08,0.0065,0.005,0.004,0.003,0.003,0.002,0.002,0.002,0.002,0.002,0.001,0.001,0.001,0.001,0.001,0.002,0.001,0.001]++cowSpec = cpsSpec 562++cowbell = cowbell' cowSpec++-- cps = 562+cowbell' ::  TrSpec -> SE Sig+cowbell' spec = rndAmp =<< addDur =<< ares+	where+		dur 	= trDur  spec+		tune    = trTune spec+		cps     = trCps  spec++		ifrq1 = sig $ cps * octave tune+		ifrq2 = 1.5 * ifrq1+		fullDur = 0.7 * dur+		ishape	= -30+		ipw  	= 0.5+		kenv1	= transeg	[1,fullDur*0.3,ishape,0.2, fullDur*0.7,ishape,0.2]+		kenv2	= expon	1 fullDur 0.0005+		kenv    = kenv1 * kenv2+		amix    = mul 0.65 $ rndPw 0.5 ifrq1 + rndPw 0.5 ifrq2+		iLPF2	= 10000+		kcf		= expseg [12000,0.07,iLPF2,1,iLPF2]+		alpf    = at (blp kcf) amix+		abpf    = at (\x -> reson x ifrq2 25) amix+		ares    = mul (0.08 * kenv) $ at dcblock2 $ mul (0.06 * kenv1) abpf + mul 0.5 alpf + mul 0.9 amix ++-- TODO clap++{-+instr	112	;CLAP+	krelease	release				;SENSE RELEASE OF THIS NOTE ('1' WHEN RELEASED, OTHERWISE ZERO)   +	chnset	1-krelease,"Act12"              	;TURN ON ACTIVE LIGHT WHEN NOTE STARTS, TURN IT OFF WHEN NOTE ENDS+	iTimGap	=	0.01				;GAP BETWEEN EVENTS DURING ATTACK PORTION OF CLAP+	idur1  	=	0.02				;DURING OF THE THREE INITIAL 'CLAPS'+	idur2  	=	2*i(gkdur12)			;DURATION OF THE FOURTH, MAIN, CLAP+	idens  	=	8000				;DENSITY OF THE NOISE SIGNAL USED TO FORM THE CLAPS+	iamp1  	=	0.5				;AMPLITUDE OF AUDIO BEFORE BANDPASS FILTER IN OUTPUT+	iamp2  	=	1				;AMPLITUDE OF AUDIO AFTER BANDPASS FILTER IN OUTPUT+	if frac(p1)==0 then				;IF THIS IS THE INITIAL NOTE (p1 WILL BE AN INTEGER)+	 ;	        del.  dur  env.shape+	 event_i	"i", p1+0.1, 0,          idur1, p4	;CALL THIS INSTRUMENT 4 TIMES. ADD A FRACTION ONTO p1 TO BE ABLE TO DIFFERENTIATE THESE SUBSEQUENT NOTES+	 event_i	"i", p1+0.1, iTimGap,    idur1, p4+	 event_i	"i", p1+0.1, iTimGap*2,  idur1, p4+	 event_i	"i", p1+0.1, iTimGap*3,  idur2, p4+	else+	 kenv	transeg	1,p3,-25,0				;AMPLITUDE ENVELOPE+	 iamp	random	0.7,1					;SLIGHT RANDOMISATION OF AMPLITUDE	+	 anoise	pinkish	kenv*iamp+	 iBPF   	=	1100*octave(i(gktune12))	;FREQUENCY OF THE BANDPASS FILTER+	 ibw    	=	2000*octave(i(gktune12))	;BANDWIDTH OF THE BANDPASS FILTER+	 iHPF   	=	1000				;FREQUENCY OF A HIGHPASS FILTER+	 iLPF   	=	1				;SCALER FOR FREQUENCY OF A LOWPASS FILTER+	 kcf	expseg	8000,0.07,1700,1,800,2,500,1,500	;CREATE CUTOFF FREQUENCY ENVELOPE+	 asig	butlp	anoise,kcf*iLPF				;LOWPASS FILTER THE SOUND+	 asig	buthp	asig,iHPF				;HIGHPASS FILTER THE SOUND+	 ares	reson	asig,iBPF,ibw,1				;BANDPASS FILTER THE SOUND (CREATE A NEW SIGNAL)+	 asig	dcblock2	(asig*iamp1)+(ares*iamp2)	;MIX BANDPASS FILTERED AND NON-BANDPASS FILTERED SOUND ELEMENTS+	 asig	=	asig*p4*i(gklevel12)*1.75*gklevel	;SCALE AMPLITUDE+	 aL,aR	pan2	asig,i(gkpan12)				;PAN MONOPHONIC SIGNAL+		outs	aL,aR					;SEND AUDIO TO OUTPUTS+	endif+endin+-}++{-+clap ::  D -> D -> D -> Sig+clap dur tune cps =+	where+		iTimGap	=	0.01+-}++marSpec = cpsSpec 450++maraca = maraca' marSpec++maraca' ::  TrSpec -> SE Sig+maraca' spec = rndAmp =<< addDur =<< anoise+	where+		dur 	= trDur  spec+		tune    = trTune spec+		cps     = trCps  spec++		fullDur = 0.07* dur+		otune   = sig $ octave tune+		iHPF 	= limit	(6000 * otune) 20 (sig getSampleRate / 2)+		iLPF 	= limit	(12000 * otune) 20 (sig getSampleRate / 3)+		aenv	= expsega [0.4,0.014* dur,1,0.01 * dur, 0.05, 0.05 * dur, 0.001]+		anoise  = mul aenv $ fmap (blp iLPF . bhp iHPF) $ noise 0.75 0++hcSpec = cpsSpec 420+mcSpec = cpsSpec 310+lcSpec = cpsSpec 227++highConga = highConga' hcSpec+midConga  = midConga'  mcSpec+lowConga  = lowConga'  lcSpec ++-- high conga+-- cps = 420+highConga' :: TrSpec -> SE Sig+highConga' = genConga 0.22++-- cps = 310+midConga' :: TrSpec -> SE Sig+midConga' = genConga 0.33++-- cps = 227+lowConga' :: TrSpec -> SE Sig+lowConga' = genConga 0.41++genConga :: D -> TrSpec -> SE Sig+genConga dt spec = rndAmp =<< addDur =<< asig+	where+		dur 	= trDur  spec+		tune    = trTune spec+		cps     = trCps  spec++		ifrq = cps * octave tune+		fullDur = dt * dur+		aenv = transeg [0.7,1/ifrq,1,1,fullDur,-6,0.001]+		afmod = expsega [3,0.25/ifrq,1]+		asig = mul (-0.25 * aenv) $ rndOsc (sig ifrq * afmod)+++-----------------------------------------------------+-- sampler++mkSam = limSam 1++-- | Bass drum+bd :: Sam+bd = mkSam bass++bd2 :: Sam+bd2 = mkSam bass2++-- | Snare+sn :: Sam+sn = mkSam snare++-- | Open hi-hat+ohh :: Sam+ohh = mkSam openHiHat++-- | Closed hi-hat+chh :: Sam+chh = mkSam closedHiHat ++-- | High tom+htom :: Sam+htom = mkSam highTom++-- | Middle tom+mtom :: Sam+mtom = mkSam midTom++-- | Low tom+ltom :: Sam+ltom = mkSam lowTom++-- | Cymbal+cym :: Sam+cym = mkSam cymbal++-- | Claves+cl :: Sam+cl = mkSam claves++-- | Rim shot+rim :: Sam+rim = mkSam rimShot++-- | Maracas+mar :: Sam+mar = mkSam maraca++-- | High conga+hcon :: Sam+hcon = mkSam highConga++-- | Middle conga+mcon :: Sam+mcon = mkSam midConga++-- | Low conga+lcon :: Sam+lcon = mkSam lowConga++-- generic sam++mkSam' f spec = mkSam $ f spec++-- | Bass drum+bd' :: TrSpec -> Sam+bd' = mkSam' bass'++bd2' :: TrSpec -> Sam+bd2' = mkSam' bass2'++-- | Snare+sn' :: TrSpec -> Sam+sn' = mkSam' snare'++-- | Open hi-hat+ohh' :: TrSpec -> Sam+ohh' = mkSam' openHiHat'++-- | Closed hi-hat+chh' :: TrSpec -> Sam+chh' = mkSam' closedHiHat'++-- | High tom+htom' :: TrSpec -> Sam+htom' = mkSam' highTom'++-- | Middle tom+mtom' :: TrSpec -> Sam+mtom' = mkSam' midTom'++-- | Low tom+ltom' :: TrSpec -> Sam+ltom' = mkSam' lowTom'++-- | Cymbal+cym' :: TrSpec -> Sam+cym' = mkSam' cymbal'++-- | Claves+cl' :: TrSpec -> Sam+cl' = mkSam' claves'++-- | Rim shot+rim' :: TrSpec -> Sam+rim' = mkSam' rimShot'++-- | Maracas+mar' :: TrSpec -> Sam+mar' = mkSam' maraca'++-- | High conga+hcon' :: TrSpec -> Sam+hcon' = mkSam' highConga'++-- | Middle conga+mcon' :: TrSpec -> Sam+mcon' = mkSam' midConga'++-- | Low conga+lcon' :: TrSpec -> Sam+lcon' = mkSam' lowConga'++
src/Csound/Catalog/Effect.hs view
@@ -85,12 +85,12 @@ -- nightReverb :: Int -> D -> D -> D -> Sig -> SE (Sig, Sig) nightReverb n igain ipitchmod itone asig = do-    afiltRefs   <- mapM newSERef $ replicate n 0-    afilts1     <- mapM readSERef afiltRefs +    afiltRefs   <- mapM newRef $ replicate n 0+    afilts1     <- mapM readRef afiltRefs      let apj     = (2 / fromIntegral n) * sum afilts1     adels       <- sequence $ zipWith3 (del apj) idels ks afilts1-    zipWithM_ (\ref x -> writeSERef ref $ filt x) afiltRefs adels-    afilts2     <- mapM readSERef afiltRefs+    zipWithM_ (\ref x -> writeRef ref $ filt x) afiltRefs adels+    afilts2     <- mapM readRef afiltRefs     return (mean $ odds afilts2, mean $ evens afilts2)         where         idels = cycle $ fmap ( / getSampleRate) [2473, 2767, 3217, 3557, 3907, 4127, 2143, 1933]
src/Csound/Catalog/Reson.hs view
@@ -79,7 +79,7 @@     onNormDur   <- noise (osciln 1 (1 / dt) decayShape 1) 0              return $ guardedTuple -        [ (sig dt <*  0.001,    onLowDur)+        [ (sig dt `lessThan` 0.001,    onLowDur)         , (sig dt >=* 1,        onHighDur)         ]                       onNormDur             where
src/Csound/Catalog/Wave.hs view
@@ -59,8 +59,42 @@     maleA, maleE, maleIY, maleO, maleOO, maleU, maleER, maleUH,     femaleA, femaleE, femaleIY, femaleO, femaleOO, +    -- * Sean Costello+    RissetBellSpec(..), rissetBell, timpani, timpaniSpec, noiseBell, noiseBellSpec,+    snowCrackle, +    fmDrone, fmDrones,+    tenorOsc, sopranoOsc,++    -- * Flavio+    amFlavio, fmFlavio, simpleSust, simpleFading,++    -- * Thor+    cathedralOrgan, cathedralOrganFx, hammondOrgan,++    amPiano, ++    pwBass, pwHarpsichord, pwEnsemble,++    simpleBass, ++    EpianoOsc(..), epiano, ++    noisyChoir, thorWind, mildWind, boom, windWall, ++    razorPad, razorLead,++    -- * Bitwig++    pwPad, triPad, triPadFx, +    Accordeon(..), accordeon, accordeonFx,++    -- * Pads+    polySynthFx, polySynth,+    dreamPad, underwaterPad, lightIsTooBrightPad, whaleSongPad,+     -- * Other instruments-    okComputer+    okComputer, deepBass+ ) where  import Csound.Base@@ -73,6 +107,11 @@ import Csound.Catalog.Wave.Deserted import Csound.Catalog.Wave.TheHeartbeat import Csound.Catalog.Wave.TrappedInConvert++import Csound.Catalog.Wave.Sean+import Csound.Catalog.Wave.Flavio+import Csound.Catalog.Wave.Thor+import Csound.Catalog.Wave.Bitwig  import Csound.Catalog.Wave.Misc 
src/Csound/Catalog/Wave/Amsterdam.hs view
@@ -16,6 +16,6 @@ -- * cps - the frequency of the note tibetan :: Int -> Sig -> D -> Sig tibetan n off cps = chorusPitch n (2 * off * fromIntegral n) (oscBy wave) (sig cps)-    where wave = ifB (cps <* 230) (waveBy 5) (ifB (cps <* 350) (waveBy 3) (waveBy 1))+    where wave = ifB (cps `lessThan` 230) (waveBy 5) (ifB (cps `lessThan` 350) (waveBy 3) (waveBy 1))           waveBy x = sines $ [0.3, 0, 0, 0] ++ replicate x 0.1 
+ src/Csound/Catalog/Wave/Bitwig.hs view
@@ -0,0 +1,51 @@+module Csound.Catalog.Wave.Bitwig(+	pwPad, triPad, triPadFx, +	Accordeon(..), accordeon, accordeonFx+) where++import Csound.Base++---------------------------------------------------+-- wind pads++triPadFx :: Sig2 -> SE Sig2+triPadFx a = mixAt 0.5 smallHall2 $ at (chorus 0.2 0.3 0.25) (return a :: SE Sig2)++triPad x = mul (1.5 * fades 0.3 0.5) $ at (mlp (x * 5) 0.15) $ do+	lfo <- rand 1.2+	mul 0.5 $ rndTri (x + 1.5 * lfo) + rndTri (x * cent 8)++pwPad :: Sig -> SE Sig+pwPad x = mul (fades 0.3 0.95) $ at (mlp (x * 5) 0.15) $ do+	let lfo = uosc 4+	return $ mul 0.5 $ pw (0.2 + 0.4 * lfo) x + tri (x * cent 8)++pwPadMidi = mul 0.5 $ mixAt 0.5 smallHall2 $ at (chorus 0.2 0.3 0.25) $ at fromMono $ midi $ onMsg pwPad++---------------------------------------------------+-- accordeon++osc4 freq1 freq2 freq3 freq4 a b cps = cfd4 a b (saw (cps * freq1)) (sqr (cps * freq2)) (saw (cps * freq3)) (sqr (cps * freq4))+mlpTrack cps center q = mlp (cps + 6500 * center) q++data Accordeon = Accordeon +	{ accordeonFreq1 :: Sig+	, accordeonFreq2 :: Sig+	, accordeonFreq3 :: Sig+	, accordeonFreq4 :: Sig+	}++instance Default Accordeon where+	def = Accordeon 1 0.5 2.01 2++accordeon :: Accordeon -> Sig -> SE Sig2+accordeon spec cps = fmap fromMono $ liftA2 (\a b -> mul vcaEg $ mlpTrack (cps * 2) (0.5 * vcfEg) 0.1 $ f a b cps) (rndPointer 6 (0.3, 0.2)) (rndPointer 10 (0.4, 0.1))+	where+		vcaEg = leg 0.01 0.3 0.5 0.3+		vcfEg = leg 0.05 0.3 0.2 0.2+		rndPointer' a dt b cps (x, y) = fmap (\r -> x + y * linseg [0, 0.01, a, dt, b] * r) (randi 1 cps)+		rndPointer = rndPointer' 1 5 0.35+		f = osc4 (accordeonFreq1 spec) (accordeonFreq2 spec) (accordeonFreq3 spec) (accordeonFreq4 spec)++accordeonFx :: Sig2 -> SE Sig2+accordeonFx a = at smallHall2 $ mixAt 0.35 (echo 0.25 0.55) (return a :: SE Sig2)
+ src/Csound/Catalog/Wave/Flavio.hs view
@@ -0,0 +1,63 @@+module Csound.Catalog.Wave.Flavio(+	amFlavio, fmFlavio, simpleSust, simpleFading+) where++import Data.List+import Control.Monad++import Csound.Base ++icero     =  0.000001+icasi     =  0.0001	 		++-- epiano-s++-- irel1 = 16+amFlavio irel1 cps = aout+	where 		+  		irel1     = 16  		+  		iamf      = 1+  		irel2     = irel1 * 0.7+	 	kamp      = expsegr [icero, 0.05, 1, 1, 0.7, irel1, icasi, irel2, icero]  irel2 icero 	 	+	 	aam       = kamp * osc (iamf * cps)+	 	aout      = aam  * osc cps++-- irel1 = 6, ifm = (2, 7), +fmFlavio irel1 ifm cps = aout+	where		+		irel2   = irel1 * 0.5	+		idec    = 1+		iatt    = 0.01++		(iidx1, iidx2, iidx3, iidx4, iidx5) = (4,      4,      4,     4,      3)++		kamp    = expsegr    [icero, iatt, 1, idec, 0.7, irel1, icasi, irel2, icero] irel2 icero+		kidx    = linsegr    [iidx1, iatt, iidx2, idec, iidx3, irel1, iidx4, irel2, iidx5] irel2 iidx5++		afrq 	= kidx * osc (ifm * cps)+		aout    = kamp * osc (cps * (1 + afrq))+++simpleSust   = genSimple 0.25  0.1+simpleFading = genSimple icasi icero++genSimple isust1 isust2 irel (amp, dcps) = do+	aleft  <- fmap pure $ random 1 (11  * sig amp)+	aright <- fmap pure $ random 1 (10.5  * sig amp)+	return (aleft, aright)+	where+		cps = sig dcps+		pure ichr = aout+			where+				irel1 = irel * (0.5 + amp)+				iatt    = 0.01+				idec    = 1+				irel2   = 0.75 * irel1++				-- kamp    = expsegr    [1, idec, 0.7, irel1, icasi, irel2, icero] irel2 icero+				kamp    = expsegr    [1, idec, 0.7, irel1, isust1, irel2, isust2] irel2 icero+				kcf     = 2 * sig amp * linsegr    [3000, irel1 + 1, 500] irel2 500+				a3      = kamp * (osc (cps - ichr) + osc (cps - ichr))* 0.5++				aout = blp kcf a3+
src/Csound/Catalog/Wave/Misc.hs view
@@ -1,5 +1,7 @@ module Csound.Catalog.Wave.Misc (-    okComputer        +    okComputer, polySynthFx, polySynth,+    dreamPad, underwaterPad, lightIsTooBrightPad, whaleSongPad,+    deepBass ) where  import Csound.Base @@ -14,3 +16,54 @@     where         go anoise = osc (samphold anoise kgate)         kgate = kr $ oscil 1 cps (elins [1, 0, 0])+++polySynth x = mul (fades 0.01 0.15) $ at (mlp 5500 0.12) $ at (filt 2 br 18000 0.3) $ uni rndSaw x + uni rndSaw (x * cent 14) + (mul 0.2 $ at (lp 400 0.1) white)+   where uni = multiHz 2 (cent 50)++polySynthFx :: SE Sig -> SE Sig2+polySynthFx = mixAt 0.25 largeHall2 . mixAt 0.25 (echo 0.25 0.65) . at (chorus 0.07 1.25 0.25) . at fromMono++uni = multiHz 2 (cent 50)++dreamPad = genDreamPadInstr mkOsc +    where mkOsc vibLfo1 vibLfo2 x = uni rndSaw (vibLfo1 x) + uni rndSaw (vibLfo2 $ x * cent 14) ++underwaterPad = genDreamPadInstr mkOsc +    where mkOsc vibLfo1 vibLfo2 x = uni rndTri (vibLfo1 x) + uni rndTri (vibLfo2 $ x * cent 14) ++lightIsTooBrightPad = genDreamPadInstr mkOsc +    where mkOsc vibLfo1 vibLfo2 x = uni rndSaw (vibLfo1 x) + uni rndSaw (vibLfo2 $ x * cent 14) + mul 0.3 (mul (uosc 0.25) (rndTri (vibLfo2 $ x * 7 * cent 4)) + mul (isawSeq [1, 0.5, 0.25] 6 * uosc 0.17) (rndTri (vibLfo2 $ x * 13)) + mul (sqrSeq [1, 0.5, 0.25, 0.1] 8 * uosc 0.28) (rndOsc (vibLfo2 $ x * 9 * cent 3)))++whaleSongPad = genDreamPadInstr mkOsc +    where mkOsc vibLfo1 vibLfo2 x = uni rndTri (vibLfo1 x) + uni rndTri (vibLfo2 $ x * cent 14) + uni rndTri (vibLfo2 $ 3 * x * cent 14) + mul 0.15 (uni rndTri (vibLfo2 $ 7 * x * cent 14)) + mul 0.15 (uni rndTri ((vibLfo2 $ 11 * x * cent 14) + 400 * uosc 0.2))++genDreamPadInstr mkOsc brightness x = do+    a1 <- oscs+    a2 <- nois+    return $ mul (fades 0.85 0.95) $ fx1 (a2 + a1) + fx2 a1   +    where+        fx1 = filt 2 mlp (filtLfo1 (700 + brightness * 2500)) 0.26+        fx2 = mlp (filtLfo2 (1200 + brightness * 2500)) 0.32++        -- saw+        oscs = mkOsc vibLfo1 vibLfo2 x++        -- underwater+        -- oscs = uni rndTri (vibLfo1 x) + uni rndTri (vibLfo2 $ x * cent 14)  -- + uni rndTri (vibLfo2 $ 3 * x * cent 14)++        -- wales howling+        -- oscs = uni rndTri (vibLfo1 x) + uni rndTri (vibLfo2 $ x * cent 14) + uni rndTri (vibLfo2 $ 3 * x * cent 14) + mul 0.15 (uni rndTri (vibLfo2 $ 7 * x * cent 14)) + mul 0.15 (uni rndTri ((vibLfo2 $ 11 * x * cent 14) + 400 * uosc 0.2))+        nois = mul 0.35 $ at (lp 2400 0.1) white++        uni = multiHz 2 (cent 50)+        lfo1 y x = x * (1 + y * osc (0.35 + 0.05  * osc 0.1))+        lfo2 y x = x * (1 + y * osc (0.22 + 0.043 * osc 0.14))++        filtLfo1 = lfo1 0.18+        filtLfo2 = lfo2 0.13++        vibLfo1 = lfo1 0.005+        vibLfo2 = lfo2 0.007++deepBass x = mul 0.5 $ at (hp1 45) $ at (\x -> dam x 0.45 2 2 0.01 0.01) $  mul (xeg 0.005 0.6 1 0.05) $ sum [(filt 2 lp 275 0.25) (saw $ x * 0.5), osc (x * 0.5)]
+ src/Csound/Catalog/Wave/Sean.hs view
@@ -0,0 +1,202 @@+{-# Language FlexibleContexts #-}+module Csound.Catalog.Wave.Sean(+	RissetBellSpec(..), rissetBell, timpani, timpaniSpec, noiseBell, noiseBellSpec,+	snowCrackle, +	fmDrone, fmDrones,+	tenorOsc, sopranoOsc+) where++import Data.List+import Control.Monad++import Csound.Base hiding (formant)++data RissetBellSpec = RissetBellSpec+	{ rissetBellRands 		:: [D]+	, rissetBellRandShifts	:: [D]+	, rissetBellDurs 		:: [D]+	, rissetBellAmps		:: [Sig]	+	, rissetBellFreqs       :: [Sig]+	, rissetBellFreqShifts	:: [Sig]+	}++rissetBell :: RissetBellSpec -> (D, D) -> D -> Sig -> Sig -> SE Sig+rissetBell spec (from, to) dur amp cps = ares+	where+		idurs  = fmap (dur * ) (rissetBellDurs spec)+		ifreqs = fmap (cps * ) (rissetBellFreqs spec)+		ifreqDt = (rissetBellFreqShifts spec)+		iamps  = fmap (amp * ) (rissetBellAmps spec)+		irands = (rissetBellRands spec)+		irandDt = (rissetBellRandShifts spec)++		partial iamp ifreq ifreqDt idur irand irandDt = do+			amod <- randi iamp (linseg [from * irand + irandDt, idur, to * irand + irandDt])+			return $ mul amod $ osc (ifreq + ifreqDt)++		env = expsegr [1, dur, 0.001] dur 0.001+		ares = mul 0.75 $ fmap sum $ zipWithM (\(iamp, ifreq, ifreqDt) (idur, irand, irandDt) -> partial iamp ifreq ifreqDt idur irand irandDt) (zip3 iamps ifreqs ifreqDt) (zip3 idurs irands irandDt)++timpaniSpec = RissetBellSpec +	{	rissetBellDurs       = [0.087, 0.5, 0.804, 0.065, 0.325, 0.54, 1,    0.195, 0.108, 0.89, 0.075]+	,	rissetBellFreqs      = [0.8,  1.00,  1.5,  1.65,  1.97,  2,    2.44, 2.86,  2.71,  2.91,  3.27]+	,	rissetBellFreqShifts = [0,    0,    0,     0,     0,     0,    0,    0,    0,      0,     0] +	,	rissetBellAmps       = [1,    2.52,  1.83, 0.55,  1.47,  1.67, 0.62, 0.5,  0.52,   0.55,  0.33]+	,	rissetBellRands      = [0.56, 0.56, 0.92,  0.92,  1.19,  1.7,  2,    2.74, 3,      3.75,  4.07]+	,	rissetBellRandShifts = [0,    1,    0,     1.7,   0,     0,    0,    0,    0,      0,     0] }++timpani :: (D, D) -> D -> Sig -> Sig -> SE Sig+timpani (from, to) dur amp cps = mul env $ rissetBell timpaniSpec (from, to) dur amp cps+	where env = expsegr [1, dur, 0.001] dur 0.001+++noiseBellSpec = RissetBellSpec +	{ rissetBellDurs  			=[1,    0.9,  0.65, 0.55, 0.325, 0.35, 0.25, 0.2,  0.15,  0.1, 0.075]+	, rissetBellFreqs 			= [0.56, 0.56, 0.92, 0.92, 1.19,  1.7,  3,    2.74, 3,     3.75, 4.07]+	, rissetBellFreqShifts 		= [0,    1,    0,     1.7,    0,   0,   0,    0,    0,      0,      0]+	, rissetBellAmps  			= [1,    0.67, 1.35, 1.8,  2.67, 1.67, 1.46,  1.33, 1.33,  0.75, 1.33]+	, rissetBellRands      		= [0.56, 0.56, 0.92,  0.92,  1.19,  1.7,  2,    2.74, 3,      3.75,  4.07]+	, rissetBellRandShifts 		= [0,    1,    0,     1.7,   0,     0,    0,    0,    0,      0,     0] }++-- | > dac $ noiseBell (31, 125) 2.3 0.2 2900+noiseBell :: (D, D) -> D -> Sig -> Sig -> SE Sig+noiseBell (from, to) dur amp cps = mul env $ rissetBell noiseBellSpec (from, to) dur amp cps+	where env = expsegr [1, dur, 0.001] dur 0.001++------------------------------------------------------------------------++-- | speed ~ 10 - 20+--+-- > snowCrackle speed+snowCrackle :: Sig -> Sig+snowCrackle speed = mlp 1200 0.1 $ mouseDrum speed (3 + 2 * uosc 0.1)  (160 + 100 * uosc 0.13)+	where+		mouseDrum :: Sig -> Sig -> Sig -> Sig+		mouseDrum freq index cps = +			sched instr $ withDur dur $ fmap (\[a, b] -> (a, b)) $ randList 2 $ dust freq+			where +				dur = 0.049+				instr (rndCps, rndIndex) = return $+					mouseDrumGrain dur +						(cps + 10 * sig (2 * rndCps - 1)) +						(index + 0.01 * sig (2 * rndIndex - 1))++		mouseDrumGrain dur icarfreq index = aosc+			where+				iratio = 1.416+				idev = imodfreq * index+				imodfreq = icarfreq * iratio+				amod = mul (idev * imodfreq) $ osc imodfreq+				kenv = expsegr [1, dur, 0.001] dur 0.001+				aosc = mul kenv $ osc (icarfreq + amod)++------------------------------------------------------------------------++fmDronePartial amod' index idev kamp1 ifreq1 (a1, a2, a3, a4) = ares+	where+		aosc1 = mul (idev * kamp1) $ osc (ifreq1 * a1)+		aosc2 = osc (ifreq1 * a2 + aosc1 + amod')+		aosc3 = osc (ifreq1 * a3 + aosc1 + amod')+		aosc4 = osc (a4 + aosc1 + amod')+		ares  = 0.5 * kamp1 * sum [aosc2, aosc3, aosc4]++scDrone = fmDrone 3 +scDrones = fmDrones 3 ++pulseIndex ns speed = 1 + 7 * seqSqr [seqDesc ns] speed++fmPulse ns speed = fmDrone (pulseIndex ns speed) (0.05, 0.5)+fmPulses amps harms ns speed = fmDrones (pulseIndex ns speed) amps harms (0.05, 0.5)++-- | > dac $ fmDrone 3 (20, 5) 110+fmDrone index (iatt, irel) cps = (aout1, aout2)+ 	where+ 		ifreq1 = cps+ 		iamp = 0.39 		+ 		idev = index * ifreq1+ 		kamp1 = leg iatt 0 1 irel 		++ 		f a1 a2 a3 a4 = iamp * fmDronePartial 0 index idev kamp1 ifreq1 (a1, a2, a3, a4)++ 		aout1 = f 1    0.998 1.5007 0.1+ 		aout2 = f 0.99 0.987 1.498 0.13++fmDrones index amps harms (iatt, irel) cps = aout+	where+		iamp = 0.39 			 		+	 	kamp1 = leg iatt 0 1 irel ++		f amp h = do+			let ifreq1 = h * cps+	 		    idev = index * ifreq1 	 	    ++			a1 <- randomSig 1     0.03+			a2 <- randomSig 0.998 0.025+			a3 <- randomSig 1.5   0.004+			a4 <- randomSig 0.1   0.03+			return $ amp * fmDronePartial 0 index idev kamp1 ifreq1 (a1, a2, a3, a4)++		ares = fmap sum $ zipWithM f amps harms+		aout = liftA2 (,) ares ares++randomD :: D -> D -> SE D+randomD val dev = fmap ir $ random (sig $ val - dev) (sig $ val + dev)++randomSig :: Sig -> Sig -> SE Sig+randomSig val dev = random (val - dev) (val + dev)++gaussD :: D -> D -> SE D+gaussD val dev = fmap ((+ val) . ir) $ gauss (sig val)++gaussSig :: Sig -> Sig -> SE Sig+gaussSig val dev = fmap ((+ val)) $ gauss val++randiDev :: Sig -> Sig -> Sig -> SE Sig+randiDev val dev cps = fmap (+ val) $ randi dev cps ++randhDev :: Sig -> Sig -> Sig -> SE Sig+randhDev val dev cps = fmap (+ val) $ randh dev cps ++------------------------------------------------------------------------+-- choir++tenorOsc   = voiceOsc 0.9 +sopranoOsc = voiceOsc 0.8 ++linVibr2 (v1, v2) (vtime1, vtime2) = linseg [v1, vtime1, v1, vtime2, v2]++voiceOsc :: Sig -> (Sig -> Sig) -> Sig -> Sig -> SE Sig+voiceOsc mulHarm formantFilter kvib cps = at formantFilter $ voiceAnimator (RndDev 0.05 0.75)  kvib $ asig * kenv+	where		+		iharms = sig getSampleRate * 0.4 / cps+		asig = gbuzz 1 cps iharms 1 mulHarm (sines3 [(1, 1, 0.25)]) +		kenv = leg 0.1 0 1 0.1++data RndDev = RndDev+	{ rndDevRatio :: Sig+	, rndDevSpeed :: Sig+	}++voiceAnimator :: RndDev -> Sig -> Sig -> SE Sig+voiceAnimator rndDev kvib ain = aout+	where+		ktimes = zipWithM (\amp cps -> mul (amp * osc cps) $ addRnd rndDev kvib) [0.0012, 0.0009, 0.00087, 0.0011] [4, 5, 6.3, 4.4]+		-- ktimes = zipWith (\amp cps -> kvib * amp * osc cps) [0.0012, 0.0009, 0.00087, 0.0011, 0.00093, 0.00081, 0.0071] [4, 5, 6.3, 4.4, 5.2, 4.2, 5.5]+		aout = fmap (mean . fmap (\t -> vdelay ain t 0.015)) ktimes++addRnd :: RndDev -> Sig -> SE Sig+addRnd spec ain = do+	xDt <- randi (rndDevRatio spec) (rndDevSpeed spec)+	return $ ain * (1 + xDt)+++data Formant = Formant +	{ formantWeight :: Sig+	, formantCenter :: Sig+	, formantWidth  :: Sig	+	}++------------------------------------------------------------------------+-- ++
+ src/Csound/Catalog/Wave/Thor.hs view
@@ -0,0 +1,168 @@+{-# Language FlexibleContexts #-}+module Csound.Catalog.Wave.Thor(+	cathedralOrgan, cathedralOrganFx, hammondOrgan,++	amPiano, ++	pwBass, pwHarpsichord, pwEnsemble,++	simpleBass, ++	EpianoOsc(..), epiano, ++	noisyChoir, thorWind, mildWind, boom, windWall, ++	razorPad, razorLead+) where++import Data.List+import Control.Monad++import Csound.Base ++-- some instruments from the Thor explained series+--+-- https://www.propellerheads.se/substance/discovering-reason/index.cfm?article=part19&fuseaction=get_article++------------------------------+-- thor oscillators++------------------------------+-- 1 oscillators++cathedralOrganFx :: Sig -> Sig2+cathedralOrganFx = mixAt 0.25 largeHall . fromMono++cathedralOrgan cps = mul 0.3 $ sum $ fmap ($ cps) [hammondOrgan 3 , detune (2 * cent 4) (hammondOrgan 10), detune (3 * cent 3) (hammondOrgan 6)]++-- | hammondOrgan detune+--+-- detune = [0, 30] (in cents)+hammondOrgan :: Sig -> Sig -> SE Sig+hammondOrgan dt x = mul (fades 0.01 0.05) $ fmap mean $ mapM rndOsc +	[ x+	, 2 * x * cent dt+	, 3 * x * cent (2 * dt) ]++------------------------------+-- 2 am & sync++amPiano :: Sig -> SE Sig+amPiano x = mul env $ at (mlp (env * (3000 + x)) 0.25) $ (rndSaw x * rndSaw (4 * x))+	where env = leg 0.01 4 0 0.02++------------------------------+-- 3 pwm++pwBass :: Sig -> SE Sig+pwBass cps = mul (fades 0.005 0.05) $ at (mlp 1500  0.1) $ rndPw (0.25 * (1 + 0.07 * osc (1 + (7 * cps / 1000)))) cps++simpleBass :: (D, D) -> Sig+simpleBass (amp, cps') = aout+	where+		cps = sig cps'++		all = sum +			[ 0.4 * oscBy pulse $ cps * 0.998 - 0.12+			, 0.4 * osc         $ cps * 1.002 - 0.12+			, 0.4 * oscBy pulse $ cps * 0.998 - 0.12 +			, 0.7 * osc         $ cps         - 0.24 ]++		aout = mul (kgain * sig amp * linsegr [0, 0.01, 1, (3.5 * amp), 0] 0.35 0)+			$ blp (700 + (sig amp * 500))+			$ bhp 65+			$ bhp 65+			$ blp ksweep+			$ blp ksweep all++		ksweep = expsegr [3000, 0.03, 9000] 3 1 - 3000++		pulse = sines [1, 1, 1, 1, 0.7, 0.5, 0.3, 0.1]++		kgain = 2++pwHarpsichord :: Sig -> SE Sig+pwHarpsichord x = mul 2.5 $ mul (leg 0.005 1.5 0 0.25) $ at (mlp (env * 8000) 0.15) $ at (hp 2500 0.3) $ rndPw 0.4 x+	where env = leg 0.01 4 0 0.01++pwEnsemble :: Sig -> SE Sig+pwEnsemble x = mul 0.3 $ at (mlp (3500 + x * 2) 0.1) $ mul (leg 0.5 0 1 1) $ sum+	[ f 0.2 0.11 2 (x * cent (-6))+	, f 0.8 (-0.1) 1.8 (x * cent 6)+	, f 0.2 0.11 2 (x * 0.5) ]+	where f a b c = rndPw (a + b * tri c)++------------------------------+-- 4 Multi osc (unision)++data EpianoOsc = EpianoOsc +	{ epianoOscChorusNum :: Int+	, epianoOscChorusAmt :: Sig+	, epianoOscNum       :: Sig	+	, epianoOscWeight    :: Sig+	}++epiano :: [EpianoOsc] -> (D, D) -> SE Sig+epiano xs (amp, cps) = mul (sig amp * leg 0.001 sust 0 rel) $ at (mlp (2500 + 4500 * (leg 0.085 3 0 0.1)) 0.25) $+	fmap sum $ mapM (\x -> mul (epianoOscWeight x) $ multiRndSE (epianoOscChorusNum x) (epianoOscChorusAmt x) (detune (epianoOscNum x) rndOsc) (sig cps)) xs+ -- (multiRndSE 4 5 rndOsc + multiRndSE 8 10 (detune (2.01) rndOsc))+ 	where + 		sust = amp + 2 + (0.7 - 3 * k ** 2)+ 		rel  = (amp / 10) + 0.05 - (k / 10)+ 		k    = cps / 1000++------------------------------+-- 5 noise++-- noisyChor numberOfFilters bandWidthRatio cps+noisyChoir :: Int -> Sig -> Sig -> SE Sig+noisyChoir n ratio cps = mul 0.5 $ genGhostChoir white [1, 1] [1, 0.5] n (5 + 300 ** ratio) cps++genGhostChoir :: (SE Sig) -> [Sig] -> [Sig] -> Int -> Sig -> Sig -> SE Sig+genGhostChoir noiseGen amps hs n bw cps = mul env $ fmap sum $ zipWithM f amps hs+	where +		f :: Sig -> Sig -> SE Sig+		f a h = mul a $ bat (filt n bp (h * cps) bw) noiseGen+		env = fades 0.4 0.5++------------------------------+-- 6 noise++mildWind :: Sig -> SE Sig+mildWind cps = thorWind (cps * 2) 120 (0.2, 0.5)++thorWind :: Sig -> Sig -> (Sig, Sig) -> SE Sig +thorWind cps bw (speedMin, speedMax) = mul 1.3 $ do +	speed <- rspline (-1) 1 speedMin speedMax+	at (mlp (cps + bw * speed) 0.8) pink ++boom :: Sig -> SE Sig+boom cps = mul (1.2 * expon 1 2.05 0.001) $ fmap sum $ mapM (\x -> bat (bp (0.5 * cps * x) 10) white) [1, 1.51, 2.1, 3.05]++windWall :: Sig -> SE Sig+windWall cps = mul amEnv $ at (hp1 400) $ at (mlp (filtEnv * cps) 0.2) (mul 20 white )+	where +		amEnv   = leg 7 10 0 8+		filtEnv	= leg 6 0 1 5++------------------------------+-- 9, 10 fm++razorPad speed amp cps = f cps + 0.75 * f (cps * 0.5)+	where f cps = mul (leg 0.5 0 1 1) $ genRazor (filt 1 mlp) speed amp cps++razorLead bright speed amp cps = mul (0.5 * leg 0.01 1 0.5 0.5) $ genRazor (filt 2 (lp18 $ 2 * bright)) speed amp cps++genRazor filter speed amp cps = mul amp $ do+	a1 <- ampSpline 0.01+	a2 <- ampSpline 0.02	++	return $ filter (1000 + 2 * cps + 500 * amp) 0.1 $ mean [+		  fosc 1 3 (a1 * uosc (speed)) cps+		, fosc 3 1 (a2 * uosc (speed + 0.2)) cps+		, fosc 1 7 (a1 * uosc (speed - 0.15)) cps ]+	where ampSpline c = rspline ( amp) (3.5 + amp) ((speed / 4) * (c - 0.1)) ((speed / 4) * (c  + 0.1))++++
src/Csound/Catalog/Wave/Woodwind.hs view
@@ -7,6 +7,7 @@     , dizi     ) where + import Csound.Base hiding (fromSpec)  import Csound.Catalog.Wave.WoodwindAlg@@ -623,7 +624,7 @@         inorm = byRange [ 34991, 32586, 35331, 37480 ]          iwt1 = f11-        iwt2 = ifB (ifreq <* 1025) f31 f35+        iwt2 = ifB (ifreq `lessThan` 1025) f31 f35         iwt3 = byRange [f32, f33, f34, f36]                     f11 = sine
src/Csound/Catalog/Wave/WoodwindAlg.hs view
@@ -5,6 +5,7 @@ ) where  import Data.List (transpose, intersperse)+import Control.Monad import Control.Monad.Trans.State  import Csound.Base hiding (fromSpec)@@ -17,6 +18,10 @@ instance Functor Rnd where     fmap f (Rnd a) = Rnd $ fmap f a +instance Applicative Rnd where+    pure = return+    (<*>) = ap+ instance Monad Rnd where     return = Rnd . return     (Rnd a) >>= f = Rnd $ a >>= unRnd . f @@ -162,7 +167,7 @@         freqs = fmap rangeFreq specs  byFreq :: Tuple a => D -> [(D, a)] -> a-byFreq ifreq as = guardedTuple (fmap (\(cps, val) -> (sig ifreq <* sig cps, val)) $ init as) (snd $ last as)+byFreq ifreq as = guardedTuple (fmap (\(cps, val) -> (sig ifreq `lessThan` sig cps, val)) $ init as) (snd $ last as)   fromHarmSpec :: (D, D, D) -> HarmSpec -> (Sig, Tab)
+ src/Csound/Patch.hs view
@@ -0,0 +1,1158 @@+-- | 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,++	-- * Organ+	cathedralOrgan, toneWheelOrgan, +	HammondOrgan(..), hammondOrgan, hammondOrgan',+	sawOrgan, triOrgan, sqrOrgan, pwOrgan, waveOrgan,++	-- * Accordeon+	accordeon, accordeonBright1, accordeonBright2, brokenAccordeon,+	accordeon', Accordeon(..),++	-- * Choir+	choirA, choirO, choirU, choirE,+	Choir(..), choirA', choirO', choirU', choirE',++	windSings, noisyChoir, longNoisyChoir, noisyChoir', longNoisyChoir', NoisyChoir(..),++	-- * Pad+	pwPad, triPad, nightPad, overtonePad, caveOvertonePad,+	chorusel, pwEnsemble, fmDroneSlow, fmDroneMedium, fmDroneFast, vibrophonePad,+	RazorPad(..), razorPadSlow, razorPadFast, razorPadTremolo, razorPad, razorPad',+	dreamPad, underwaterPad, lightIsTooBrightPad, whaleSongPad,+	dreamPad', underwaterPad', lightIsTooBrightPad', whaleSongPad',++	-- * Lead+	polySynth, +	phasingLead, RazorLead(..), razorLeadSlow, razorLeadFast, razorLeadTremolo,+	razorLead, razorLead',+	overtoneLead,++	-- * Bass+	simpleBass, pwBass, deepBass, withDeepBass,++	-- * Plucked+	guitar, harpsichord,++	-- * Strike++	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,++	-- * 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,++	-- * X-rays+	pulseWidth, xanadu, alienIsAngry, noiz, blue, black, simpleMarimba, 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 Control.Monad++import Csound.Base ++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(..))++import Data.Char++fx1 :: Sig -> (a -> a) -> [FxSpec a]+fx1 dw f = [FxSpec dw (return . f)]++fx1' :: Sig -> (a -> SE a) -> [FxSpec a]+fx1' dw f = [FxSpec dw f]++-- | Creates a simple FX-xhain, that contains a single pure effect.+-- The first argument is the dry/wet-value.+singleFx :: Sig -> (a -> a) -> [FxSpec a]+singleFx = fx1++-- | Creates a simple FX-xhain, that contains a single effect.+-- The first argument is the dry/wet-value.+singleFx' :: Sig -> (a -> SE a) -> [FxSpec a]+singleFx' = fx1'++-- | Limits the release section of the note.+limRel :: SigSpace a => D -> Patch a -> Patch a+limRel rel p = p { patchInstr = fmap (mul (fadeOut rel)) . patchInstr p }++----------------------------------------------+-- electric pianos++data Epiano1 = Epiano1 +	{ epiano1Rel :: D }++instance Default Epiano1 where+	def = Epiano1 5	++epiano1 = epiano1' def++epiano1' (Epiano1 rel) = Patch +	{ patchInstr = \a -> mul 0.4 $ C.simpleFading rel a+	, patchFx    = fx1 0.25 largeHall2 }++data MutedPiano = MutedPiano +	{ mutedPianoMute :: Sig+	, mutedPianoRel  :: D }++instance Default MutedPiano where+	def = MutedPiano 0.5 7++mutedPiano = mutedPiano' def++mutedPiano' (MutedPiano mute rel) = Patch +	{ patchInstr = \a -> mul 0.7 $ C.simpleSust rel a+	, patchFx    = fx1 0.25 (largeHall2 . at (mlp3 (250 + 7000 * mute) 0.2)) }++amPiano = Patch+	{ patchInstr = mul 1.4 . onCps C.amPiano+	, patchFx    = fx1 0.25 id }++fmPiano = Patch+	{ patchInstr = at fromMono . mul 0.75 . onCps (C.fmFlavio 6 3)+	, patchFx    = fx1 0.15 smallHall2 }++epiano2 = Patch +	{ patchInstr = mul 1.125 . at fromMono . (onCps $ C.epiano [C.EpianoOsc 4 5 1 1, C.EpianoOsc 8 10 2.01 1])+	, patchFx    = fx1 0.25 smallHall2 }++epianoHeavy = Patch +	{ patchInstr = mul 1.125 . at fromMono . (onCps $ C.epiano [C.EpianoOsc 4 5 1 1, C.EpianoOsc 8 10 2.01 1, C.EpianoOsc 8 15 0.5 0.5])+	, patchFx    = fx1 0.2 smallHall2 }++epianoBright = Patch +	{ patchInstr = mul 1.12 . at fromMono . (onCps $ C.epiano [C.EpianoOsc 4 5 1 1, C.EpianoOsc 8 10 3.01 1, C.EpianoOsc 8 15 5 0.5, C.EpianoOsc 8 4 7 0.3])+	, patchFx    = fx1 0.2 smallHall2 }++vibraphonePiano1 = smallVibraphone1 { patchInstr = mul (1.5 * fadeOut 0.25) . at (mlp 6500 0.1). patchInstr smallVibraphone1 }+vibraphonePiano2 = smallVibraphone2 { patchInstr = mul (1.5 * fadeOut 0.25) . at (mlp 6500 0.1). patchInstr smallVibraphone2 }++----------------------------------------------+-- organs++cathedralOrgan = Patch+	{ patchInstr = at fromMono . mul 0.7 . onCps C.cathedralOrgan+	, patchFx    = fx1 0.27 largeHall2 }++-- [0, 30]+data HammondOrgan = HammondOrgan +	{ hammondOrganDetune :: Sig }++instance Default HammondOrgan where+	def = HammondOrgan 12++hammondOrgan = hammondOrgan' def++hammondOrgan' (HammondOrgan detune) = Patch+	{ patchInstr = mul 0.4 . at fromMono . onCps (C.hammondOrgan detune)+	, patchFx    = fx1 0.15 smallRoom2 }++toneWheelOrgan = Patch+	{ patchInstr = at fromMono  . mul 0.6 . onCps C.toneWheel+	, patchFx    = fx1 0.3 smallHall2 }++sawOrgan  = mul 0.45 $ waveOrgan rndSaw+triOrgan  = mul 0.5  $ waveOrgan rndTri+sqrOrgan  = mul 0.45 $ waveOrgan rndSqr+pwOrgan k = mul 0.45 $ waveOrgan (rndPw k)++waveOrgan :: (Sig -> SE Sig) -> Patch2 +waveOrgan wave = Patch +	{ patchInstr = onCps $ at fromMono . mul (fades 0.01 0.01) . at (mlp 3500 0.1) . wave+	, patchFx    = fx1 0.25 smallHall2	+	}++----------------------------------------------+-- accordeons++accordeon = accordeon' def++accordeonBright1 = accordeon' (C.Accordeon 1 5 3 7)+accordeonBright2 = accordeon' (C.Accordeon 1 6 3 13)++accordeonHeavy = accordeon' (C.Accordeon 1 0.501 2 1.005)+brokenAccordeon = accordeon' (C.Accordeon 1 1.07 2.02 0.5)++accordeon' spec = Patch+	{ patchInstr = mul 0.63 . onCps (C.accordeon spec)+	, patchFx    = fx1' 0.25 C.accordeonFx }++----------------------------------------------+-- choir++data Choir = Choir { choirVibr :: Sig }++instance Default Choir where+	def  = Choir 7++tenor' filt (Choir vib) = Patch +	{ patchInstr = at fromMono . mul 0.15 . onCps (C.tenorOsc filt vib)+	, patchFx    = fx1 0.25 smallHall2 }++soprano' filt (Choir vib) = Patch +	{ patchInstr = at fromMono . mul 0.15 . onCps (C.sopranoOsc filt vib)+	, patchFx    = fx1 0.25 smallHall2 }++choir' filt vib = Patch+	{ patchInstr = \(amp, cps) -> do+			ref <- newRef (0 :: Sig2)+			when1 (sig cps <=* 220) $ writeRef ref =<< (patchInstr (tenor'   filt vib) (amp, cps))+			when1 (sig cps >*  220) $ writeRef ref =<< (patchInstr (soprano' filt vib) (amp, cps))+			readRef ref+	, patchFx   = fx1 0.25 smallHall2 	+	}++choirA = choirA' def+choirO = choirO' def+choirE = choirE' def+choirU = choirU' def++choirA' = choir' singA+choirO' = choir' singO+choirE' = choir' singE+choirU' = choir' singU++data NoisyChoir = NoisyChoir +	{ noisyChoirFilterNum :: Int+	, noisyChoirBw        :: Sig+	}++instance Default NoisyChoir where+	def = NoisyChoir 2 25++windSings = longNoisyChoir' (NoisyChoir 1 15)++longNoisyChoir = longNoisyChoir' def+noisyChoir = noisyChoir' def+++longNoisyChoir' (NoisyChoir n bw) = Patch+	{ patchInstr = at fromMono . mul 0.45 . onCps (C.noisyChoir n bw)+	, patchFx    = fx1 0.15 magicCave2 }++noisyChoir' ch = (longNoisyChoir' ch) { patchFx  = fx1 0.15 largeHall2 }++-- 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 = Patch+	{ patchInstr = mul 0.6 . at fromMono . onCps C.pwPad+	, patchFx    = fx1 0.25 smallHall2 }++triPad = Patch +	{ patchInstr = fmap fromMono . mul 0.7 . onCps C.triPad+	, patchFx  = fx1' 0.25 C.triPadFx }++nightPad = Patch+	{ patchInstr = mul 0.48 . at fromMono . onCps (mul (fadeOut 1) . C.nightPad 0.5)+	, patchFx    = fx1 0.25 largeHall2 }++overtonePad = Patch+	{ patchInstr = mul 0.65 . at fromMono . mixAt 0.25 (mlp 1500 0.1) . onCps (\cps -> mul (fades 0.25 1.2) (C.tibetan 11 0.012 cps) + mul (fades 0.25 1) (C.tibetan 13 0.015 (cps * 0.5)))+	, patchFx    = fx1 0.35 smallHall2 }++caveOvertonePad = overtonePad { patchFx = fx1 0.2 (magicCave2 . mul 0.8) }++chorusel = Patch+	{ patchInstr = mul 0.9 . at (mlp (3500 + 2000 * uosc 0.1) 0.1) . onCps (mul (fades 0.65 1) . C.chorusel 13 0.5 10)+	, patchFx    = fx1 0.35 smallHall2 }++pwEnsemble = Patch+	{ patchInstr = at fromMono . mul 0.55 . onCps C.pwEnsemble+	, patchFx    = fx1 0.25 smallHall2 }++fmDroneSlow = Patch+	{ patchInstr = at fromMono . mul 0.5 . onCps (C.fmDrone 3 (10, 5))+	, patchFx    = fx1 0.35 largeHall2 }++fmDroneMedium = Patch+	{ patchInstr = at fromMono . mul 0.5 . onCps (C.fmDrone 3 (5, 3))+	, patchFx    = fx1 0.25 smallHall2 }++fmDroneFast = Patch+	{ patchInstr = at fromMono . mul 0.5 . onCps (C.fmDrone 3 (0.5, 1))+	, patchFx    = fx1 0.25 smallHall2 } ++vibrophonePad = largeVibraphone1 { patchInstr = mul (1.5 * fades 0.5 0.25) . at (mlp 2500 0.1). patchInstr largeVibraphone1 }++data RazorPad = RazorPad { razorPadSpeed :: Sig }++instance Default RazorPad where+	def = RazorPad 0.5++razorPadSlow = razorPad' (def { razorPadSpeed = 0.1 })+razorPadFast = razorPad' (def { razorPadSpeed = 1.7 })+razorPadTremolo = razorPad' (def { razorPadSpeed = 6.7 })++razorPad = razorPad' def++razorPad' (RazorPad speed) = Patch+	{ patchInstr = at fromMono . mul 0.6 . onCps (uncurry $ C.razorPad speed)+	, patchFx    = fx1 0.35 largeHall2 }+++dreamPadFx = [FxSpec 0.35 (return . largeHall2), FxSpec 0.25 (at $ echo 0.25 0.65), FxSpec 0.25 (at $ chorus 0.07 1.25 1)]++dreamPad = dreamPad' 0.35+underwaterPad = underwaterPad' 0.35+lightIsTooBrightPad = lightIsTooBrightPad' 0.55+whaleSongPad = whaleSongPad' 0.35++-- | The first argument is brightness (0 to 1)+dreamPad' :: Sig -> Patch2+dreamPad' bright = Patch +    { patchInstr = fmap fromMono . onCps (C.dreamPad bright)    +    , patchFx    = dreamPadFx+    }++-- | The first argument is brightness (0 to 1)+underwaterPad' :: Sig -> Patch2+underwaterPad' bright = Patch +    { patchInstr = fmap fromMono . onCps (C.underwaterPad bright)    +    , patchFx    = dreamPadFx+    }++-- | The first argument is brightness (0 to 1)+lightIsTooBrightPad' :: Sig -> Patch2+lightIsTooBrightPad' bright = Patch +    { patchInstr = fmap fromMono . onCps (C.lightIsTooBrightPad bright)    +    , patchFx    = dreamPadFx+    }++-- | The first argument is brightness (0 to 1)+whaleSongPad' :: Sig -> Patch2+whaleSongPad' bright = Patch +    { patchInstr = fmap fromMono . onCps (C.whaleSongPad bright)    +    , patchFx    = dreamPadFx+    }++------------------------------------+-- leads++polySynth = Patch +	{ patchInstr = fmap fromMono . onCps C.polySynth 	+	, patchFx    = [FxSpec 0.25 (return . largeHall2), FxSpec 0.25 (at $ echo 0.25 0.65), FxSpec 0.25 (at $ chorus 0.07 1.25 1)]+	}++phasingLead = Patch+	{ patchInstr = at fromMono . mul (0.7 * fadeOut 0.05) . onCps (uncurry C.phasingSynth)+	, patchFx    = fx1 0.25 smallHall2 }++data RazorLead = RazorLead +	{ razorLeadBright :: Sig +	, razorLeadSpeed  :: Sig }++instance Default RazorLead where+	def = RazorLead 0.5 0.5++razorLeadSlow = razorLead' (def { razorLeadSpeed = 0.1 })+razorLeadFast = razorLead' (def { razorLeadSpeed = 1.7 })+razorLeadTremolo = razorLead' (def { razorLeadSpeed = 6.7 })++razorLead = razorLead' def++razorLead' (RazorLead bright speed) = Patch+	{ patchInstr = at fromMono . (\(amp, cps) -> mul (fadeOut (0.05 + amp * 0.3)) $ C.razorLead (bright * sig amp) (speed * sig amp) (sig amp) (sig cps))+	, patchFx    = fx1 0.35 smallHall2 }++overtoneLeadFx :: Sig2 -> SE Sig2+overtoneLeadFx x = fmap magicCave2 $ mixAt 0.2 (echo 0.25 0.45) (return x)++overtoneLead :: Patch2+overtoneLead = Patch+	{ patchInstr = mul 0.4 . at fromMono . onCps (mul (fades 0.01 1) . C.tibetan 13 0.012)+	, patchFx    = fx1' 0.15 overtoneLeadFx }++------------------------------------+-- bass++simpleBass = Patch +	{ patchInstr = at fromMono . mul 0.32 . onCps C.simpleBass+	, patchFx    = fx1 0.25 smallRoom2 }++pwBass = Patch +	{ patchInstr = at fromMono . mul 0.4 . onCps C.pwBass+	, patchFx    = fx1 0.25 smallHall2 }++deepBass = Patch+	{ patchInstr = at fromMono . mul 0.4 . onCps C.deepBass+	, patchFx    = fx1 0.25 smallHall2 }++-- | The first argument is the amount of deepBass to mix into the original patch.+withDeepBass :: Sig -> Patch2 -> Patch2+withDeepBass k = mixInstr k deepBass++------------------------------------+-- plucked++guitar = Patch+	{ patchInstr = onCps $ fromMono . mul (0.6 * fades 0.01 0.25) . C.plainString+	, patchFx    = fx1 0.25 smallHall2 }++harpsichord = Patch+	{ patchInstr = onCps $ fromMono . mul (0.65 * fades 0.01 0.13) . C.harpsichord+	, patchFx    = fx1 0.25 smallHall2 }++-- guita++------------------------------------+-- strike++strikeFx :: Strike -> Sig2 -> SE Sig2+strikeFx spec a = at (strikeReverb spec) $ (if (strikeHasDelay spec) then (mixAt 0.35 (echo 0.25 0.55)) else id) (return a :: SE Sig2)++strikeRelease :: (D, D) -> Strike -> D+strikeRelease (amp, cps) spec = (0.85 * strikeRel spec * amp) * amp + (strikeRel spec) - (cps / 10000)++-- dac $ mixAt 0.15 largeHall2 $ mixAt 0.2 (echo 0.25 0.45) $ at fromMono $ midi $ onMsg $ onCps (mul (fadeOut 2) . C.tibetanBowl152 )+data Strike = Strike +	{ strikeRel :: D+	, strikeHasDelay ::	Bool+	, strikeReverb :: Sig2 -> Sig2		+	}++instance Default Strike where+	def = Strike 1.5 True smallHall2++strike' :: Strike -> (Sig -> Sig) -> Patch Sig2+strike' spec instr = Patch +	{ patchInstr =  \x@(amp, cps) -> return $ fromMono $ mul (0.75 * sig amp * fadeOut (rel x)) $ instr (sig cps)+	, patchFx    = fx1' 0.25 (strikeFx spec) }+	where rel a = strikeRelease a spec+++data Size = Small | Medium | Large | Huge++nextSize x = case x of+	Small -> Medium+	Medium -> Large+	Large -> Huge+	Huge -> Huge++prevSize x = case x of+	Small -> Small+	Medium -> Small+	Large -> Medium+	Huge -> Large++toStrikeSpec :: Size -> Size -> Strike+toStrikeSpec revSpec restSpec = Strike +	{ strikeReverb  = toReverb revSpec+	, strikeRel = toRel restSpec+	, strikeHasDelay = toHasDelay restSpec } ++toReverb :: Size -> (Sig2  -> Sig2)+toReverb x = case x of+	Small -> smallRoom2+	Medium -> smallHall2+	Large -> largeHall2+	Huge -> magicCave2++toRel :: Size -> D+toRel x = case x of+	Small -> 0.4+	Medium -> 1.5+	Large -> 2.5+	Huge -> 4.5++toGain :: Size -> Sig+toGain x = case x of+	Small -> 0.85+	Medium -> 0.75+	Large -> 0.6+	Huge -> 0.45++toHasDelay :: Size -> Bool+toHasDelay x = case x of+	Small -> False+	_     -> True++dahinaSize    		= Small+banyanSize    		= Medium+xylophoneSize 		= Small+tibetanBowl152Size  	= Medium+tibetanBowl140Size  	= Small+tibetanBowl180Size  	= Medium+spinelSphereSize    	= Small+potLidSize          	= Medium+redCedarWoodPlateSize = Small+tubularBellSize     	= Large+redwoodPlateSize    	= Small+douglasFirWoodPlateSize = Small+uniformWoodenBarSize = Small+uniformAluminumBarSize = Small+vibraphone1Size = Medium+vibraphone2Size = Medium+chalandiPlatesSize = Medium+wineGlassSize  = Medium+smallHandbellSize = Medium+albertClockBellBelfastSize = Large+woodBlockSize = Small++smallStrike :: Size -> (Sig -> Sig) -> Patch2+smallStrike size = mediumStrike' (prevSize size) size++mediumStrike :: Size -> (Sig -> Sig) -> Patch2+mediumStrike size = mediumStrike' size size++largeStrike :: Size -> (Sig -> Sig) -> Patch2+largeStrike size = mediumStrike' (nextSize size) size++magicStrike :: Size -> (Sig -> Sig) -> Patch2+magicStrike size = mediumStrike' (nextSize $ nextSize size) size++mediumStrike' :: Size -> Size -> (Sig -> Sig) -> Patch2+mediumStrike' revSize size f = p { patchInstr = mul (toGain size) . patchInstr p }+	where p = strike' (toStrikeSpec revSize size) f+++smallDahina = smallStrike dahinaSize C.dahina+dahina = mediumStrike dahinaSize C.dahina+largeDahina = largeStrike dahinaSize C.dahina+magicDahina = magicStrike dahinaSize C.dahina++smallBanyan = smallStrike banyanSize C.banyan+banyan = mediumStrike banyanSize C.banyan+largeBanyan = largeStrike banyanSize C.banyan+magicBanyan = magicStrike banyanSize C.banyan++smallXylophone = smallStrike xylophoneSize C.xylophone+xylophone = mediumStrike xylophoneSize C.xylophone+largeXylophone = largeStrike xylophoneSize C.xylophone+magicXylophone = magicStrike xylophoneSize C.xylophone++smallTibetanBowl180 = smallStrike tibetanBowl180Size C.tibetanBowl180+tibetanBowl180 = mediumStrike tibetanBowl180Size C.tibetanBowl180+largeTibetanBowl180 = largeStrike tibetanBowl180Size C.tibetanBowl180+magicTibetanBowl180 = magicStrike tibetanBowl180Size C.tibetanBowl180++smallSpinelSphere = smallStrike spinelSphereSize C.spinelSphere+spinelSphere = mediumStrike spinelSphereSize C.spinelSphere+largeSpinelSphere = largeStrike spinelSphereSize C.spinelSphere+magicSpinelSphere = magicStrike spinelSphereSize C.spinelSphere++smallPotLid = smallStrike potLidSize C.potLid+potLid = mediumStrike potLidSize C.potLid+largePotLid = largeStrike potLidSize C.potLid+magicPotLid = magicStrike potLidSize C.potLid++smallRedCedarWoodPlate = smallStrike redCedarWoodPlateSize C.redCedarWoodPlate+redCedarWoodPlate = mediumStrike redCedarWoodPlateSize C.redCedarWoodPlate+largeRedCedarWoodPlate = largeStrike redCedarWoodPlateSize C.redCedarWoodPlate+magicRedCedarWoodPlate = magicStrike redCedarWoodPlateSize C.redCedarWoodPlate++smallTubularBell = smallStrike tubularBellSize C.tubularBell+tubularBell = mediumStrike tubularBellSize C.tubularBell+largeTubularBell = largeStrike tubularBellSize C.tubularBell+magicTubularBell = magicStrike tubularBellSize C.tubularBell++smallRedwoodPlate = smallStrike redwoodPlateSize C.redwoodPlate+redwoodPlate = mediumStrike redwoodPlateSize C.redwoodPlate+largeRedwoodPlate = largeStrike redwoodPlateSize C.redwoodPlate+magicRedwoodPlate = magicStrike redwoodPlateSize C.redwoodPlate++smallDouglasFirWoodPlate = smallStrike douglasFirWoodPlateSize C.douglasFirWoodPlate+douglasFirWoodPlate = mediumStrike douglasFirWoodPlateSize C.douglasFirWoodPlate+largeDouglasFirWoodPlate = largeStrike douglasFirWoodPlateSize C.douglasFirWoodPlate+magicDouglasFirWoodPlate = magicStrike douglasFirWoodPlateSize C.douglasFirWoodPlate++smallUniformWoodenBar = smallStrike uniformWoodenBarSize C.uniformWoodenBar+uniformWoodenBar = mediumStrike uniformWoodenBarSize C.uniformWoodenBar+largeUniformWoodenBar = largeStrike uniformWoodenBarSize C.uniformWoodenBar+magicUniformWoodenBar = magicStrike uniformWoodenBarSize C.uniformWoodenBar++smallUniformAluminumBar = smallStrike uniformAluminumBarSize C.uniformAluminumBar+uniformAluminumBar = mediumStrike uniformAluminumBarSize C.uniformAluminumBar+largeUniformAluminumBar = largeStrike uniformAluminumBarSize C.uniformAluminumBar+magicUniformAluminumBar = magicStrike uniformAluminumBarSize C.uniformAluminumBar++smallVibraphone1 = smallStrike vibraphone1Size C.vibraphone1+vibraphone1 = mediumStrike vibraphone1Size C.vibraphone1+largeVibraphone1 = largeStrike vibraphone1Size C.vibraphone1+magicVibraphone1 = magicStrike vibraphone1Size C.vibraphone1++smallVibraphone2 = smallStrike vibraphone2Size C.vibraphone2+vibraphone2 = mediumStrike vibraphone2Size C.vibraphone2+largeVibraphone2 = largeStrike vibraphone2Size C.vibraphone2+magicVibraphone2 = magicStrike vibraphone2Size C.vibraphone2++smallChalandiPlates = smallStrike chalandiPlatesSize C.chalandiPlates+chalandiPlates = mediumStrike chalandiPlatesSize C.chalandiPlates+largeChalandiPlates = largeStrike chalandiPlatesSize C.chalandiPlates+magicChalandiPlates = magicStrike chalandiPlatesSize C.chalandiPlates++smallTibetanBowl152 = smallStrike tibetanBowl152Size C.tibetanBowl152+tibetanBowl152 = mediumStrike tibetanBowl152Size C.tibetanBowl152+largeTibetanBowl152 = largeStrike tibetanBowl152Size C.tibetanBowl152+magicTibetanBowl152 = magicStrike tibetanBowl152Size C.tibetanBowl152++smallTibetanBowl140 = smallStrike tibetanBowl140Size C.tibetanBowl140+tibetanBowl140 = mediumStrike tibetanBowl140Size C.tibetanBowl140+largeTibetanBowl140 = largeStrike tibetanBowl140Size C.tibetanBowl140+magicTibetanBowl140 = magicStrike tibetanBowl140Size C.tibetanBowl140++smallWineGlass = smallStrike wineGlassSize C.wineGlass+wineGlass = mediumStrike wineGlassSize C.wineGlass+largeWineGlass = largeStrike wineGlassSize C.wineGlass+magicWineGlass = magicStrike wineGlassSize C.wineGlass++smallHandbell = smallStrike smallHandbellSize C.smallHandbell+handbell = mediumStrike smallHandbellSize C.smallHandbell+largeHandbell = largeStrike smallHandbellSize C.smallHandbell+magicHandbell = magicStrike smallHandbellSize C.smallHandbell++smallAlbertClockBellBelfast = smallStrike albertClockBellBelfastSize C.albertClockBellBelfast+albertClockBellBelfast = mediumStrike albertClockBellBelfastSize C.albertClockBellBelfast+largeAlbertClockBellBelfast = largeStrike albertClockBellBelfastSize C.albertClockBellBelfast+magicAlbertClockBellBelfast = magicStrike albertClockBellBelfastSize C.albertClockBellBelfast++smallWoodBlock = smallStrike woodBlockSize C.woodBlock+woodBlock = mediumStrike woodBlockSize C.woodBlock+largeWoodBlock = largeStrike woodBlockSize C.woodBlock+magicWoodBlock = magicStrike woodBlockSize C.woodBlock++---------------------------------------------------------------+-- scrape++-- scrapePatch ++names = ["dahina","banyan","xylophone","tibetanBowl180","spinelSphere","potLid","redCedarWoodPlate","tubularBell","redwoodPlate","douglasFirWoodPlate","uniformWoodenBar","uniformAluminumBar","vibraphone1","vibraphone2","chalandiPlates","tibetanBowl152","tibetanBowl140","wineGlass","smallHandbell","albertClockBellBelfast","woodBlock"]+toUpperName (x:xs) = toUpper x : xs++-- scrapePatch ++scrapeRelease :: (D, D) -> D -> D+scrapeRelease (amp, cps) rel = (0.85 * rel * amp) * amp + rel - (cps / 10000)++scrapeFast k m = Patch +	{ patchInstr = \x@(amp, cps) -> (mul (0.75 * sig amp * k * fades 0.02 (scrapeRelease x 0.25)) . at fromMono . C.scrapeModes m) (sig cps)+	, patchFx    = fx1 0.15 largeHall2 }++scrape k m = Patch +	{ patchInstr = \x@(amp, cps) -> (mul (0.75 * sig amp * k * fades 0.5 (scrapeRelease x 0.97)) . at fromMono . C.scrapeModes m) (sig cps)+	, patchFx    = fx1 0.15 largeHall2 }++scrapePad k m = Patch +	{ patchInstr = \x@(amp, cps) -> (mul (0.75 * sig amp * k * fades 0.5 (scrapeRelease x 2.27	)) . at fromMono . C.scrapeModes m) (sig cps)+	, patchFx    = fx1 0.15 largeHall2 }	++scaleScrapeDahina = 1.32+scaleScrapeBanyan = 0.95+scaleScrapeXylophone = 1+scaleScrapeTibetanBowl180 = 0.55+scaleScrapeSpinelSphere = 1.4+scaleScrapePotLid = 0.65+scaleScrapeRedCedarWoodPlate = 1+scaleScrapeTubularBell = 0.75+scaleScrapeRedwoodPlate = 1+scaleScrapeDouglasFirWoodPlate = 1+scaleScrapeUniformWoodenBar = 1+scaleScrapeUniformAluminumBar = 0.75+scaleScrapeVibraphone1 = 0.9+scaleScrapeVibraphone2 = 0.9+scaleScrapeChalandiPlates = 1+scaleScrapeTibetanBowl152 = 0.65+scaleScrapeTibetanBowl140 = 0.75+scaleScrapeWineGlass = 0.6+scaleScrapeSmallHandbell = 1+scaleScrapeAlbertClockBellBelfast = 0.5+scaleScrapeWoodBlock = 1.32++scrapeDahina = scrape scaleScrapeDahina C.dahinaModes+scrapeBanyan = scrape scaleScrapeBanyan C.banyanModes+scrapeXylophone = scrape scaleScrapeXylophone C.xylophoneModes+scrapeTibetanBowl180 = scrape scaleScrapeTibetanBowl180 C.tibetanBowlModes180+scrapeSpinelSphere = scrape scaleScrapeSpinelSphere C.spinelSphereModes+scrapePotLid = scrape scaleScrapePotLid C.potLidModes+scrapeRedCedarWoodPlate = scrape scaleScrapeRedCedarWoodPlate C.redCedarWoodPlateModes+scrapeTubularBell = scrape scaleScrapeTubularBell C.tubularBellModes+scrapeRedwoodPlate = scrape scaleScrapeRedwoodPlate C.redwoodPlateModes+scrapeDouglasFirWoodPlate = scrape scaleScrapeDouglasFirWoodPlate C.douglasFirWoodPlateModes+scrapeUniformWoodenBar = scrape scaleScrapeUniformWoodenBar C.uniformWoodenBarModes+scrapeUniformAluminumBar = scrape scaleScrapeUniformAluminumBar C.uniformAluminumBarModes+scrapeVibraphone1 = scrape scaleScrapeVibraphone1 C.vibraphoneModes1+scrapeVibraphone2 = scrape scaleScrapeVibraphone2 C.vibraphoneModes2+scrapeChalandiPlates = scrape scaleScrapeChalandiPlates C.chalandiPlatesModes+scrapeTibetanBowl152 = scrape scaleScrapeTibetanBowl152 C.tibetanBowlModes152+scrapeTibetanBowl140 = scrape scaleScrapeTibetanBowl140 C.tibetanBowlModes140+scrapeWineGlass = scrape scaleScrapeWineGlass C.wineGlassModes+scrapeSmallHandbell = scrape scaleScrapeSmallHandbell C.smallHandbellModes+scrapeAlbertClockBellBelfast = scrape scaleScrapeAlbertClockBellBelfast C.albertClockBellBelfastModes+scrapeWoodBlock = scrape scaleScrapeWoodBlock C.woodBlockModes++scrapeFastDahina = scrapeFast scaleScrapeDahina C.dahinaModes+scrapeFastBanyan = scrapeFast scaleScrapeBanyan C.banyanModes+scrapeFastXylophone = scrapeFast scaleScrapeXylophone C.xylophoneModes+scrapeFastTibetanBowl180 = scrapeFast scaleScrapeTibetanBowl180 C.tibetanBowlModes180+scrapeFastSpinelSphere = scrapeFast scaleScrapeSpinelSphere C.spinelSphereModes+scrapeFastPotLid = scrapeFast scaleScrapePotLid C.potLidModes+scrapeFastRedCedarWoodPlate = scrapeFast scaleScrapeRedCedarWoodPlate C.redCedarWoodPlateModes+scrapeFastTubularBell = scrapeFast scaleScrapeTubularBell C.tubularBellModes+scrapeFastRedwoodPlate = scrapeFast scaleScrapeRedwoodPlate C.redwoodPlateModes+scrapeFastDouglasFirWoodPlate = scrapeFast scaleScrapeDouglasFirWoodPlate C.douglasFirWoodPlateModes+scrapeFastUniformWoodenBar = scrapeFast scaleScrapeUniformWoodenBar C.uniformWoodenBarModes+scrapeFastUniformAluminumBar = scrapeFast scaleScrapeUniformAluminumBar C.uniformAluminumBarModes+scrapeFastVibraphone1 = scrapeFast scaleScrapeVibraphone1 C.vibraphoneModes1+scrapeFastVibraphone2 = scrapeFast scaleScrapeVibraphone2 C.vibraphoneModes2+scrapeFastChalandiPlates = scrapeFast scaleScrapeChalandiPlates C.chalandiPlatesModes+scrapeFastTibetanBowl152 = scrapeFast scaleScrapeTibetanBowl152 C.tibetanBowlModes152+scrapeFastTibetanBowl140 = scrapeFast scaleScrapeTibetanBowl140 C.tibetanBowlModes140+scrapeFastWineGlass = scrapeFast scaleScrapeWineGlass C.wineGlassModes+scrapeFastSmallHandbell = scrapeFast scaleScrapeSmallHandbell C.smallHandbellModes+scrapeFastAlbertClockBellBelfast = scrapeFast scaleScrapeAlbertClockBellBelfast C.albertClockBellBelfastModes+scrapeFastWoodBlock = scrapeFast scaleScrapeWoodBlock C.woodBlockModes++scrapePadDahina = scrapePad scaleScrapeDahina C.dahinaModes+scrapePadBanyan = scrapePad scaleScrapeBanyan C.banyanModes+scrapePadXylophone = scrapePad scaleScrapeXylophone C.xylophoneModes+scrapePadTibetanBowl180 = scrapePad scaleScrapeTibetanBowl180 C.tibetanBowlModes180+scrapePadSpinelSphere = scrapePad scaleScrapeSpinelSphere C.spinelSphereModes+scrapePadPotLid = scrapePad scaleScrapePotLid C.potLidModes+scrapePadRedCedarWoodPlate = scrapePad scaleScrapeRedCedarWoodPlate C.redCedarWoodPlateModes+scrapePadTubularBell = scrapePad scaleScrapeTubularBell C.tubularBellModes+scrapePadRedwoodPlate = scrapePad scaleScrapeRedwoodPlate C.redwoodPlateModes+scrapePadDouglasFirWoodPlate = scrapePad scaleScrapeDouglasFirWoodPlate C.douglasFirWoodPlateModes+scrapePadUniformWoodenBar = scrapePad scaleScrapeUniformWoodenBar C.uniformWoodenBarModes+scrapePadUniformAluminumBar = scrapePad scaleScrapeUniformAluminumBar C.uniformAluminumBarModes+scrapePadVibraphone1 = scrapePad scaleScrapeVibraphone1 C.vibraphoneModes1+scrapePadVibraphone2 = scrapePad scaleScrapeVibraphone2 C.vibraphoneModes2+scrapePadChalandiPlates = scrapePad scaleScrapeChalandiPlates C.chalandiPlatesModes+scrapePadTibetanBowl152 = scrapePad scaleScrapeTibetanBowl152 C.tibetanBowlModes152+scrapePadTibetanBowl140 = scrapePad scaleScrapeTibetanBowl140 C.tibetanBowlModes140+scrapePadWineGlass = scrapePad scaleScrapeWineGlass C.wineGlassModes+scrapePadSmallHandbell = scrapePad scaleScrapeSmallHandbell C.smallHandbellModes+scrapePadAlbertClockBellBelfast = scrapePad scaleScrapeAlbertClockBellBelfast C.albertClockBellBelfastModes+scrapePadWoodBlock = scrapePad scaleScrapeWoodBlock C.woodBlockModes++------------------------------------+-- woodwind++data Wind = Wind +	{ windAtt :: D+	, windDec :: D+	, windSus :: D	+	, windVib :: D	+	, windBright :: D }++woodWind' spec instr = Patch +	{ patchInstr = \(amp, cps) -> mul 1.3 $ do +		seed <- rnd 1+		vibDisp <- rnd (0.1 * amp)+		let dispVib vib = vib * (0.9 + vibDisp)		+		return $ fromMono $ mul (0.8 * sig amp * fadeOut (windDec spec)) $ instr seed (dispVib $ windVib spec) (windAtt spec) (windSus spec) (windDec spec) (0.4 + 0.75 * windBright spec * amp) cps+	, patchFx    = fx1 0.25 smallHall2 }++-- flute++fluteSpec bright vib = Wind +	{ windAtt = 0.08+	, windDec = 0.1+	, windSus = 20+	, windVib = vib+	, windBright = bright }++shortFluteSpec bright vib = Wind +	{ windAtt = 0.03+	, windDec = 0.05+	, windSus = 20+	, windVib = vib+	, windBright = bright }++flute = woodWind' (fluteSpec br vib) C.flute+	where +		br = 0.7+		vib = 0.015++shortFlute = woodWind' (shortFluteSpec br vib) C.flute+	where +		br = 0.7+		vib = 0.015++fluteVibrato = woodWind' (fluteSpec br vib) C.flute+	where +		br = 0.7+		vib = 0.04++mutedFlute = woodWind' (fluteSpec br vib) C.flute+	where +		br = 0.25+		vib = 0.015++brightFlute = woodWind' (fluteSpec br vib) C.flute+	where +		br = 1.2+		vib = 0.015++-- bass clarinet++bassClarinetSpec bright vib = Wind +	{ windAtt = 0.06+	, windDec = 0.15+	, windSus = 20+	, windVib = vib+	, windBright = bright }++shortBassClarinetSpec bright vib = Wind +	{ windAtt = 0.03+	, windDec = 0.04+	, windSus = 20+	, windVib = vib+	, windBright = bright }++bassClarinet = woodWind' (bassClarinetSpec br vib) C.bassClarinet+	where +		br = 0.7+		vib = 0.01++shortBassClarinet = woodWind' (shortBassClarinetSpec br vib) C.bassClarinet+	where +		br = 0.7+		vib = 0.01++bassClarinetVibrato = woodWind' (bassClarinetSpec br vib) C.bassClarinet+	where +		br = 0.7+		vib = 0.035++mutedBassClarinet = woodWind' (bassClarinetSpec br vib) C.bassClarinet+	where +		br = 0.25+		vib = 0.01++brightBassClarinet = woodWind' (bassClarinetSpec br vib) C.bassClarinet+	where +		br = 1.2+		vib = 0.01++-- french horn++frenchHornSpec bright vib = Wind +	{ windAtt = 0.08+	, windDec = 0.25+	, windSus = 20+	, windVib = vib+	, windBright = bright }++shortFrenchHornSpec bright vib = Wind +	{ windAtt = 0.03+	, windDec = 0.04+	, windSus = 20+	, windVib = vib+	, windBright = bright }++frenchHorn = woodWind' (frenchHornSpec br vib) C.frenchHorn+	where +		br = 0.7+		vib = 0.01++shortFrenchHorn = woodWind' (shortFrenchHornSpec br vib) C.frenchHorn+	where +		br = 0.7+		vib = 0.01++frenchHornVibrato = woodWind' (frenchHornSpec br vib) C.frenchHorn+	where +		br = 0.7+		vib = 0.035++mutedFrenchHorn = woodWind' (frenchHornSpec br vib) C.frenchHorn+	where +		br = 0.25+		vib = 0.01++brightFrenchHorn = woodWind' (frenchHornSpec br vib) C.frenchHorn+	where +		br = 1.2+		vib = 0.01++-- sheng++shengSpec bright vib = Wind +	{ windAtt = 0.1+	, windDec = 0.2+	, windSus = 20+	, windVib = vib+	, windBright = bright }++shortShengSpec bright vib = Wind +	{ windAtt = 0.03+	, windDec = 0.04+	, windSus = 20+	, windVib = vib+	, windBright = bright }++sheng = woodWind' (shengSpec br vib) C.sheng+	where +		br = 0.7+		vib = 0.01++shortSheng = woodWind' (shortShengSpec br vib) C.sheng+	where +		br = 0.7+		vib = 0.01++shengVibrato = woodWind' (shengSpec br vib) C.sheng+	where +		br = 0.7+		vib = 0.025++mutedSheng = woodWind' (shengSpec br vib) C.sheng+	where +		br = 0.25+		vib = 0.01++brightSheng = woodWind' (shortShengSpec br vib) C.sheng+	where +		br = 1.2+		vib = 0.01++-- hulusi++hulusiSpec bright vib = Wind +	{ windAtt = 0.12+	, windDec = 0.14+	, windSus = 20+	, windVib = vib+	, windBright = bright }++shortHulusiSpec bright vib = Wind +	{ windAtt = 0.03+	, windDec = 0.04+	, windSus = 20+	, windVib = vib+	, windBright = bright }++hulusi = woodWind' (hulusiSpec br vib) C.hulusi+	where +		br = 0.7+		vib = 0.015++shortHulusi = woodWind' (shortHulusiSpec br vib) C.hulusi+	where +		br = 0.7+		vib = 0.015++hulusiVibrato = woodWind' (hulusiSpec br vib) C.hulusi+	where +		br = 0.7+		vib = 0.035++mutedHulusi = woodWind' (hulusiSpec br vib) C.hulusi+	where +		br = 0.25+		vib = 0.015++brightHulusi = woodWind' (shortHulusiSpec br vib) C.hulusi+	where +		br = 1.2+		vib = 0.015+++-- dizi++diziSpec bright vib = Wind +	{ windAtt = 0.03+	, windDec = 0.2+	, windSus = 20+	, windVib = vib+	, windBright = bright }++shortDiziSpec bright vib = Wind +	{ windAtt = 0.1+	, windDec = 0.04+	, windSus = 20+	, windVib = vib+	, windBright = bright }++dizi = woodWind' (diziSpec br vib) C.dizi+	where +		br = 0.7+		vib = 0.01++shortDizi = woodWind' (shortDiziSpec br vib) C.dizi+	where +		br = 0.7+		vib = 0.01++diziVibrato = woodWind' (diziSpec br vib) C.dizi+	where +		br = 0.7+		vib = 0.035++mutedDizi = woodWind' (diziSpec br vib) C.dizi+	where +		br = 0.25+		vib = 0.01++brightDizi = woodWind' (shortDiziSpec br vib) C.dizi+	where +		br = 1.2+		vib = 0.01++------------------------------------+-- x-rays++pulseWidth = Patch+	{ patchInstr = mul (0.75 * 0.6) . at fromMono . mul (fades 0.07 0.1). onCps (uncurry C.pulseWidth)+	, patchFx    = fx1 0.15 smallHall2 }	++xanadu = Patch+	{ patchInstr = mul (1.2 * 0.6) . at fromMono . mul (fades 0.01 2.2). onCps C.xanadu1+	, patchFx    = fx1 0.27 largeHall2 }++alienIsAngry =  Patch+	{ patchInstr = at fromMono . mul (0.5 * fades 0.01 2.3). onCps (C.fmMod 5)+	, patchFx    = fx1 0.15 smallRoom2 }++noiz =  Patch+	{ patchInstr = at fromMono . mul (1.5 * fades 0.01 0.5). onCps C.noiz+	, patchFx    = fx1 0.15 smallHall2 }++blue = Patch+	{ patchInstr = at fromMono . mul (1.5 * fades 0.01 0.5). onCps (C.blue 5 7 0.24 12)+	, patchFx    = fx1 0.25 smallHall2 }	++black = Patch+	{ patchInstr = at fromMono . mul (2 * fades 0.01 0.5). onCps (\cps -> C.black 3 (cps / 2) (cps * 2) 12 (sig cps))+	, patchFx    = fx1 0.25 smallHall2 }++simpleMarimba = Patch+	{ patchInstr = at fromMono . mul (0.8 * fades 0.01 0.5). onCps (C.simpleMarimba 5)+	, patchFx    = fx1 0.25 smallHall2 }+	+okComputer = Patch+	{ patchInstr = \(amp, cps) -> (at fromMono . mul (0.75 * sig amp * fades 0.01 0.01) . at (mlp (1500 + sig amp * 8500) 0.1) . (C.okComputer . (/ 25))) (sig cps)+	, patchFx    = fx1 0.25 id }++snowCrackle = Patch+	{ patchInstr = \(amp, cps) -> (return . fromMono . mul (0.8 * sig amp * fades 0.001 0.001) . (C.snowCrackle . (/ 25))) (sig cps)+	, patchFx    = fx1 0.25 id }++noiseBell = Patch +	{ patchInstr = at fromMono . mul 0.75 . onCps (C.noiseBell (31, 125) 2.3 0.2 . ( * 8))+	, patchFx    = fx1 0.25 smallHall2 }+	+------------------------------------+-- vowels++robotVowels vows latVow = Patch+	{ patchInstr = at fromMono . mul (1.1 * fades 0.1 0.1). onCps (C.vowels 25 vows latVow)+	, patchFx    = fx1 0.15 smallHall2 }++robotLoopVowels loopDur vows = Patch+	{ patchInstr = at fromMono . mul (1.1 * fades 0.1 0.1). onCps (C.loopVowels 25 loopDur vows)+	, patchFx    = fx1 0.15 smallHall2 }++robotVowel vow = Patch+	{ patchInstr = at fromMono . mul (1.1 * fades 0.1 0.1). onCps (C.oneVowel 25 vow)+	, patchFx    = fx1 0.15 smallHall2 }++------------------------------------+-- nature / effects++windWall = Patch+	{ patchInstr = at fromMono . mul (1.25 * fades 0.1 5). onCps C.windWall+	, patchFx    = fx1 0.25 largeHall2 }++mildWind = Patch+	{ patchInstr = at fromMono . mul (1.25 * fades 0.1 1.5). onCps C.mildWind+	, patchFx    = fx1 0.25 largeHall2 }++wind = Patch+	{ patchInstr = at fromMono . mul (0.8 * fades 0.1 1.5). onCps (\cps -> C.thorWind (cps * 2) 150 (0.3, 1))+	, patchFx    = fx1 0.25 largeHall2 }++------------------------------------+-- drums+