form caption("JitterSynth") size(580, 380), colour("black"), pluginID("def1")
keyboard bounds(8, 232, 560, 95), value(32)
#define SLIDERS trackercolour("white"), colour("orange")
groupbox bounds(8, 8, 280, 100), text("Jitter Controls Osc 1")
rslider bounds(16, 32, 70, 64), channel("jitterAmpSlider1"), range(0.001, .05, .0001, 1, .00001), text("Jit. Amp")
rslider bounds(80, 32, 70, 64), channel("preMirrorAmpSlider1"), range(1.000, 13.5000, 1.0000, 1, 0.0001), text("Pre-mirror Amp")
rslider bounds(144, 32, 70, 64), channel("jitterMinSlider1"), range(0.001, 10, .0001, 1, .00001), text("Jit Freq. Min")
rslider bounds(208, 32, 70, 64), channel("jitterMaxSlider1"), range(0.001, 50, 19, 1, .00001), text("Jit Freq. Max")
groupbox bounds(296, 8, 272, 100), text("Amplitude Envelope")
rslider bounds(304, 32, 70, 64), channel("attackSlider"), range(0.001, 1, 0), text("Att."), $SLIDERS
rslider bounds(360, 32, 70, 64), channel("decaySlider"), range(0.001, 1, 0), text("Dec."), $SLIDERS
rslider bounds(424, 32, 70, 64), channel("sustainSlider"), range(0.001, 1, 1), text("Sus."), $SLIDERS
rslider bounds(488, 32, 70, 64), channel("releaseSlider"), range(0.001, 1, 0.01), text("Rel."), $SLIDERS
groupbox bounds(8, 120, 408, 100), text("Jitter Controls Osc 2")
rslider bounds(16, 144, 70, 64), channel("jitterAmpSlider2"), range(0.001, .05, .0001, 1, .00001), text("Jit. Amp")
rslider bounds(80, 144, 70, 64), channel("preMirrorAmpSlider2"), range(1.000, 13.5000, 1.0000, 1, 0.0001), text("Pre-mirror Amp")
rslider bounds(144, 144, 70, 64), channel("jitterMinSlider2"), range(0.001, 10, .0001, 1, .00001), text("Jit Freq. Min")
rslider bounds(208, 144, 70, 64), channel("jitterMaxSlider2"), range(0.001, 50, 19, 1, .00001), text("Jit Freq. Max")
rslider bounds(272, 144, 74, 64), channel("osc2GainSlider"), range(0, 1, 0), text("Osc. 2 Gain")
rslider bounds(336, 144, 74, 64), channel("osc2DetuneSlider"), range(.9000, 1.1, .99, 1, .0001), text("Osc. 2 Detune")
combobox bounds(120, 336, 116, 24), populate("*.snaps"), colour(20, 20, 20)
filebutton bounds(8, 336, 111, 25), text("Save Preset"), populate("*.snaps"), colour(20, 20, 20)
groupbox bounds(424, 120, 146, 100), text("Reverb")
rslider bounds(424, 144, 74, 64), channel("reverbSlider"), range(0, .999, 0, 1, .0001), text("Reverb Size"), colour(240, 20, 20)
rslider bounds(496, 144, 74, 64), channel("reverbFreqSlider"), range(0, 22050, 10000, .5, 1), text("Reverb FCO"), colour(240, 20, 20)
combobox bounds(240, 336, 100, 24), channel("waveshapeCombo"), items("Triangle", "Square", "Sine", "Saw")
-n -d -+rtmidi=NULL -M0 -m0d --midi-key-cps=5 --midi-velocity-amp=4
sr = 44100
ksmps = 32
nchnls = 2
0dbfs = 1
;JitterSynth, based on an instrument posted by Peter Burgess to the Csound mailing list.
;Modified and adapted for Cabbage by Rory Walsh.
gifTriMet1 ftgen 2, 0, 65, 2, 0
gifTriMet2 ftgen 2, 0, 65, 2, 0
giTriangleOrig ftgen 100, 0, 64, 7, 0, 16, 1, 16, 0, 16, -16, 16, 0
giSquareOrig ftgen 101, 0, 64, 7, 0, 0, 1, 32, 1, 0, -1, 32, -1
giSineOrig ftgen 102, 0, 64, 10, 1
giSawOrig ftgen 103, 0, 64, 7, 0, 32, 1, 0, -1, 32, 0
giOriginalTable init 100
opcode RecurviseJitterTable,0,kkkiio
kTriJittAmp, kTriJittMin, kTriJittMax, iTableSize, iTableNumber, icnt xin
iCntn = icnt+1
if iCntn < iTableSize then
kJitValue jitter kTriJittAmp, kTriJittMin, kTriJittMax
kTableValue tab iCntn, giOriginalTable
tabw kJitValue+kTableValue, iCntn, iTableNumber
RecurviseJitterTable kTriJittAmp, kTriJittMin, kTriJittMax, iTableSize, iTableNumber, iCntn
endif
endop
;===============================================================
;trigger with the keyboard
instr 1
iAmp = p4
iCps = p5
if chnget:i("waveshapeCombo")==1 then
giOriginalTable = 100
elseif chnget:i("waveshapeCombo")==2 then
giOriginalTable = 101
elseif chnget:i("waveshapeCombo")==3 then
giOriginalTable = 102
elseif chnget:i("waveshapeCombo")==4 then
giOriginalTable = 103
endif
;oscillator 1, reads from table 1, gifTriMet1
kTriJittAmp1 chnget "jitterAmpSlider1"
kTriPreMirrAmp1 chnget "preMirrorAmpSlider1"
kTriJittMin1 chnget "jitterMminSlide1r"
kTriJittMax1 chnget "jitterMaxSlider1"
RecurviseJitterTable kTriJittAmp1, kTriJittMin1, kTriJittMax1, ftlen(gifTriMet1), gifTriMet1
aOsc1 oscili kTriPreMirrAmp1, iCps, gifTriMet1
aMirror1 mirror aOsc1, -1, 1
;oscillator 2, reads from table 2, gifTriMet2
kTriJittAmp2 chnget "jitterAmpSlider2"
kTriPreMirrAmp2 chnget "preMirrorAmpSlider2"
kTriJittMin2 chnget "jitterMminSlide2r"
kTriJittMax2 chnget "jitterMaxSlider2"
RecurviseJitterTable kTriJittAmp2, kTriJittMin2, kTriJittMax2, ftlen(gifTriMet1), gifTriMet2
aOsc2 oscili kTriPreMirrAmp2, iCps*chnget:k("osc2DetuneSlider"), gifTriMet2
aMirror2 mirror aOsc2, -1, 1
aEnv madsr chnget:i("attackSlider"), chnget:i("decaySlider"), chnget:i("sustainSlider"), chnget:i("releaseSlider")
aMix = ((aMirror1 * iAmp)+((aMirror2 * iAmp)*chnget:k("osc2GainSlider")))/2
chnset aMix*aEnv, "audioSend1"
endin
;===============================================================
;outputs signal
instr MasterOuts
aSignal chnget "audioSend1"
aLeft, aRight reverbsc aSignal, aSignal, chnget:k("reverbSlider"), chnget:k("reverbFreqSlider")
outs aLeft+aSignal, aRight+aSignal
chnclear "audioSend1"
endin
i"MasterOuts" 0 36000