module Csound.Catalog.Wave.Bitwig( pwPad, triPad, triPadFx, triPadBy, pwPadBy, 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 = triPadBy mlp triPadBy :: ResonFilter -> Sig -> SE Sig triPadBy filter x = mul (1.5 * fades 0.3 0.5) $ at (filter (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 = pwPadBy mlp pwPadBy :: ResonFilter -> Sig -> SE Sig pwPadBy filter x = mul (fades 0.3 0.95) $ at (filter (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)