@@ -0,0 +1,76 @@ | |||
*~ | |||
*.a | |||
*.dll | |||
*.dylib | |||
*.exe | |||
*.la | |||
*.o | |||
*.so | |||
*.so.* | |||
*.cdbs-orig | |||
*.moc | |||
moc_*.cpp | |||
qrc_*.cpp | |||
ui_*.h | |||
*.lv2 | |||
*.make | |||
*.pro.user | |||
Makefile | |||
Makefile.Debug | |||
Makefile.Release | |||
object_script.*.Debug | |||
object_script.*.Release | |||
.directory | |||
.fuse* | |||
.svn | |||
.*.kate-swp | |||
.DS_Store | |||
.kdev_include_paths | |||
.kdev4 | |||
bin/ladspa | |||
bin/dssi | |||
bin/lv2 | |||
bin/vst | |||
bin/standalone | |||
debian | |||
intermediate | |||
lv2_ttl_generator | |||
libs/distrho/dgl/Makefile.copy | |||
libs/juce-2.0/source/amalgamation/ | |||
libs/juce-2.0/source/docs/ | |||
libs/juce-2.0/source/extras/ | |||
libs/juce-2.0/source/modules/juce_box2d/ | |||
libs/juce-2.0/source/modules/juce_browser_plugin_client/ | |||
libs/juce-2.0/source/modules/juce_cryptography/ | |||
libs/juce-2.0/source/modules/juce_opengl/ | |||
libs/juce-2.0/source/modules/juce_video/ | |||
libs/juce-2.0/source/juce.h | |||
libs/juce-2.0/source/juce_amalgamated.* | |||
scripts/*.h | |||
scripts/*.pro | |||
sdks/ASIOSDK2/* | |||
sdks/vstsdk2.4/* | |||
_old | |||
ports/_todo | |||
libs/juce/source/.gitignore | |||
libs/juce/source/amalgamation/ | |||
libs/juce/source/docs/ | |||
libs/juce/source/extras/ | |||
libs/juce/source/juce.h | |||
libs/juce/source/juce_amalgamated.cpp | |||
libs/juce/source/juce_amalgamated.h | |||
libs/juce/source/juce_amalgamated.mm | |||
libs/juce/source/modules/juce_box2d/ | |||
libs/juce/source/modules/juce_browser_plugin_client/ | |||
libs/juce/source/modules/juce_cryptography/ | |||
libs/juce/source/modules/juce_opengl/ | |||
libs/juce/source/modules/juce_video/ |
@@ -0,0 +1,9 @@ | |||
[Project] | |||
Manager=KDevGenericManager | |||
Name=DISTRHO | |||
[Filters] | |||
Excludes=*~,*.o | |||
[Project] | |||
VersionControlSupport=kdevgit |
@@ -0,0 +1,99 @@ | |||
# ----------------------------------------- | |||
# Compile all the Plugins and Ports | |||
PREFIX = /usr/local | |||
# ----------------------------------------- | |||
# all | |||
all: | |||
$(MAKE) -C libs/dgl | |||
$(MAKE) -C libs/drowaudio | |||
$(MAKE) -C libs/juce | |||
$(MAKE) -C libs/juced | |||
$(MAKE) -C libs/lv2-ttl-generator | |||
$(MAKE) -C plugins plugins | |||
$(MAKE) -C ports plugins | |||
$(MAKE) gen | |||
# ----------------------------------------- | |||
# install | |||
install: | |||
install -d $(DESTDIR)$(PREFIX)/lib/ladspa/ | |||
install -d $(DESTDIR)$(PREFIX)/lib/dssi/ | |||
install -d $(DESTDIR)$(PREFIX)/lib/lv2/ | |||
install -d $(DESTDIR)$(PREFIX)/lib/vst/ | |||
cp -r bin/ladspa/* $(DESTDIR)$(PREFIX)/lib/ladspa/ | |||
cp -r bin/dssi/* $(DESTDIR)$(PREFIX)/lib/dssi/ | |||
cp -r bin/vst/* $(DESTDIR)$(PREFIX)/lib/vst/ | |||
cp -r bin/lv2/*.lv2/ static-lv2-ttl/*.lv2/ $(DESTDIR)$(PREFIX)/lib/lv2/ | |||
# ----------------------------------------- | |||
# gen | |||
gen: gen_lv2 gen_vst | |||
gen_lv2: | |||
$(MAKE) -C libs/lv2-ttl-generator | |||
@./scripts/generate-cabbage-lv2.sh | |||
@./scripts/generate-ttl.sh | |||
gen_vst: | |||
@./scripts/generate-cabbage-vst.sh | |||
# ----------------------------------------- | |||
# clean | |||
clean: | |||
$(MAKE) clean -C libs/dgl | |||
$(MAKE) clean -C libs/drowaudio | |||
$(MAKE) clean -C libs/juce | |||
$(MAKE) clean -C libs/juced | |||
$(MAKE) clean -C libs/lv2-ttl-generator | |||
$(MAKE) clean -C plugins | |||
$(MAKE) clean -C ports | |||
rm -rf bin/lv2/*.lv2/ | |||
distclean: clean | |||
$(MAKE) distclean -C libs/dgl | |||
$(MAKE) distclean -C libs/drowaudio | |||
$(MAKE) distclean -C libs/juce | |||
$(MAKE) distclean -C libs/juced | |||
$(MAKE) distclean -C plugins | |||
$(MAKE) distclean -C ports | |||
# ----------------------------------------- | |||
# mingw | |||
mingw: | |||
$(MAKE) -C libs/lv2-ttl-generator mingw | |||
# ----------------------------------------- | |||
# Custom build types | |||
ladspa: | |||
$(MAKE) -C plugins ladspa | |||
dssi: | |||
$(MAKE) -C libs/dgl | |||
$(MAKE) -C plugins dssi | |||
lv2: | |||
$(MAKE) -C libs/dgl | |||
$(MAKE) -C libs/drowaudio | |||
$(MAKE) -C libs/juce | |||
$(MAKE) -C libs/juced | |||
$(MAKE) -C libs/lv2-ttl-generator | |||
$(MAKE) -C plugins lv2 | |||
$(MAKE) -C ports lv2 | |||
$(MAKE) gen_lv2 | |||
vst: | |||
$(MAKE) -C libs/dgl | |||
$(MAKE) -C libs/drowaudio | |||
$(MAKE) -C libs/juce | |||
$(MAKE) -C libs/juced | |||
$(MAKE) -C plugins vst | |||
$(MAKE) -C ports vst | |||
$(MAKE) gen_vst |
@@ -0,0 +1,5 @@ | |||
test new cabbage code | |||
install new cabbage files (html, others?) | |||
report all bugs upstream | |||
fix dgl keyboard input bug |
@@ -0,0 +1,101 @@ | |||
<Cabbage> | |||
form caption("Autopan / Tremolo") size(440, 102), pluginID("aptr") | |||
image pos( 0, 0), size(440, 102), colour("Maroon"), shape("rounded"), outline("white"), line(4) | |||
rslider bounds( 5, 6, 90, 90), text("Freq.[Hz]"), channel("rate"), range(0.1, 50, 0.5, 0.5), textBox(1) | |||
rslider bounds( 80, 6, 90, 90), text("Tempo[BPM]"), channel("tempo"), range(6, 3000, 30, 0.5, 1), textBox(1) | |||
rslider bounds(175, 6, 90, 90), text("Depth"), channel("depth"), range(0, 1.00, 1, 0.5), textBox(1) | |||
rslider bounds(345, 6, 90, 90), text("Level"), channel("level"), range(0, 1.00, 1), textBox(1) | |||
checkbox bounds(160, 15, 25, 25), colour("yellow"), channel("indicator"), value(0), shape("rounded") | |||
combobox bounds(260, 13, 90,20), channel("mode"), value(1), text("Autopan", "Tremolo") | |||
combobox bounds(260, 38, 90,20), channel("wave"), value(1), text("Sine", "Triangle", "Square", "Randomi", "Randomh") | |||
checkbox bounds(260, 63, 90, 15), text("TEST TONE"), colour("lime"), channel("test"), value(0) | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
;Author: Iain McCurdy (2012) | |||
opcode PanTrem,aa,aakkkK | |||
ainL,ainR,krate,kdepth,kmode,kwave xin ;READ IN INPUT ARGUMENTS | |||
ktrig changed kwave ;IF LFO WAVEFORM TYPE IS CHANGED GENERATE A MOMENTARY '1' (BANG) | |||
if ktrig=1 then ;IF A 'BANG' HAS BEEN GENERATED IN THE ABOVE LINE | |||
reinit UPDATE ;BEGIN A REINITIALIZATION PASS FROM LABEL 'UPDATE' SO THAT LFO WAVEFORM TYPE CAN BE UPDATED | |||
endif ;END OF THIS CONDITIONAL BRANCH | |||
UPDATE: ;LABEL CALLED UPDATE | |||
iwave init i(kwave) | |||
iwave limit iwave, 0, 4 ; | |||
if iwave==3 then ;if randomi chosen... | |||
klfo randomi -kdepth,kdepth,krate,1 | |||
elseif iwave==4 then ;of randomh chosen... | |||
klfo randomh -kdepth,kdepth,krate,1 | |||
else | |||
klfo lfo kdepth, krate, iwave ;CREATE AN LFO | |||
endif | |||
rireturn ;RETURN FROM REINITIALIZATION PASS | |||
klfo = (klfo*0.5)+0.5 ;RESCALE AND OFFSET LFO SO IT STAY WITHIN THE RANGE 0 - 1 ABOUT THE VALUE 0.5 | |||
if iwave=2||iwave==4 then ;IF SQUARE WAVE MODULATION HAS BEEN CHOSEN... | |||
klfo portk klfo, 0.001 ;SMOOTH THE SQUARE WAVE A TINY BIT TO PREVENT CLICKS | |||
endif ;END OF THIS CONDITIONAL BRANCH | |||
if kmode=0 then ;PAN ;IF PANNING MODE IS CHOSEN FROM BUTTON BANK... | |||
alfo interp klfo ;INTERPOLATE K-RATE LFO AND CREATE A-RATE VARIABLE | |||
aoutL = ainL*sqrt(alfo) ;REDEFINE GLOBAL AUDIO LEFT CHANNEL SIGNAL WITH AUTO-PANNING | |||
aoutR = ainR*(1-sqrt(alfo)) ;REDEFINE GLOBAL AUDIO RIGHT CHANNEL SIGNAL WITH AUTO-PANNING | |||
kindicator = (klfo>0.5?1:0) | |||
chnset kindicator,"indicator" | |||
elseif kmode=1 then ;TREM ;IF TREMELO MODE IS CHOSEN FROM BUTTON BANK... | |||
kindicator = (klfo>0.5?1:0) | |||
chnset kindicator,"indicator" | |||
klfo = klfo+(0.5-(kdepth*0.5)) ;MODIFY LFO AT ZERO DEPTH VALUE IS 1 AND AT MAX DEPTH CENTRE OF MODULATION IS 0.5 | |||
alfo interp klfo ;INTERPOLATE K-RATE LFO AND CREATE A-RATE VARIABLE | |||
aoutL = ainL*(alfo^2) ;REDEFINE GLOBAL AUDIO LEFT CHANNEL SIGNAL WITH TREMELO | |||
aoutR = ainR*(alfo^2) ;REDEFINE GLOBAL AUDIO RIGHT CHANNEL SIGNAL WITH TREMELO | |||
endif ;END OF THIS CONDITIONAL BRANCH | |||
xout aoutL,aoutR ;SEND AUDIO BACK TO CALLER INSTRUMENT | |||
endop | |||
instr 1 | |||
krate chnget "rate" | |||
ktempo chnget "tempo" | |||
kdepth chnget "depth" | |||
kmode chnget "mode" | |||
kwave chnget "wave" | |||
klevel chnget "level" | |||
ktest chnget "test" | |||
ktrig changed krate | |||
ktrig2 changed ktempo | |||
if ktrig=1 then | |||
chnset krate*60,"tempo" | |||
elseif ktrig2=1 then | |||
chnset ktempo/60,"rate" | |||
endif | |||
if ktest=1 then | |||
a1 vco2 0.2,300,4,0.5 | |||
a2 = a1 | |||
else | |||
a1,a2 ins | |||
endif | |||
a1,a2 PanTrem a1,a2,krate,kdepth,kmode-1,kwave-1 | |||
a1 = a1 * klevel | |||
a2 = a2 * klevel | |||
outs a1,a2 | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [60*60*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,73 @@ | |||
<Cabbage> | |||
form caption("Highpass Filter") size(435, 90), pluginID("HPFl") | |||
image pos(0, 0), size(435, 90), colour( 70,120, 90), shape("rounded"), outline("white"), line(4) | |||
label bounds(22, 22, 60, 11), text("INPUT"), fontcolour("black") | |||
combobox bounds(10, 33, 60, 20), channel("input"), value(1), text("Live","Tone","Noise") | |||
rslider bounds( 75, 11, 70, 70), channel("cf"), text("Freq."), colour( 0, 60, 30), tracker(200,255,200), fontcolour("white"), range(20, 20000, 20000, 0.333) | |||
rslider bounds(140, 11, 70, 70), channel("res"), text("Res."), colour( 0, 60, 30), tracker(200,255,200), fontcolour("white"), range(0,1.00,0) | |||
rslider bounds(205, 11, 70, 70), channel("mix"), text("Mix"), colour( 0, 60, 30), tracker(200,255,200), fontcolour("white"), range(0,1.00,1) | |||
button bounds(280, 10, 80, 20), text("24dB/oct", "12dB/oct"), channel("steepness"), value(0) | |||
label bounds(290, 30, 80, 12), text("Steepness"), fontcolour("black") | |||
checkbox bounds(280, 50, 80, 15), channel("ResType"),colour(yellow), fontcolour("black"), value(0), text("Resonant") | |||
rslider bounds(360, 11, 70, 70), text("Level"), colour( 0, 60, 30), tracker(200,255,200), fontcolour("white"), channel("level"), range(0, 1.00, 1) | |||
image bounds(5, 95, 205, 20), colour(75, 85, 90, 100), plant("credit"), line(0){ | |||
label bounds(0.03, 0.1, .95, .7), text("Author: Iain McCurdy |2012|"), colour("white") | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 ;SAMPLE RATE | |||
ksmps = 32 ;NUMBER OF AUDIO SAMPLES IN EACH CONTROL CYCLE | |||
nchnls = 2 ;NUMBER OF CHANNELS (2=STEREO) | |||
0dbfs = 1 | |||
;Author: Iain McCurdy (2012) | |||
instr 1 | |||
kcf chnget "cf" ; | |||
kres chnget "res" ; | |||
kmix chnget "mix" ; | |||
ksteepness chnget "steepness" ; | |||
kResType chnget "ResType" ; | |||
klevel chnget "level" ; | |||
kporttime linseg 0,0.001,0.02 | |||
kcf portk kcf,kporttime | |||
/* INPUT */ | |||
kinput chnget "input" | |||
if kinput=1 then | |||
aL,aR ins | |||
elseif kinput=2 then | |||
aL vco2 0.2, 100 | |||
aR = aL | |||
else | |||
aL pinkish 0.2 | |||
aR pinkish 0.2 | |||
endif | |||
if ksteepness==0&&kResType!=1 then | |||
aFiltL atone aL,kcf | |||
aFiltR atone aR,kcf | |||
elseif ksteepness==1&&kResType!=1 then | |||
aFiltL buthp aL,kcf | |||
aFiltR buthp aR,kcf | |||
elseif kResType==1 then | |||
aFiltL bqrez aL,kcf,1+(kres*40),1 | |||
aFiltR bqrez aR,kcf,1+(kres*40),1 | |||
endif | |||
aL ntrpol aL,aFiltL,kmix | |||
aR ntrpol aR,aFiltR,kmix | |||
outs aL*klevel,aR*klevel | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [3600*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,71 @@ | |||
<Cabbage> | |||
form caption("Lowpass Filter") size(435, 90), pluginID("LPFl") | |||
image pos(0, 0), size(435, 90), colour( 70, 90,100), shape("rounded"), outline("white"), line(4) | |||
label bounds( 22, 22, 60, 11), text("INPUT"), fontcolour("white") | |||
combobox bounds( 10, 33, 60, 20), channel("input"), value(1), text("Live","Tone","Noise") | |||
rslider bounds( 75, 11, 70, 70), channel("cf"), text("Freq."), colour( 0, 40, 50), tracker(200,240,250), fontcolour("white"), range(20, 20000, 20000, 0.333) | |||
rslider bounds(140, 11, 70, 70), channel("res"), text("Res."), colour( 0, 40, 50), tracker(200,240,250), fontcolour("white"), range(0,1.00,0) | |||
rslider bounds(205, 11, 70, 70), channel("mix"), text("Mix"), colour( 0, 40, 50), tracker(200,240,250), fontcolour("white"), range(0,1.00,1) | |||
button bounds(280, 10, 80, 20), channel("steepness"), text("24dB/oct", "12dB/oct"), value(0) | |||
label bounds(290, 30, 80, 12), text("Steepness"), FontColour("white") | |||
checkbox bounds(280, 50, 80, 15), channel("ResType"), FontColour("white"), value(0), text("Resonant"), colour(yellow) | |||
rslider bounds(360, 11, 70, 70), text("Level"), colour( 0, 40, 50), tracker(200,240,250), fontcolour("white"), channel("level"), range(0, 1.00, 1) | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 ;SAMPLE RATE | |||
ksmps = 32 ;NUMBER OF AUDIO SAMPLES IN EACH CONTROL CYCLE | |||
nchnls = 2 ;NUMBER OF CHANNELS (2=STEREO) | |||
0dbfs = 1 | |||
;Author: Iain McCurdy (2012) | |||
instr 1 | |||
kcf chnget "cf" ; | |||
kres chnget "res" ; | |||
kmix chnget "mix" ; | |||
ksteepness chnget "steepness" ; | |||
kResType chnget "ResType" ; | |||
klevel chnget "level" ; | |||
kporttime linseg 0,0.001,0.02 | |||
kcf portk kcf,kporttime | |||
/* INPUT */ | |||
kinput chnget "input" | |||
if kinput=1 then | |||
aL,aR ins | |||
elseif kinput=2 then | |||
aL vco2 0.2, 100 | |||
aR = aL | |||
else | |||
aL pinkish 0.2 | |||
aR pinkish 0.2 | |||
endif | |||
if ksteepness==0&&kResType!=1 then | |||
aFiltL tone aL,kcf | |||
aFiltR tone aR,kcf | |||
elseif ksteepness==1&&kResType!=1 then | |||
aFiltL butlp aL,kcf | |||
aFiltR butlp aR,kcf | |||
elseif kResType==1 then | |||
aFiltL moogladder aL,kcf,kres | |||
aFiltR moogladder aR,kcf,kres | |||
endif | |||
aL ntrpol aL,aFiltL,kmix | |||
aR ntrpol aR,aFiltR,kmix | |||
outs aL*klevel,aR*klevel | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [3600*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,76 @@ | |||
Reverb effect that employs screverb and freeverb opcodes. | |||
Pitch Mod. is only used by reverbsc. | |||
<Cabbage> | |||
form caption("Multi Reverb") size(415, 90), pluginID("Rvrb") | |||
image bounds( 7, 22, 73, 45), colour( 39, 31, 20), shape("rounded"), outline(white), line(1) | |||
image bounds(0, 0, 415, 90), colour( 39, 31, 20), shape("rounded"), outline("white"), line(4) | |||
label bounds( 29, 26, 60, 12), text("Type"), fontColour(white) | |||
button bounds( 11, 40, 66, 20), text("freeverb", "screverb"), channel("type"), value(0), fontcolour("lime") | |||
rslider bounds( 80, 11, 70, 70), text("Size"), fontcolour(white), channel("fblvl"), range(0, 1.00, 0.8), colour( 79, 81, 70), tracker(240,210,170) | |||
rslider bounds(145, 11, 70, 70), text("Damping"), fontcolour(white), channel("fco"), range(0, 1.00, 0.6), colour( 79, 81, 70), tracker(240,210,170) | |||
rslider bounds(210, 11, 70, 70), text("Pitch Mod."), fontcolour(white), channel("pitchm"), range(0, 20.0, 1), colour( 79, 81, 70), tracker(240,210,170) | |||
rslider bounds(275, 11, 70, 70), text("Mix"), fontcolour(white), channel("mix"), range(0, 1.00, 1), colour( 79, 81, 70), tracker(240,210,170) | |||
rslider bounds(340, 11, 70, 70), text("Level"), fontcolour(white), channel("amp"), range(0, 1.00, 1), colour( 79, 81, 70), tracker(240,210,170) | |||
} | |||
image bounds(5, 95, 205, 20), colour(75, 85, 90, 100), plant("credit"), line(0){ | |||
label bounds(0.03, 0.1, .95, .7), text("Author: Iain McCurdy |2012|"), colour("white") | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 ;SAMPLE RATE | |||
ksmps = 32 ;NUMBER OF AUDIO SAMPLES IN EACH CONTROL CYCLE | |||
nchnls = 2 ;NUMBER OF CHANNELS (2=STEREO) | |||
0dbfs = 1 | |||
;Author: Iain McCurdy (2012) | |||
instr 1 | |||
ktype chnget "type" ;READ WIDGETS... | |||
kfblvl chnget "fblvl" ; | |||
kfco chnget "fco" ; | |||
kpitchm chnget "pitchm" ; | |||
kmix chnget "mix" ; | |||
kamp chnget "amp" ; | |||
ainL,ainR ins | |||
denorm ainL, ainR ;DENORMALIZE BOTH CHANNELS OF AUDIO SIGNAL | |||
if ktype==0 then | |||
kfco expcurve kfco, 4 ;CREATE A MAPPING CURVE TO GIVE A NON LINEAR RESPONSE | |||
kfco scale kfco,20000,20 ;RESCALE 0 - 1 TO 20 TO 20000 | |||
kSwitch changed kpitchm ;GENERATE A MOMENTARY '1' PULSE IN OUTPUT 'kSwitch' IF ANY OF THE SCANNED INPUT VARIABLES CHANGE. (OUTPUT 'kSwitch' IS NORMALLY ZERO) | |||
if kSwitch=1 then ;IF kSwitch=1 THEN | |||
reinit UPDATE ;BEGIN A REINITIALIZATION PASS FROM LABEL 'UPDATE' | |||
endif ;END OF CONDITIONAL BRANCHING | |||
UPDATE: ;A LABEL | |||
arvbL, arvbR reverbsc ainL, ainR, kfblvl, kfco, sr, i(kpitchm) | |||
rireturn ;RETURN TO PERFORMANCE TIME PASSES | |||
else | |||
arvbL, arvbR freeverb ainL, ainR, kfblvl, 1-kfco | |||
endif | |||
amixL ntrpol ainL, arvbL, kmix ;CREATE A DRY/WET MIX BETWEEN THE DRY AND THE REVERBERATED SIGNAL | |||
amixR ntrpol ainR, arvbR, kmix ;CREATE A DRY/WET MIX BETWEEN THE DRY AND THE REVERBERATED SIGNAL | |||
outs amixL * kamp, amixR * kamp | |||
endin | |||
instr 3 ;workaround for failure of these widgets from intiialising properly when used as a plugin | |||
;chnset 12000,"fco" | |||
chnset 1,"pitchm" | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [3600*24*7] | |||
i 3 0 0 | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,96 @@ | |||
<Cabbage> | |||
form caption("clip") size(315, 90), pluginID("clip") | |||
image bounds(0, 0, 315, 90), colour( 0, 10, 20), shape("rounded"), outline("white"), line(4) | |||
rslider bounds( 10, 11, 70, 70), text("Limit"), channel("limit"), range(0.001, 1, 1, 0.5,0.001) , colour(0,10,20), fontcolour(silver), tracker(lightblue) | |||
rslider bounds( 75, 11, 70, 70), text("Argument"), channel("arg"), range(0, 1.00, 0.5) , colour(0,10,20), fontcolour(silver), tracker(lightblue) | |||
combobox bounds(150, 15, 80,20), channel("method"), size(80,50), value(1), text("B.D.J.", "Sine", "Tanh") | |||
checkbox bounds(150, 45, 100, 20), channel("clip_light"), text("clip") fontcolour("white"), shape("rounded"), colour("red") | |||
rslider bounds(235, 11, 70, 70), text("Level"), channel("level"), range(0, 10.00, 0.7) , colour(0,10,20), fontcolour(silver), tracker(lightblue) | |||
} | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 ;SAMPLE RATE | |||
ksmps = 32 ;NUMBER OF AUDIO SAMPLES IN EACH CONTROL CYCLE | |||
nchnls = 2 ;NUMBER OF CHANNELS (2=STEREO) | |||
0dbfs = 1 | |||
;Author: Iain McCurdy (2012) | |||
instr 1 | |||
gklimit chnget "limit" ;READ WIDGETS... | |||
gkmethod chnget "method" ; | |||
gkmethod init 1 | |||
gkmethod init i(gkmethod)-1 | |||
gkarg chnget "arg" | |||
gklevel chnget "level" ; | |||
;asigL, asigR diskin2 "Seashore.wav",1,0,1 ;OPTIONALLY USE A BUILT-IN WAVEFORM FOR TESTING | |||
asigL, asigR ins | |||
kSwitch changed gklimit, gkmethod, gkarg ;GENERATE A MOMENTARY '1' PULSE IN OUTPUT 'kSwitch' IF ANY OF THE SCANNED INPUT VARIABLES CHANGE. (OUTPUT 'kSwitch' IS NORMALLY ZERO) | |||
if kSwitch=1 then ;IF A VARIABLE CHANGE INDICATOR IS RECEIVED... | |||
reinit START ;...BEGIN A REINITIALISATION PASS FROM LABEL 'START' | |||
endif ;END OF CONDITIONAL BRANCHING | |||
START: ;LABEL | |||
/* clip meter */ | |||
krmsL rms asigL | |||
krmsR rms asigR | |||
kon = 1 | |||
koff = 0 | |||
if(krmsL>gklimit||krmsR>gklimit) then | |||
chnset kon,"clip_light" | |||
else | |||
chnset koff,"clip_light" | |||
endif | |||
/*------------*/ | |||
aL clip asigL, i(gkmethod), i(gklimit), i(gkarg) | |||
aR clip asigR, i(gkmethod), i(gklimit), i(gkarg) | |||
rireturn ;RETURN TO PERFORMANCE PASSES FROM INITIALISATION PASS | |||
; outs aL*gklevel*(1/(gklimit^0.5)), aR*gklevel*(1/(gklimit^0.5)) ;pdclip OUTPUTS ARE SENT TO THE SPEAKERS | |||
outs aL*gklevel, aR*gklevel ;pdclip OUTPUTS ARE SENT TO THE SPEAKERS | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [3600*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> | |||
@@ -0,0 +1,98 @@ | |||
<Cabbage> | |||
form caption("pdclip") size(315, 90), pluginID("pdcl") | |||
label bounds( 0, -8,315, 90), colour(20,100,100,200), fontcolour(70,150,150,200), text("pdclip"), shape("rounded"), outline("white"), line(4) | |||
image bounds( 0, 0,315, 90), colour(10,100,200,200), shape("rounded"), outline("white"), line(4) | |||
rslider bounds( 10, 11, 70, 70), text("Width"), channel("width"), range(0, 1.00, 0),fontcolour("white"), colour(20, 70,120), tracker("yellow") | |||
rslider bounds( 75, 11, 70, 70), text("Centre"), channel("center"), range(-1.00, 1.00, 0),fontcolour("white"), colour(20, 70,120), tracker("yellow") | |||
combobox bounds(150, 20, 80, 20), channel("bipolar"), size(80,50), value(2), text("Unipolar", "Bipolar") | |||
checkbox bounds(150, 48,130, 12), channel("TestTone"), FontColour("white"), value(0), text("Sine Tone"), colour(yellow) | |||
rslider bounds(235, 11, 70, 70), text("Level"), channel("level"), range(0, 1.00, 0.7),fontcolour("white"), colour(20, 70,120), tracker("yellow") | |||
} | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 ;SAMPLE RATE | |||
ksmps = 32 ;NUMBER OF AUDIO SAMPLES IN EACH CONTROL CYCLE | |||
nchnls = 2 ;NUMBER OF CHANNELS (2=STEREO) | |||
0dbfs = 1 | |||
;Author: Iain McCurdy (2012) | |||
gisine ftgen 0,0,4096,10,1 | |||
instr 1 | |||
kporttime linseg 0,0.001,0.05 ; portamento time ramps up from zero | |||
gkwidth chnget "width" ;READ WIDGETS... | |||
gkwidth portk gkwidth,kporttime | |||
gkcenter chnget "center" ; | |||
gkcenter portk gkcenter,kporttime | |||
gkbipolar chnget "bipolar" ; | |||
gkbipolar init 1 | |||
gkbipolar = gkbipolar-1 | |||
gklevel chnget "level" ; | |||
gklevel portk gklevel,kporttime | |||
gkTestTone chnget "TestTone" | |||
if gkTestTone==1 then ; if test tone selected... | |||
koct rspline 4,8,0.2,0.5 | |||
asigL poscil 1,cpsoct(koct),gisine ; ...generate a tone | |||
asigR = asigL ; right channel equal to left channel | |||
else ; otherwise... | |||
asigL, asigR ins ; read live inputs | |||
endif | |||
ifullscale = 0dbfs ;DEFINE FULLSCALE AMPLITUDE VALUE | |||
kSwitch changed gkbipolar ;GENERATE A MOMENTARY '1' PULSE IN OUTPUT 'kSwitch' IF ANY OF THE SCANNED INPUT VARIABLES CHANGE. (OUTPUT 'kSwitch' IS NORMALLY ZERO) | |||
if kSwitch=1 then ;IF A VARIABLE CHANGE INDICATOR IS RECEIVED... | |||
reinit START ;...BEGIN A REINITIALISATION PASS FROM LABEL 'START' | |||
endif ;END OF CONDITIONAL BRANCHING | |||
START: ;LABEL | |||
;CLIP THE AUDIO SIGNAL USING pdclip | |||
aL pdclip asigL, gkwidth, gkcenter, i(gkbipolar) ; [, ifullscale]] | |||
aR pdclip asigR, gkwidth, gkcenter, i(gkbipolar) ; [, ifullscale]] | |||
rireturn ;RETURN TO PERFORMANCE PASSES FROM INITIALISATION PASS | |||
alevel interp gklevel | |||
outs aL * alevel, aR * alevel ;pdclip OUTPUT ARE SENT TO THE SPEAKERS | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [3600*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> | |||
@@ -0,0 +1,134 @@ | |||
resony.csd | |||
Resony is an implementation of a stack of second-order bandpass filters whose centre frequencies are arithmetically related. | |||
The 'bandwidth' and 'scaling mode' parameters are as they are in the reson opcode. | |||
'inum' (number of filters) defines the number of filters in the stack. | |||
'ksep' (separation) normally defines the separation between the lowest and highest filter in the stack in octaves. How this relates to what the actual centre frequencies of filters will be differs depending upon which separation mode has been selected. This is explained below. Note that in this example the operation of 'ksep' has been modified slightly to allow the opcode to be better controlled from the GUI. These modifications are clarified below. Separation can be defined in octaves using the knob 'Sep.oct.' or in semitones using the 'Sep.semi.' knob. | |||
'kbf' (base frequency) defines the centre frequency of the first filter. In 'oct.total' separation mode the pitch interval between the base frequency and (base frequency + separation) is divided into equal intervals according to the number of filters that have been selected. Note that no filter is created at the frequency of (base frequency + separation). For example: if separation=1 and num.filters=2, filters will be created at the base frequency and a tritone above the base frequency (i.e. an interval of 1/2 and an octave). I suspect this is a mistake in the opcode implementation so in this example I rescale the separation interval before passing it to the resony opcode so that the interval between the lowest and highest filter in this mode will always be the interval defined in the GUI. A further option I have provided allows the defined interval to be the interval between adjacent filters rather than the interval from lowest to highest. If 'hertz' separation mode is selected behaviour is somewhat curious. I have made some modifications to the values passed to the opcode to make this mode more controllable. Without these modifications, if number of filters is '1' no filters would be created. The frequency relationship between filters in the stack always follows the harmonic series. Both 'Base Frequency' and 'Separation' normally shift this harmonic stack of filters up or down, for this reason I have disabled user control of 'Separation' in this example, instead a value equal to the 'Number of Filters' will always be used for 'Separation'. This ensures that a harmonic stack will always be created built upon 'Base Frequency' as the fundamental. Negative values for 'separation' are allowed whenever 'separation mode' is 'octaves' (if this is the case, the stack of frequencies will extend below the base frequency). Negative values for 'separation' when 'separation mode' is 'hertz' will cause filters to 'explode'. As 'Separation' is fixed at 'Number of Filters' in this example this explosion will not occur. | |||
<Cabbage> | |||
form caption("resony") size(810, 90), pluginID("rsny"), colour(255,100,0,255) | |||
image bounds( 0, 0,810, 90), colour("black"), shape("rounded"), outline("white"), line(4) | |||
button bounds( 10, 20, 80, 50), text("Noise", "Live"), channel("input"), value(0), fontcolour("lime") | |||
rslider bounds( 90, 10, 70, 70), text("BF."), fontcolour("white"), channel("bf"), range(20, 20000, 909, 0.5), colour("red") | |||
rslider bounds(160, 10, 70, 70), text("BW."), fontcolour("white"), channel("bw"), range(0.01, 1000, 13, 0.5), colour("red") | |||
rslider bounds(230, 10, 70, 70), text("Num."), fontcolour("white"), channel("num"), range(1, 80, 10, 1,1), colour("red") | |||
rslider bounds(300, 10, 70, 70), text("Sep.oct."), fontcolour("white"), channel("sep"), range(-11, 11, 2), colour("red") | |||
rslider bounds(370, 10, 70, 70), text("Sep.semi."), fontcolour("white"), channel("sep2"), range(-48, 48, 24,1,1), colour("red") | |||
combobox bounds(450, 10,130, 70), caption("Scaling Mode"), channel("scl"), value(2), text("none", "peak response", "RMS") | |||
combobox bounds(590, 10,130, 70), caption("Separation Mode"), channel("sepmode"), value(1), text("octs.total", "hertz", "octs.adjacent") | |||
rslider bounds(730, 10, 70, 70), text("Level"), fontcolour("white"), channel("gain"), range(0.0001, 1, 30, 0.5), colour("red") | |||
} | |||
image bounds(5, 95, 205, 20), colour(100,100,100,80), plant("credit"), line(0){ | |||
label bounds(0.03, 0.1, .95, .7), text("Author: Iain McCurdy |2012|"), fontcolour("white") | |||
} | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 ;SAMPLE RATE | |||
ksmps = 32 ;NUMBER OF AUDIO SAMPLES IN EACH CONTROL CYCLE | |||
nchnls = 2 ;NUMBER OF CHANNELS (2=STEREO) | |||
0dbfs = 1 | |||
;Author: Iain McCurdy (2012) | |||
;A UDO IS CREATED WHICH ENCAPSULATES THE MODIFICATIONS TO THE resony OPCODE DISCUSSED IN THIS EXAMPLE | |||
opcode resony2,a,akkikii | |||
ain, kbf, kbw, inum, ksep , isepmode, iscl xin | |||
;IF 'Octaves (Total)' MODE SELECTED... | |||
if isepmode==0 then | |||
irescale divz inum,inum-1,1 ;PREVENT ERROR IS NUMBER OF FILTERS = ZERO | |||
ksep = ksep * irescale ;RESCALE SEPARATION | |||
;IF 'Hertz' MODE SELECTED... | |||
elseif isepmode==1 then | |||
inum = inum + 1 | |||
ksep = inum | |||
;IF 'Octaves (Adjacent)' MODE SELECTED... | |||
elseif isepmode==2 then | |||
irescale divz inum,inum-1,1 ;PREVENT ERROR IS NUMBER OF FILTERS = ZERO | |||
ksep = ksep * irescale ;RESCALE SEPARATION | |||
ksep = ksep * (inum-1) ;RESCALE SEPARATION INTERVAL ACCORDING TO THE NUMBER OF FILTERS CHOSEN | |||
isepmode = 0 | |||
endif | |||
aout resony ain, kbf, kbw, inum, ksep , isepmode, iscl, 0 | |||
xout aout | |||
endop | |||
instr 1 | |||
kporttime linseg 0,0.001,0.005,1,0.005 ;CREATE A VARIABLE FUNCTION THAT RAPIDLY RAMPS UP TO A SET VALUE | |||
gkbf chnget "bf" | |||
gkbw chnget "bw" | |||
gkgain chnget "gain" | |||
gknum chnget "num" | |||
gksep chnget "sep" | |||
gksep2 chnget "sep2" | |||
gksepmode chnget "sepmode" | |||
gksepmode = gksepmode - 1 | |||
gksepmode init 1 | |||
gkscl chnget "scl" | |||
gkscl = gkscl - 1 | |||
gkscl init 1 | |||
gkinput chnget "input" | |||
kbf portk gkbf, kporttime ;SMOOTH MOVEMENT OF SLIDER VARIABLE TO CREATE BASE FREQUENCY | |||
ksep portk gksep, kporttime ;SMOOTH MOVEMENT OF SLIDER VARIABLE | |||
if gkinput==0 then | |||
asigL,asigR ins | |||
else | |||
asigL pinkish 1 | |||
asigR pinkish 1 | |||
endif | |||
kSwitch changed gkscl, gknum, gksepmode ;GENERATE A MOMENTARY '1' PULSE IN OUTPUT 'kSwitch' IF ANY OF THE SCANNED INPUT VARIABLES CHANGE. (OUTPUT 'kSwitch' IS NORMALLY ZERO) | |||
if kSwitch=1 then ;IF I-RATE VARIABLE CHANGE TRIGGER IS '1'... | |||
reinit START ;BEGIN A REINITIALISATION PASS FROM LABEL 'START' | |||
endif | |||
START: | |||
isepmode init i(gksepmode) | |||
inum init i(gknum) | |||
iscl init i(gkscl) | |||
;CALL resony2 UDO | |||
aresL resony2 asigL, kbf, gkbw, inum, ksep , isepmode, iscl | |||
aresR resony2 asigR, kbf, gkbw, inum, ksep , isepmode, iscl | |||
rireturn ;RETURN FROM REINITIALISATION PASS TO PERFORMANCE TIME PASSES | |||
outs aresL * gkgain, aresR * gkgain ;SEND FILTER OUTPUT TO THE AUDIO OUTPUTS AND SCALE USING THE FLTK SLIDER VARIABLE gkgain | |||
endin | |||
instr UpdateWidgets | |||
ksep chnget "sep" | |||
ksep2 chnget "sep2" | |||
ktrig1 changed ksep | |||
ktrig2 changed ksep2 | |||
if ktrig1==1 then | |||
chnset ksep*12, "sep2" | |||
elseif ktrig2==1 then | |||
chnset ksep2/12, "sep" | |||
endif | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0.1 [3600*24*7] | |||
i "UpdateWidgets" 0 3600 ;UPDATE SEPARATION DISPLAY BOX | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,103 @@ | |||
waveset.csd | |||
reinit seems a bit disruptive in Cabbage 3.03? | |||
'freeze' is not technically a freeze but instead a very large number of repeats. | |||
Waveset opcode can be reinitialised by three different methods: | |||
Manually using the 'Reset' button, | |||
by a built-in metronome, the rate of which can be adjusted by the user | |||
or by the dynamics of the input sound (the threshold of this dynamic triggereing can be adjusted by the user) | |||
'Metro' resetting is disabled when 'Metro Rate' = 0 | |||
'Threshold' (retrigering by input signal dynamics) is disabled when 'Threshold' = 1 (maximum setting) | |||
(resetting the opcode will reset its internal buffer and cancel out any time displacement induced by wavelet repetitions) | |||
<Cabbage> | |||
form caption("waveset") size(510, 90), pluginID("wset") | |||
image pos(0, 0), size(510, 90), colour("Green"), shape("rounded"), outline("Grey"), line(4) | |||
rslider bounds(5, 10, 70, 70), text("Repeats"), channel("repeats"), range(1, 100, 1, 1, 1), colour("yellow"), fontcolour("white") | |||
rslider bounds(70, 10, 70, 70), text("Mult."), channel("mult"), range(1, 100, 1, 0.5, 1), colour("yellow"), fontcolour("white") | |||
checkbox bounds(140, 23, 100, 30), channel("freeze"), text("Freeze"), value(0), colour("red"), fontcolour("white"), shape("ellipse") | |||
line bounds(220, 2, 3, 86), colour("Grey") | |||
button bounds(235, 15, 45,45), channel("reset"), text("Reset","Reset"), fontcolour("yellow") | |||
rslider bounds(290, 10, 70, 70), text("Threshold"), channel("thresh"), range(0, 1.00, 1), colour("orange"), fontcolour("white") | |||
rslider bounds(355, 10, 70, 70), text("Metro Rate"), channel("rate"), range(0, 5.00, 0), colour("orange"), fontcolour("white") | |||
line bounds(430, 2, 3, 86), colour("Grey") | |||
rslider bounds(435, 10, 70, 70), text("Level"), channel("level"), range(0, 1.00, 0.7), colour(255,150, 50), fontcolour("white") | |||
} | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 ;SAMPLE RATE | |||
ksmps = 32 ;NUMBER OF AUDIO SAMPLES IN EACH CONTROL CYCLE | |||
nchnls = 2 ;NUMBER OF CHANNELS (2=STEREO) | |||
0dbfs = 1 | |||
;Author: Iain McCurdy (2012) | |||
instr 1 | |||
krep chnget "repeats" ;READ WIDGETS... | |||
kmult chnget "mult" ; | |||
klevel chnget "level" ; | |||
kreset chnget "reset" ; | |||
kthresh chnget "thresh" ; | |||
krate chnget "rate" ; | |||
ktrigger changed kreset ; | |||
kmetro metro krate, 0.99 | |||
kfreeze chnget "freeze" | |||
;asigL, asigR diskin2 "Songpan.wav",1,0,1 ;USE SOUND FILE FOR TESTING | |||
asigL, asigR ins | |||
krms rms (asigL+asigR)*0.5 | |||
kDynTrig trigger krms,kthresh,0 | |||
if (ktrigger+kmetro+kDynTrig)>0 then | |||
reinit UPDATE | |||
endif | |||
UPDATE: | |||
aL waveset asigL,(krep*kmult)+(kfreeze*1000000000),5*60*sr ;PASS THE AUDIO SIGNAL THROUGH waveset OPCODE. Input duration is defined in samples - in this example the expression given equats to a 5 minute buffer | |||
aR waveset asigR,(krep*kmult)+(kfreeze*1000000000),5*60*sr ;PASS THE AUDIO SIGNAL THROUGH waveset OPCODE. Input duration is defined in samples - in this example the expression given equats to a 5 minute buffer | |||
rireturn | |||
outs aL*klevel, aR*klevel ;WAVESET OUTPUT ARE SENT TO THE SPEAKERS | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [3600*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> | |||
@@ -0,0 +1,370 @@ | |||
Choir.csd | |||
Note velocity is interpretted as attack time (along with a slight interpretation as amplitude) | |||
If N.Voices (number of voices) is set to '1' chorussing effect is bypassed, instead a fundemental modulation mechanism is enabled | |||
Vibrato/tremolo depth also controllable using midi controller 1 (mod. wheel), midi channel 1 | |||
Vowel is controllable using midi controller 2, midi channel 1 | |||
N.Voices value is not strictly speaking accurate: 1 = 1 voice | |||
2 = 2 voices | |||
3 = 4 voices | |||
4 = 6 voices | |||
5 = 8 voices, this is on account of how the mechanism implements a stereo effect | |||
<Cabbage> | |||
form caption("Choir") size(770, 335), pluginID("choi") | |||
; main container | |||
image bounds( 0, 0,770, 360), colour(255,100, 0, 40), shape("rounded"), outline("white"), line(3) | |||
; horizontal stripes | |||
image bounds( 0, 40,770, 75), colour(100,100, 0, 60), shape("sharp") | |||
image bounds( 0,130,770, 35), colour( 0, 0,255, 60), shape("sharp") | |||
; vertical stripes | |||
image bounds(310, 0, 30, 360), colour( 5,255, 0, 60), shape("sharp") | |||
image bounds(370, 0, 80, 360), colour(255, 0,200, 60), shape("sharp") | |||
image bounds(490, 0, 60, 360), colour( 0,255,200, 60), shape("sharp") | |||
image bounds(560, 0, 40, 360), colour(100, 55,200, 60), shape("sharp") | |||
image bounds(620, 0, 20, 360), colour(255, 55, 0, 60), shape("sharp") | |||
image bounds(660, 0, 90, 360), colour( 5,255,100, 60), shape("sharp") | |||
xypad bounds(10, 10, 250, 210), channel("vowel", "oct"), text("X = Vowel 'AEIOU' : Y = Octave Division"), rangex(0, 1, 0), rangey(0, 4, 0) | |||
combobox bounds(265, 10, 110, 25), channel("voice"), value(5), text("Bass", "Tenor", "Countertenor", "Alto", "Soprano") | |||
button bounds(265, 40, 110, 25), text("monophonic", "polyphonic"), channel("monopoly"), value(1), fontcolour("lime") | |||
rslider bounds(385, 10, 60, 60), text("Leg.Time"), channel("LegTim"), range(0.005, 0.3, 0.025, 0.5, 0.005) ,colour("green"), tracker("white") | |||
rslider bounds(445, 10, 60, 60), text("Vowel"), channel("vowel"), range(0, 1.00, 0) ,colour("green"),midCtrl(1, 2), tracker("white") | |||
rslider bounds(505, 10, 60, 60), text("Level"), channel("lev"), range(0, 1.00, 0.6) ,colour("green"), tracker("white") | |||
rslider bounds(265, 80, 60, 60), text("Vib.Dep."), channel("vibdep"), range(0, 2.00, 0.35) ,colour("tomato"),midCtrl(1, 1), tracker("white") | |||
rslider bounds(325, 80, 60, 60), text("Trem.Dep."), channel("trmdep"), range(0, 1.00, 0.2) ,colour("tomato"),midCtrl(1, 1), tracker("white") | |||
rslider bounds(385, 80, 60, 60), text("Mod.Rate"), channel("modrte"), range(0.10,20, 5, 0.5) ,colour("tomato"), tracker("white") | |||
rslider bounds(445, 80, 60, 60), text("Mod.Delay"), channel("moddel"), range(0, 2.00, 0.3, 0.5) ,colour("tomato"), tracker("white") | |||
rslider bounds(505, 80, 60, 60), text("Mod.Rise"), channel("modris"), range(0, 4.00, 2, 0.5) ,colour("tomato"), tracker("white") | |||
rslider bounds(265,150, 60, 60), text("N.Voices"), channel("nvoices"), range(1, 50, 6, 1, 1) ,colour("yellow"), tracker("white") | |||
rslider bounds(325,150, 60, 60), text("Dtn.Dep."), channel("DtnDep"), range(0, 4.00, 1, 0.5) ,colour("yellow"), tracker("white") | |||
rslider bounds(385,150, 60, 60), text("Dtn.Rate"), channel("DtnRte"), range(0.01,40, 0.2, 0.25) ,colour("yellow"), tracker("white") | |||
rslider bounds(445,150, 60, 60), text("Rvb.Mix"), channel("RvbMix"), range(0, 1.00, 0.15) ,colour("steelblue"), tracker("white") | |||
rslider bounds(505,150, 60, 60), text("Rvb.Size"), channel("RvbSize"), range(0.5, 1.00, 0.82, 2) ,colour("steelblue"), tracker("white") | |||
checkbox bounds(570, 10,190, 20), text("Filter On/Off") channel("FiltOnOff"), colour("lime") value(0) | |||
xypad bounds(570, 35, 190, 185), channel("cf", "bw"), text("x:c.off/y:b.width"), rangex(5, 13, 8), rangey(0.1, 5, 0.3) | |||
keyboard pos(10, 225), size(760, 80) | |||
image bounds(10, 309, 250, 22), colour(75, 85, 90, 100), plant("credit"){ | |||
label bounds(0.03, 0.15, .99, .7), text("Author: Iain McCurdy |2012|"), colour("white") | |||
} | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-dm0 -n -+rtmidi=null -M0 | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 64 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
massign 0,2 | |||
seed 0 | |||
;Author: Iain McCurdy (2012) | |||
gisine ftgen 0, 0, 4096, 10, 1 ;SINE WAVE | |||
giexp ftgen 0, 0, 1024, 19, 0.5, 0.5, 270, 0.5 ;EXPONENTIAL CURVE USED TO DEFINE THE ENVELOPE SHAPE OF FOF PULSES | |||
gasendL,gasendR init 0 | |||
;FUNCTION TABLES STORING DATA FOR VARIOUS VOICE FORMANTS | |||
;THE FIRST VALUE OF EACH TABLE DEFINES THE NUMBER OF DATA ELEMENTS IN THE TABLE | |||
;THIS IS NEEDED BECAUSE TABLES SIZES MUST BE POWERS OF 2 TO FACILITATE INTERPOLATED TABLE READING (tablei) | |||
;BASS | |||
giBF1 ftgen 0, 0, 8, -2, 4, 600, 400, 250, 350 ;FREQ | |||
giBF2 ftgen 0, 0, 8, -2, 4, 1040, 1620, 1750, 600 ;FREQ | |||
giBF3 ftgen 0, 0, 8, -2, 4, 2250, 2400, 2600, 2400 ;FREQ | |||
giBF4 ftgen 0, 0, 8, -2, 4, 2450, 2800, 3050, 2675 ;FREQ | |||
giBF5 ftgen 0, 0, 8, -2, 4, 2750, 3100, 3340, 2950 ;FREQ | |||
giBDb1 ftgen 0, 0, 8, -2, 4, 0, 0, 0, 0 ;dB | |||
giBDb2 ftgen 0, 0, 8, -2, 4, -7, -12, -30, -20 ;dB | |||
giBDb3 ftgen 0, 0, 8, -2, 4, -9, -9, -16, -32 ;dB | |||
giBDb4 ftgen 0, 0, 8, -2, 4, -9, -12, -22, -28 ;dB | |||
giBDb5 ftgen 0, 0, 8, -2, 4, -20, -18, -28, -36 ;dB | |||
giBBW1 ftgen 0, 0, 8, -2, 4, 60, 40, 60, 40 ;BAND WIDTH | |||
giBBW2 ftgen 0, 0, 8, -2, 4, 70, 80, 90, 80 ;BAND WIDTH | |||
giBBW3 ftgen 0, 0, 8, -2, 4, 110, 100, 100, 100 ;BAND WIDTH | |||
giBBW4 ftgen 0, 0, 8, -2, 4, 120, 120, 120, 120 ;BAND WIDTH | |||
giBBW5 ftgen 0, 0, 8, -2, 4, 130, 120, 120, 120 ;BAND WIDTH | |||
;TENOR | |||
giTF1 ftgen 0, 0, 8, -2, 5, 650, 400, 290, 400, 350 ;FREQ | |||
giTF2 ftgen 0, 0, 8, -2, 5, 1080, 1700, 1870, 800, 600 ;FREQ | |||
giTF3 ftgen 0, 0, 8, -2, 5, 2650, 2600, 2800, 2600, 2700 ;FREQ | |||
giTF4 ftgen 0, 0, 8, -2, 5, 2900, 3200, 3250, 2800, 2900 ;FREQ | |||
giTF5 ftgen 0, 0, 8, -2, 5, 3250, 3580, 3540, 3000, 3300 ;FREQ | |||
giTDb1 ftgen 0, 0, 8, -2, 5, 0, 0, 0, 0, 0 ;dB | |||
giTDb2 ftgen 0, 0, 8, -2, 5, -6, -14, -15, -10, -20 ;dB | |||
giTDb3 ftgen 0, 0, 8, -2, 5, -7, -12, -18, -12, -17 ;dB | |||
giTDb4 ftgen 0, 0, 8, -2, 5, -8, -14, -20, -12, -14 ;dB | |||
giTDb5 ftgen 0, 0, 8, -2, 5, -22, -20, -30, -26, -26 ;dB | |||
giTBW1 ftgen 0, 0, 8, -2, 5, 80, 70, 40, 40, 40 ;BAND WIDTH | |||
giTBW2 ftgen 0, 0, 8, -2, 5, 90, 80, 90, 80, 60 ;BAND WIDTH | |||
giTBW3 ftgen 0, 0, 8, -2, 5, 120, 100, 100, 100, 100 ;BAND WIDTH | |||
giTBW4 ftgen 0, 0, 8, -2, 5, 130, 120, 120, 120, 120 ;BAND WIDTH | |||
giTBW5 ftgen 0, 0, 8, -2, 5, 140, 120, 120, 120, 120 ;BAND WIDTH | |||
;COUNTER TENOR | |||
giCTF1 ftgen 0, 0, 8, -2, 5, 660, 440, 270, 430, 370 ;FREQ | |||
giCTF2 ftgen 0, 0, 8, -2, 5, 1120, 1800, 1850, 820, 630 ;FREQ | |||
giCTF3 ftgen 0, 0, 8, -2, 5, 2750, 2700, 2900, 2700, 2750 ;FREQ | |||
giCTF4 ftgen 0, 0, 8, -2, 5, 3000, 3000, 3350, 3000, 3000 ;FREQ | |||
giCTF5 ftgen 0, 0, 8, -2, 5, 3350, 3300, 3590, 3300, 3400 ;FREQ | |||
giTBDb1 ftgen 0, 0, 8, -2, 5, 0, 0, 0, 0, 0 ;dB | |||
giTBDb2 ftgen 0, 0, 8, -2, 5, -6, -14, -24, -10, -20 ;dB | |||
giTBDb3 ftgen 0, 0, 8, -2, 5, -23, -18, -24, -26, -23 ;dB | |||
giTBDb4 ftgen 0, 0, 8, -2, 5, -24, -20, -36, -22, -30 ;dB | |||
giTBDb5 ftgen 0, 0, 8, -2, 5, -38, -20, -36, -34, -30 ;dB | |||
giTBW1 ftgen 0, 0, 8, -2, 5, 80, 70, 40, 40, 40 ;BAND WIDTH | |||
giTBW2 ftgen 0, 0, 8, -2, 5, 90, 80, 90, 80, 60 ;BAND WIDTH | |||
giTBW3 ftgen 0, 0, 8, -2, 5, 120, 100, 100, 100, 100 ;BAND WIDTH | |||
giTBW4 ftgen 0, 0, 8, -2, 5, 130, 120, 120, 120, 120 ;BAND WIDTH | |||
giTBW5 ftgen 0, 0, 8, -2, 5, 140, 120, 120, 120, 120 ;BAND WIDTH | |||
;ALTO | |||
giAF1 ftgen 0, 0, 8, -2, 5, 800, 400, 350, 450, 325 ;FREQ | |||
giAF2 ftgen 0, 0, 8, -2, 5, 1150, 1600, 1700, 800, 700 ;FREQ | |||
giAF3 ftgen 0, 0, 8, -2, 5, 2800, 2700, 2700, 2830, 2530 ;FREQ | |||
giAF4 ftgen 0, 0, 8, -2, 5, 3500, 3300, 3700, 3500, 2500 ;FREQ | |||
giAF5 ftgen 0, 0, 8, -2, 5, 4950, 4950, 4950, 4950, 4950 ;FREQ | |||
giADb1 ftgen 0, 0, 8, -2, 5, 0, 0, 0, 0, 0 ;dB | |||
giADb2 ftgen 0, 0, 8, -2, 5, -4, -24, -20, -9, -12 ;dB | |||
giADb3 ftgen 0, 0, 8, -2, 5, -20, -30, -30, -16, -30 ;dB | |||
giADb4 ftgen 0, 0, 8, -2, 5, -36, -35, -36, -28, -40 ;dB | |||
giADb5 ftgen 0, 0, 8, -2, 5, -60, -60, -60, -55, -64 ;dB | |||
giABW1 ftgen 0, 0, 8, -2, 5, 50, 60, 50, 70, 50 ;BAND WIDTH | |||
giABW2 ftgen 0, 0, 8, -2, 5, 60, 80, 100, 80, 60 ;BAND WIDTH | |||
giABW3 ftgen 0, 0, 8, -2, 5, 170, 120, 120, 100, 170 ;BAND WIDTH | |||
giABW4 ftgen 0, 0, 8, -2, 5, 180, 150, 150, 130, 180 ;BAND WIDTH | |||
giABW5 ftgen 0, 0, 8, -2, 5, 200, 200, 200, 135, 200 ;BAND WIDTH | |||
;SOPRANO | |||
giSF1 ftgen 0, 0, 8, -2, 5, 800, 350, 270, 450, 325 ;FREQ | |||
giSF2 ftgen 0, 0, 8, -2, 5, 1150, 2000, 2140, 800, 700 ;FREQ | |||
giSF3 ftgen 0, 0, 8, -2, 5, 2900, 2800, 2950, 2830, 2700 ;FREQ | |||
giSF4 ftgen 0, 0, 8, -2, 5, 3900, 3600, 3900, 3800, 3800 ;FREQ | |||
giSF5 ftgen 0, 0, 8, -2, 5, 4950, 4950, 4950, 4950, 4950 ;FREQ | |||
giSDb1 ftgen 0, 0, 8, -2, 5, 0, 0, 0, 0, 0 ;dB | |||
giSDb2 ftgen 0, 0, 8, -2, 5, -6, -20, -12, -11, -16 ;dB | |||
giSDb3 ftgen 0, 0, 8, -2, 5, -32, -15, -26, -22, -35 ;dB | |||
giSDb4 ftgen 0, 0, 8, -2, 5, -20, -40, -26, -22, -40 ;dB | |||
giSDb5 ftgen 0, 0, 8, -2, 5, -50, -56, -44, -50, -60 ;dB | |||
giSBW1 ftgen 0, 0, 8, -2, 5, 80, 60, 60, 70, 50 ;BAND WIDTH | |||
giSBW2 ftgen 0, 0, 8, -2, 5, 90, 90, 90, 80, 60 ;BAND WIDTH | |||
giSBW3 ftgen 0, 0, 8, -2, 5, 120, 100, 100, 100, 170 ;BAND WIDTH | |||
giSBW4 ftgen 0, 0, 8, -2, 5, 130, 150, 120, 130, 180 ;BAND WIDTH | |||
giSBW5 ftgen 0, 0, 8, -2, 5, 140, 200, 120, 135, 200 ;BAND WIDTH | |||
opcode fofx5, a, kkki | |||
kfund,kvowel,koct,ivoice xin | |||
ivoice limit ivoice,0,4 ;protect against out of range values for ivoice | |||
;create a macro for each formant to reduce code repetition | |||
#define FORMANT(N) | |||
# | |||
invals table 0, giBF1+(ivoice*15)+$N-1 ;number of data elements in each table | |||
invals = invals-1 ; | |||
k$Nform tablei 1+(kvowel*invals), giBF1+(ivoice*15)+$N-1 ;read formant frequency from table | |||
kRandForm$N randomi -0.025,0.025,8,1 | |||
k$Nform = k$Nform*octave(kRandForm$N) | |||
k$Ndb tablei 1+(kvowel*invals), giBDb1+(ivoice*15)+$N-1 ;read decibel value from table | |||
k$Namp = ampdb(k$Ndb) ;convert to an amplitude value | |||
k$Nband tablei 1+(kvowel*invals), giBBW1+(ivoice*15)+$N-1 ;read bandwidth from table | |||
# | |||
;EXECUTE MACRO MULTIPLE TIMES | |||
$FORMANT(1) | |||
$FORMANT(2) | |||
$FORMANT(3) | |||
$FORMANT(4) | |||
$FORMANT(5) | |||
;====================================================================================================================================================================== | |||
iris = 0.003 ;grain pulse rise time | |||
idur = 0.02 ;grain pulse duration | |||
idec = 0.007 ;grain pulse decay | |||
iolaps = 14850 ;maximum number of overlaps (overestimate) | |||
ifna = gisine ;function table for audio contained within fof grains | |||
ifnb = giexp ;function table that defines the attack and decay shapes of each fof grain | |||
itotdur = 3600 ;total maximum duration of a note (overestimate) | |||
;FOF=================================================================================================================================================================== | |||
iRandRange = .1 | |||
#define RandFact | |||
# | |||
kRndFact rspline -iRandRange,iRandRange,1,10 | |||
kRndFact = semitone(kRndFact) | |||
# | |||
$RandFact | |||
a1 fof k1amp, kfund*kRndFact, k1form, koct, k1band, iris, idur, idec, iolaps, ifna, ifnb, itotdur | |||
a2 fof k2amp, kfund*kRndFact, k2form, koct, k2band, iris, idur, idec, iolaps, ifna, ifnb, itotdur | |||
a3 fof k3amp, kfund*kRndFact, k3form, koct, k3band, iris, idur, idec, iolaps, ifna, ifnb, itotdur | |||
a4 fof k4amp, kfund*kRndFact, k4form, koct, k4band, iris, idur, idec, iolaps, ifna, ifnb, itotdur | |||
a5 fof k5amp, kfund*kRndFact, k5form, koct, k5band, iris, idur, idec, iolaps, ifna, ifnb, itotdur | |||
;====================================================================================================================================================================== | |||
;OUT=================================================================================================================================================================== | |||
asig = (a1+a2+a3+a4+a5)/5 ;mix the five fof streams and reduce amplitude five-fold | |||
xout asig ;send audio back to caller instrument | |||
endop | |||
opcode ChoVoice,a,kkiii | |||
kDtnDep,kDtnRte,ifn,icount,invoices xin ;read in input args. | |||
ktime randomi 0.01,0.1*kDtnDep,kDtnRte,1 ;create delay time value (linearly interpolating random function will implement pitch/time modulations) | |||
kptime linseg 0,0.001,1 ;portamento time (ramps up quickly from zero to a held value) | |||
ktime portk ktime,kptime ;apply portamento smoothing to delay time changes (prevents angular pitch changes) | |||
atime interp ktime ;create an interpolated a-rate version of delay time function (this will prevent qualtisation artifacts) | |||
atap deltapi atime+0.0015 ;tap the delay buffer (nb. buffer opened and closed in caller instrument, UDO exists within the buffer) | |||
iDel random ksmps/sr,0.2 ;random fixed delay time. By also apply a fixed delay time we prevent excessive amplitude at ote onsets when many chorus voices (N.Voices) are used | |||
atap delay atap,iDel ;apply fixed delay | |||
amix init 0 ;initialise amix variable (needed incase N.Voices is 1 in which case recirsion would not be used) | |||
if icount<invoices then ;if stack of chorus voices is not yet completed... | |||
amix ChoVoice kDtnDep,kDtnRte,ifn,icount+1,invoices ;.. call the UDO again. Increment count number. | |||
endif | |||
xout atap+amix ;send chorus voice created in this interation (and all subsequent voices) back to caller instrument | |||
endop | |||
instr 1 ;instrument that continuously scans widgets | |||
gkmonopoly chnget "monopoly" ;read widgets... | |||
gkDtnDep chnget "DtnDep" | |||
gkDtnRte chnget "DtnRte" | |||
gkvibdep chnget "vibdep" | |||
gkmodrte chnget "modrte" | |||
gktrmdep chnget "trmdep" | |||
gklevel chnget "lev" | |||
gkvowel chnget "vowel" | |||
gkoct chnget "oct" | |||
gkLegTim chnget "LegTim" | |||
gkRvbMix chnget "RvbMix" | |||
gkRvbSize chnget "RvbSize" | |||
kporttime linseg 0,0.001,0.1 ;portamento time (ramps up quickly from zero to a held value) | |||
gkvowel portk gkvowel,kporttime ;apply portamento smoothing | |||
gkoct portk gkoct,kporttime | |||
gkFiltOnOff chnget "FiltOnOff" | |||
gkcf chnget "cf" | |||
gkbw chnget "bw" | |||
gkcf portk cpsoct(gkcf),kporttime ;apply portamento smoothing | |||
gkbw portk gkbw*gkcf,kporttime ;apply portamento smoothing | |||
endin | |||
instr 2 ;triggered via MIDI | |||
gkNoteTrig init 1 ;at the beginning of a new note set note trigger flag to '1' | |||
icps cpsmidi ;read in midi note pitch in cycles per second | |||
givel veloc 0,1 ;read in midi note velocity | |||
gkcps = icps ;update a global krate variable for note pitch | |||
if i(gkmonopoly)==0 then ;if we are *not* in legato mode... | |||
inum notnum ; read midi note number (0 - 127) | |||
event_i "i",p1+1+(inum*0.001),0,-1,icps ; call soud producing instr | |||
krel release ; release flag (1 when note is released, 0 otherwise) | |||
if krel==1 then ; when note is released... | |||
turnoff2 p1+1+(inum*0.001),4,1 ; turn off the called instrument | |||
endif ; end of conditional | |||
else ;otherwise... (i.e. legato mode) | |||
iactive active p1+1 ;check to see if these is already a note active... | |||
if iactive==0 then ;...if not... | |||
event_i "i",p1+1,0,-1 ;...start a new held note | |||
endif | |||
endif | |||
endin | |||
instr 3 | |||
ivoice chnget "voice" ;read widgets... | |||
imoddel chnget "moddel" ; | |||
imodris chnget "modris" ; | |||
invoices chnget "nvoices" ; | |||
kporttime linseg 0,0.001,1 ;portamento time function rises quickly from zero to a held value | |||
kporttime = kporttime*gkLegTim ;scale portamento time function with value from GUI knob widget | |||
if i(gkmonopoly)==1 then ;if we are in legato mode... | |||
kcps portk gkcps,kporttime ;apply portamento smooth to changes in note pitch (this will only have an effect in 'legato' mode) | |||
kactive active p1-1 ;...check number of active midi notes (previous instrument) | |||
if kactive==0 then ;if no midi notes are active... | |||
turnoff ;... turn this instrument off | |||
endif | |||
else ;otherwise... (polyphonic / non-legato mode) | |||
kcps = p4 ;pitch equal to the original note pitch | |||
endif | |||
if gkNoteTrig==1&&gkmonopoly==1 then ;if a new note is beginning and if we are in monophonic mode... | |||
reinit RESTART_ENVELOPE ;reinitialise the modulations build up | |||
endif | |||
RESTART_ENVELOPE: | |||
;VIBRATO (PITCH MODULATION) | |||
kmodenv linseg 0,0.001+imoddel,0,0.001+imodris,1 ;modulation depth envelope - modulation can be delayed by the first envelope segement and the rise time is defined by the duration of the second segment | |||
kDepVar randomi 0.5,1,4 ;random variance of the depth of modulation | |||
kmodenv portk kmodenv*kDepVar,kporttime ;smooth changes in modulation envelope to prevent discontinuities whnever the envelope is restarted | |||
rireturn | |||
kRteVar randi 0.1,4 ;random variation of the rate of modulation | |||
kvib lfo gkvibdep*kmodenv,gkmodrte*octave(kRteVar),0 ;vibrato function | |||
;TREMOLO (AMPLITUDE MODULATION) | |||
ktrem lfo kmodenv*(gktrmdep/2),gkmodrte*octave(kRteVar),0 ;TREMOLO LFO FUNCTION | |||
ktrem = (ktrem+0.5) + (gktrmdep * 0.5) ;OFFSET AND RESCALE TREMOLO FUNCTION ACCORDING TO TREMOLO DEPTH WIDGET SETTING | |||
iRelTim = 0.05 | |||
kCpsAtt expsegr 0.6,rnd(0.004)+0.001,1,iRelTim,1-rnd(0.05) ;a little jump in pitch at the beginning of a note will give the note a realistic attack sound. This will be most apparent when note velocity is high. And a little gliss at the end of notes. | |||
kcpsRnd gaussi 1,0.01,10 ;create a function that will be used to apply naturalistic pitch instability | |||
kcps = kcps*(1+kcpsRnd) ;apply pitch instability | |||
asig fofx5 kcps*semitone(kvib)*kCpsAtt, gkvowel, gkoct, ivoice-1 ;CALL fofx5 UDO | |||
if gkFiltOnOff==1 then | |||
asig reson asig,gkcf,gkbw,1 ;parametric EQ | |||
endif | |||
aatt linseg 0,(0.3*(1-givel)*(invoices^0.8))+0.01,1 ;AMPLITUDE ENVELOPE - ATTACK TIME IS INFLUENCED BY KEY VELOCITY | |||
asig = asig*aatt*ktrem*(0.3+givel*0.7)*gklevel ;APPLY AMPLITUDE CONTROLS: ENVELOPE, TREMOLO, KEY VELOCITY AND LEVEL | |||
/*CHORUS*/ | |||
if invoices>1 then | |||
abuf delayr 2 ;--left channel-- | |||
amixL ChoVoice gkDtnDep,gkDtnRte,gisine,1,invoices ;call UDO | |||
delayw asig | |||
abuf delayr 2 ;--right channel-- | |||
amixR ChoVoice gkDtnDep,gkDtnRte,gisine,1,invoices ;call UDO | |||
delayw asig | |||
asigL = amixL/(invoices^0.5) ;scale mix of chorus voices according to the number of voices... | |||
asigR = amixR/(invoices^0.5) ;...and the right channel | |||
else ;otherwise... (N.Voices = 1) | |||
asigL = asig ;send mono signal to both channels | |||
asigR = asig | |||
endif | |||
arel linsegr 1,iRelTim,0 ;release envelope | |||
asigL = asigL*arel ;apply release envelope | |||
asigR = asigR*arel | |||
kwet limit 2*gkRvbMix,0,1 ;wet (reverb) level control (reaches maximum a knob halfway point and hold that value for the remainder of its travel) | |||
gasendL = gasendL+asigL*kwet ;send some audio to the reverb instrument | |||
gasendR = gasendR+asigR*kwet | |||
kdry limit 2*(1-gkRvbMix),0,1 ;dry level (stays at maximum for the first half of the knob's travel then ramps down to zero for the remainder of its travel) | |||
outs asigL*kdry,asigR*kdry ;SEND AUDIO TO OUTPUT | |||
gkNoteTrig = 0 ;reset new-note trigger (in case it was '1') | |||
endin | |||
instr Effects | |||
if gkRvbMix>0 then | |||
aL,aR reverbsc gasendL,gasendR,gkRvbSize,12000 ;create stereo reverb signal | |||
outs aL,aR ;send reverb signal to speakers | |||
clear gasendL,gasendR ;clear reverb send variables | |||
endif | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
f 0 [3600*24*7] | |||
i 1 0 [3600*24*7] ;read widgets | |||
i "Effects" 0 [3600*24*7] ;reverb | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,321 @@ | |||
Clavinet.csd - an emulation of the Hohner Clavinet D6 | |||
----------------------------------------------------- | |||
Pickup Selection | |||
---------------- | |||
CA - neck pickup only (pickup A) | |||
CB - bridge pickup only (pickup B) | |||
DA - both pickups in phase | |||
DB - bridge pickup (pickup B) 180 degrees out of phase w.r.t the neck pickup | |||
Setup | |||
----- | |||
Pick A - position of the first pickup (range 0 - 1). Typically referred to as the 'neck' pickup | |||
Pick B - position of the second pickup (range 0 - 1). Typically referred to as the 'bridge' pickup | |||
(NB. the relevant pickup has to be 'active' according to the CD AB switches in order for you to be able to here changes to it pickup position.) | |||
Mod.A - the pickup position can also modulated by an LFO. This control controls the depth of this modulation | |||
Mod.B - Depth of this modulation for the second pickup | |||
Rate A - Rate of modulation for the first pickup | |||
Rate B - Rate of modulation for the second pickup | |||
Env.A - The pickup position can be modulated by a simple single segment envelope. This is typically used to add an particualar attack nuance to the sound. This control controls the initial amplitude of this envelope (can be positive or negative). The envelope always ends at zero. | |||
Env.B - Envelope amplitude for the second pickup. | |||
Time A - Duration of the envelope segment for the first pickup | |||
Time B - Duration of the envelope segment for the second pickup | |||
Pluck - location of the 'pluck' (range 0 - 1). Should be close to zero for a typical clavinet behaviour | |||
Damp - string vibration damping that is applied while a note is being held. String damping is also dependent upon the note played using a 'key tracking' function table 'girefl'. In general lower notes should experience greater damping. | |||
HPF - this controls the cutoff frequency of a highpass filter that the signal passes through. | |||
The value supplied here is multiplied by the fundemental frequency of the note played to derive the cutoff frequency. | |||
Therefore if a value of '2' is supplied the cutoff will always by twice the fundemental, i.e. the frequency of the first harmonic/second partial. | |||
This control can be used to remove the emphasis of the fundemental partial. | |||
If this control is at its minimum setting the filter is bypassed. | |||
LPF - behaves in a similar way to HPF but in respect to a lowpass filter. This control, if reduced, can be used to soften the brightness of a note's attack. | |||
If this control is at its maximum setting the filter is bypassed. | |||
Inharm - applies inharmonicity to the spectrum produced by repluck. Negative values compress the spectrum, positive values expand the spectrum and zero leaves the spectrum unaffected. | |||
Release | |||
------- | |||
* Poorly maintained clavinets exhibit a release 'pluck' as the rubber pad which strikes and frets is lifted from the string when the key is released. The is on account of the rubber pad wearing out. | |||
Ampl - amplitude of the release 'pluck' | |||
Tone - a tone control applied to the release 'pluck' (this will also affect amplitude) | |||
D.Time - time it takes for full damping to be applied (this control has a subtle effect) | |||
Damp - amount of damping that is applied to string vibrations whenever a key is | |||
released (this amount of damping is achieved after 'D.Time' seconds). Note that the 'Damp' | |||
control in the 'Setup' pop-up panel also has an impact upon the release damping. | |||
A.Time - amplitude release time. If this is too short, vibration damping may not be heard and the above controls may not appear to do anything | |||
Filters | |||
------- | |||
The D6 Clavinet design incorporates four bandpass filters which can be switched in or out of the circuit. | |||
Emphasising four different frequency bands from high to low they are named 'brilliant', 'treble', 'medium' and 'soft' | |||
Cutoff frequencies (fco), levels and Q values for each of the four filters can be adjusted. | |||
Obviously the relevant filter has to be activated in order to be able to hear changes made to its settings. | |||
The four filters are in a parallel arrangement as opposed to being in series. | |||
<Cabbage> | |||
form caption("Clavinet"), size(550, 195), pluginID("clav"), colour(228,156,28) | |||
snapshot bounds(260, 46,200, 25), master(1), items("Clavinet 1", "Clavinet 2", "Clavinet 3", "Clavinet 4", "Clavinet 5", "Clavinet 6", "Clavinet 7", "Clavinet 8", "Clavinet 9", "Clavinet 10") | |||
; filter switches | |||
checkbox bounds( 10, 5, 70, 15), text("Brilliant") channel("brilliant"), FontColour(50,50,50), colour("lime") | |||
checkbox bounds( 10, 25, 70, 15), text("Treble") channel("treble"), FontColour(50,50,50), colour("lime"), value(1) | |||
checkbox bounds( 10, 45, 70, 15), text("Medium") channel("medium"), FontColour(50,50,50), colour("lime") | |||
checkbox bounds( 10, 65, 70, 15), text("Soft") channel("soft"), FontColour(50,50,50), colour("lime") | |||
; pickup configuration switches | |||
checkbox bounds( 80, 5, 70, 15), text("C/D") channel("C_D"), FontColour(50,50,50), colour("lime"), value(1) | |||
checkbox bounds( 80, 25, 70, 15), text("A/B") channel("A_B"), FontColour(50,50,50), colour("lime"), value(1) | |||
; controls pertaining to the setup of the instrument (pickup positions, pluck position, damping etc.) accessed in a pop-up panel | |||
groupbox bounds(150, 8, 172, 305), colour(228,156,28), plant("Setup), line(0), popup(1) | |||
{ | |||
rslider bounds( 5, 8, 55, 55), text("Pick A"), colour(195,126, 0), FontColour(50,50,50), channel("pickA"), range(0, 1.00, 0.25, 1, 0.001) | |||
rslider bounds( 55, 8, 55, 55), text("Pick B"), colour(195,126, 0), FontColour(50,50,50), channel("pickB"), range(0, 1.00, 0.07, 1, 0.001) | |||
rslider bounds( 5, 68, 55, 55), text("Mod A"), colour(225,156, 28), FontColour(50,50,50), channel("ModA"), range(0,0.50, 0.03, 0.5, 0.001) | |||
rslider bounds( 55, 68, 55, 55), text("Mod B"), colour(225,156, 28), FontColour(50,50,50), channel("ModB"), range(0,0.50, 0.03, 0.5, 0.001) | |||
rslider bounds( 5,128, 55, 55), text("Rate A"), colour(255,186, 58), FontColour(50,50,50), channel("RateA"), range(0,14.00, 0.2, 0.5, 0.001) | |||
rslider bounds( 55,128, 55, 55), text("Rate B"), colour(255,186, 58), FontColour(50,50,50), channel("RateB"), range(0,14.00, 0.15, 0.5, 0.001) | |||
rslider bounds( 5,188, 55, 55), text("Env.A"), colour(255,216, 88), FontColour(50,50,50), channel("EnvA"), range(-1, 1.00, 0) | |||
rslider bounds( 55,188, 55, 55), text("Env.B"), colour(255,216, 88), FontColour(50,50,50), channel("EnvB"), range(-1, 1.00, 0) | |||
rslider bounds( 5,248, 55, 55), text("Time A"), colour(255,246,118), FontColour(50,50,50), channel("TimeA"), range(0, 1.00, 0.05, 0.5, 0.001) | |||
rslider bounds( 55,248, 55, 55), text("Time B"), colour(255,246,118), FontColour(50,50,50), channel("TimeB"), range(0, 1.00, 0.05, 0.5, 0.001) | |||
line bounds(110, 25, 1, 260), colour( 50, 50, 50) | |||
rslider bounds(112, 8, 55, 55), text("Pluck"), colour(195,126, 0), FontColour(50,50,50), channel("plk"), range(0, 1.00, 0.005, 0.5, 0.0001) | |||
rslider bounds(112, 68, 55, 55), text("Damp"), colour(225,156, 28), FontColour(50,50,50), channel("SusDamp"), range(-1.00, 1.00, 0) | |||
rslider bounds(112,128, 55, 55), text("HPF"), colour(255,186, 58), FontColour(50,50,50), channel("HPF"), range(0,16.0, 0) | |||
rslider bounds(112,188, 55, 55), text("LPF"), colour(255,216, 88), FontColour(50,50,50), channel("LPF"), range(1.0,72, 72, 0.375, 0.0001) | |||
rslider bounds(112,248, 55, 55), text("Inharm."),colour(255,216, 88), FontColour(50,50,50), channel("inharm"), range(-0.99,0.99, 0) | |||
} | |||
; controls pertaining to the release stage of a note accessed in a pop-up panel | |||
groupbox bounds(260, 8, 265, 65), colour(228,156,28), plant("Release"), line(0), popup(1) | |||
{ | |||
rslider bounds( 5, 8, 55, 55), text("Ampl."), colour(255,186,58), FontColour(50,50,50), channel("RelAmpl"), range(0, 20.00, 2) | |||
rslider bounds( 55, 8, 55, 55), text("Tone"), colour(255,186,58), FontColour(50,50,50), channel("RelTone"), range(100, 8000, 1000) | |||
rslider bounds(105, 8, 55, 55), text("D.Time"), colour(255,186,58), FontColour(50,50,50), channel("RelDTime"), range(0.001, 1, 0.01, 0.5, 0.001) | |||
rslider bounds(155, 8, 55, 55), text("Damp"), colour(255,186,58), FontColour(50,50,50), channel("RelDamp"), range(0.10, 0.99, 0.95) | |||
rslider bounds(205, 8, 55, 55), text("A.Time"), colour(255,186,58), FontColour(50,50,50), channel("RelATime"), range(0.01,20, 0.05, 0.5, 0.01) | |||
} | |||
; controls pertaining to the setup of the instrument's bandpass filters accessed in a pop-up panel | |||
groupbox bounds(150, 46, 230, 195), colour(228,156,28), plant("Filters"), line(0), popup(1) | |||
{ | |||
label bounds( 10, 5, 60, 12), text("Brilliant"), colour("white"), FontColour(50,50,50) | |||
label bounds( 69, 5, 60, 12), text("Treble"), colour("white"), FontColour(50,50,50) | |||
label bounds(121, 5, 60, 12), text("Medium"), colour("white"), FontColour(50,50,50) | |||
label bounds(185, 5, 60, 12), text("Soft"), colour("white"), FontColour(50,50,50) | |||
checkbox bounds( 26, 18, 10, 10), channel("brilliant"), colour("lime"), value(0), shape("ellipse") | |||
checkbox bounds( 81, 18, 10, 10), channel("treble"), colour("lime"), value(0), shape("ellipse") | |||
checkbox bounds(136, 18, 10, 10), channel("medium"), colour("lime"), value(0), shape("ellipse") | |||
checkbox bounds(191, 18, 10, 10), channel("soft"), colour("lime"), value(0), shape("ellipse") | |||
rslider bounds( 5, 30, 55, 55), channel("fco1"), text("fco.1"), colour(235,166,38), FontColour(50,50,50), range(50,5000,2500,0.5) | |||
rslider bounds( 60, 30, 55, 55), channel("fco2"), text("fco.2"), colour(235,166,38), FontColour(50,50,50), range(50,5000,1000,0.5) | |||
rslider bounds(115, 30, 55, 55), channel("fco3"), text("fco.3"), colour(235,166,38), FontColour(50,50,50), range(50,5000, 500,0.5) | |||
rslider bounds(170, 30, 55, 55), channel("fco4"), text("fco.4"), colour(235,166,38), FontColour(50,50,50), range(50,5000, 200,0.5) | |||
rslider bounds( 5, 85, 55, 55), channel("gain1"), text("Gain 1"), colour(255,216,88), FontColour(50,50,50), range(0.50,30, 3,0.5) | |||
rslider bounds( 60, 85, 55, 55), channel("gain2"), text("Gain 2"), colour(255,216,88), FontColour(50,50,50), range(0.50,30,2.3,0.5) | |||
rslider bounds(115, 85, 55, 55), channel("gain3"), text("Gain 3"), colour(255,216,88), FontColour(50,50,50), range(0.50,30,1.3,0.5) | |||
rslider bounds(170, 85, 55, 55), channel("gain4"), text("Gain 4"), colour(255,216,88), FontColour(50,50,50), range(0.50,30,1.4,0.5) | |||
rslider bounds( 5,140, 55, 55), channel("Q1"), text("Q 1"), colour(255,255,138), FontColour(50,50,50), range(0.50,30,1.25,0.5) | |||
rslider bounds( 60,140, 55, 55), channel("Q2"), text("Q 2"), colour(255,255,138), FontColour(50,50,50), range(0.50,30,1 ,0.5) | |||
rslider bounds(115,140, 55, 55), channel("Q3"), text("Q 3"), colour(255,255,138), FontColour(50,50,50), range(0.50,30,1 ,0.5) | |||
rslider bounds(170,140, 55, 55), channel("Q4"), text("Q 4"), colour(255,255,138), FontColour(50,50,50), range(0.50,30,2 ,0.5) | |||
line bounds( 59, 25, 1, 150), colour(50,50,50) | |||
line bounds(114, 25, 1, 150), colour(50,50,50) | |||
line bounds(169, 25, 1, 150), colour(50,50,50) | |||
} | |||
rslider bounds(470, 5, 75, 75), text("Level"), colour(255,186,58), FontColour(50,50,50), channel("level"), range(0, 8.00, 0.5, 0.5) | |||
keyboard bounds(10, 85, 530,80) | |||
image bounds(5, 170, 420, 20), colour(75, 85, 90, 50), plant("credit"){ | |||
label bounds(0.03, 0.1, .6, .7), text("Author: Iain McCurdy |2013|"), colour("white"), FontColour(50,50,50) | |||
} | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-dm0 -n -+rtmidi=null -M0 | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 16 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
; table used to map of note played to bridge relection | |||
girefl ftgen 0,0,128,-27, 0,0.4, 36,0.4, 72,0.01, 127,0.01 | |||
gisine ftgen 0,0,4096,10,1 | |||
gitri ftgen 0,0,4096,7,0,1024,1,2046,-1,1024,0 | |||
opcode FreqShifter,a,aki | |||
ain,kfshift,ifn xin ;READ IN INPUT ARGUMENTS | |||
areal, aimag hilbert ain ;HILBERT OPCODE OUTPUTS TWO PHASE SHIFTED SIGNALS, EACH 90 OUT OF PHASE WITH EACH OTHER | |||
asin oscili 1, kfshift, ifn, 0 | |||
acos oscili 1, kfshift, ifn, 0.25 | |||
;RING MODULATE EACH SIGNAL USING THE QUADRATURE OSCILLATORS AS MODULATORS | |||
amod1 = areal * acos | |||
amod2 = aimag * asin | |||
;UPSHIFTING OUTPUT | |||
aFS = (amod1 - amod2) | |||
xout aFS ;SEND AUDIO BACK TO CALLER INSTRUMENT | |||
endop | |||
instr 1 | |||
ibrilliant chnget "brilliant" ; filter switch | |||
itreble chnget "treble" ; filter switch | |||
imedium chnget "medium" ; filter switch | |||
isoft chnget "soft" ; filter switch | |||
iC_D chnget "C_D" ; single/dual pickup selector | |||
iA_B chnget "A_B" ; neck/bridge pickup selector | |||
gklevel chnget "level" ; output volume control | |||
icps cpsmidi ; cps read from midi | |||
inum notnum ; note number read from midi | |||
ivel veloc 0,1 ; velocity read from midi | |||
; pluck position is an i-rate variable so a mechanism is created to re-initialise the instrument if it is changed in realtime | |||
kplk chnget "plk" ; pluck position | |||
ktrig changed kplk ; if GUI knob changes, generate a trigger | |||
if ktrig==1 then ; if triggered... | |||
reinit UPDATE ; reinitialise... | |||
endif | |||
UPDATE: ; ...from here (until the end of the instrument) | |||
iplk = i(kplk) ; cast k-rate pluck position to i-rate variable | |||
; pickup positions | |||
kpickA chnget "pickA" ; neck pickup position | |||
kpickB chnget "pickB" ; bridge pickup position | |||
; string vibration damping / reflectivity | |||
irefl table inum,girefl ; read reflectivity for this note from function table (lower notes will experience more damping) | |||
iRelDTime chnget "RelDTime" ; release damping time: time for damping state to be established | |||
iRelDamp chnget "RelDamp" ; amount of damping upon release | |||
krefl linsegr irefl,iRelDTime,iRelDamp ; upon note release vibrations are damped quickly and dramatically | |||
kSusDamp chnget "SusDamp" ; user controlled modulation of string vibration damping | |||
krefl limit krefl+kSusDamp,0.001,0.999 ; consolidate reflection/damping value and limit possible values to prevent out of range values | |||
iamp = ivel*0.3 | |||
kenv expseg 1, 0.01,0.001,1,0.001 ; create an amplitude envelope for the noise burst | |||
axcite pinkish kenv-0.001 ; create a pink noise signal | |||
axcite tone axcite,icps*2 | |||
krelease release ; sense release of note | |||
iRelAmpl chnget "RelAmpl" ; release pluck amplitude | |||
iRelTone chnget "RelTone" ; tone of the release pluck | |||
if krelease==1 then ; if key is released... | |||
axcite mpulse iRelAmpl,0 ; audio impulse is created as an implementation of the release pluck impulse | |||
axcite butlp axcite,iRelTone ; lowpass filter the impulse | |||
endif | |||
kModA chnget "ModA" ; pickup position modulation depth | |||
kModB chnget "ModB" | |||
kRateA chnget "RateA" ; pickup position modulation rate | |||
kRateB chnget "RateB" | |||
iEnvA chnget "EnvA" ; pickup position envelope modulation depth | |||
iEnvB chnget "EnvB" | |||
iTimeA chnget "TimeA" ; pickup position envelope modulation time | |||
iTimeB chnget "TimeB" | |||
kenv1 transeg iEnvA,iTimeA,-4,0 ; envelope applied to the pickup position (pickup A) | |||
kenv2 transeg iEnvB,iTimeB,-4,0 ; envelope applied to the pickup position (pickup B) | |||
kmod1 oscili kModA,kRateA,gitri ; lfo used to modulate pickup position (pickup A) | |||
kmod2 oscili kModB,kRateB,gitri ; lfo used to modulate pickup position (pickup B) | |||
kpickA limit kpickA + kmod1 + kenv1, 0, 1 ; consolidate pickup position between fixed value, lfo and envelope. Also protect against out of range values. (pickup A) | |||
kpickB limit kpickB + kmod2 + kenv2, 0, 1 ; consolidate pickup position between fixed value, lfo and envelope. Also protect against out of range values. (pickup B) | |||
iinharm chnget "inharm" ; inharmonicity of the tone. negative values compress the spectrum, positive values expand it. Compensation will be applied to the fundemental so that it will remain consistent. | |||
iFShift = icps*iinharm ; amount of frequency shift (in CPS) | |||
a1 repluck iplk, iamp, icps-iFShift, kpickA, krefl, axcite ; employ plucked string model (pickup A) | |||
a2 repluck iplk, iamp, icps-iFShift, kpickB, krefl, axcite ; employ plucked string model (pickup B) | |||
if(iinharm!=0) then ; only apply frequency shifting if inharmonicity is anything other than zero | |||
a1 FreqShifter a1,iFShift,gisine ; call frequency shifting UDO | |||
a2 FreqShifter a2,iFShift,gisine | |||
endif | |||
if(iC_D==0&&iA_B==0) then ;CA - neck pickup only | |||
asig = a1 | |||
elseif(iC_D==0&&iA_B==1) then ;CB - bridge pickup only | |||
asig = a2 | |||
elseif(iC_D==1&&iA_B==0) then ;DA - both pickups in phase | |||
asig = a1 + a2 | |||
elseif(iC_D==1&&iA_B==1) then ;DB - both pickups. Pickup B 180 degrees out of phase | |||
asig = a1 - a2 | |||
endif | |||
; velocity to brightness | |||
icf = (ivel*6)+8 ; cutoff frequency in 'oct' format | |||
asig butlp asig,cpsoct(icf) ; lowpass filter audio signal | |||
; filter switches | |||
kfco1 chnget "fco1" ; filter cutoffs | |||
kfco2 chnget "fco2" | |||
kfco3 chnget "fco3" | |||
kfco4 chnget "fco4" | |||
kQ1 chnget "Q1" ; filter q's | |||
kQ2 chnget "Q2" | |||
kQ3 chnget "Q3" | |||
kQ4 chnget "Q4" | |||
kgain1 chnget "gain1" ; filter gains | |||
kgain2 chnget "gain2" | |||
kgain3 chnget "gain3" | |||
kgain4 chnget "gain4" | |||
; filters | |||
amix = 0 ; audio mix of filter outputs (reset to silence upon each iteration) | |||
if(ibrilliant==1) then ; if 'brilliant' selected... | |||
afilt rbjeq asig, kfco1, 1, kQ1, 1, 4 ; bandpass filter sound | |||
amix = amix + (afilt * kgain1) ; add a scaled amount of filtered signal to filter mix signal | |||
endif | |||
if(itreble==1) then ; if 'treble' selected... | |||
afilt rbjeq asig, kfco2, 1, kQ2, 1, 4 ; bandpass filter sound | |||
amix = amix + (afilt * kgain2) ; add a scaled amount of filtered signal to filter mix signal | |||
endif | |||
if(imedium==1) then ; if 'medium' selected... | |||
afilt rbjeq asig, kfco3, 1, kQ3, 1, 4 ; bandpass filter sound | |||
amix = amix + (afilt * kgain3) ; add a scaled amount of filtered signal to filter mix signal | |||
endif | |||
if(isoft==1) then ; if 'soft' selected... | |||
afilt rbjeq asig, kfco4, 1, kQ4, 1, 4 ; bandpass filter sound | |||
amix = amix + (afilt * kgain4) ; add a scaled amount of filtered signal to filter mix signal | |||
endif | |||
if((ibrilliant + itreble + imedium + isoft)==0) then ; if no filters selected... | |||
amix = asig ; ...just send unfiltered audio to filter section output | |||
endif | |||
; key following highpass filter | |||
kHPF chnget "HPF" ; highpass filter multiple | |||
if kHPF>0 then ; if HPF control is greater than 1... | |||
kcf limit icps*kHPF,20,sr/2 ; prevent out of range values which would cause the filter to 'blow up' | |||
amix buthp amix,kcf ; filter tone relative to note fundemental | |||
endif | |||
; key following lowpass filter | |||
kLPF chnget "LPF" ; lowpass filter multiple | |||
if kLPF<72 then ; if LPF control is greater than 1... | |||
kcf limit icps*kLPF,20,sr/2 ; prevent out of range values which would cause the filter to 'blow up' | |||
amix butlp amix,kcf ; filter tone relative to note fundemental | |||
endif | |||
; release envelope | |||
iRelATime chnget "RelATime" ; amplitude release time | |||
aenv linsegr 1, iRelATime, 0 ; amplitude release envelope (senses key release before entering final/only segment) | |||
; output signal | |||
aout = amix * aenv * gklevel ; apply release envelope and level control | |||
outs aout, aout ; send audio to outputs | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
f 0 [60*60*24*7] ; keep performance going for up to a week | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,461 @@ | |||
------------------------ Instrument ID: | |||
-------- Start of Preset: Clavinet 1 | |||
brilliant: 0 | |||
treble: 1 | |||
medium: 0 | |||
soft: 0 | |||
C_D: 1 | |||
A_B: 1 | |||
pickA: 0.25 | |||
pickB: 0.0700000003 | |||
ModA: 0.0300000012 | |||
ModB: 0.0300000012 | |||
RateA: 0.200000003 | |||
RateB: 0.150000006 | |||
EnvA: 0 | |||
EnvB: 0 | |||
TimeA: 0.0500000007 | |||
TimeB: 0.0500000007 | |||
plk: 0.00499999989 | |||
SusDamp: 0 | |||
HPF: 0 | |||
LPF: 72 | |||
inharm: 0 | |||
RelAmpl: 2 | |||
RelTone: 1000 | |||
RelDTime: 0.0100000007 | |||
RelDamp: 0.949999988 | |||
RelATime: 0.049999997 | |||
brilliant: 0 | |||
treble: 1 | |||
medium: 0 | |||
soft: 0 | |||
fco1: 2500 | |||
fco2: 1000 | |||
fco3: 500 | |||
fco4: 200 | |||
gain1: 3 | |||
gain2: 2.29999995 | |||
gain3: 1.29999995 | |||
gain4: 1.39999998 | |||
Q1: 1.25 | |||
Q2: 1 | |||
Q3: 1 | |||
Q4: 2 | |||
level: 0.5 | |||
-------- End of Preset: Clavinet 1 | |||
-------- Start of Preset: Clavinet 2 | |||
brilliant: 0 | |||
treble: 0 | |||
medium: 1 | |||
soft: 0 | |||
C_D: 1 | |||
A_B: 0 | |||
pickA: 0.938000023 | |||
pickB: 0.0500000007 | |||
ModA: 0.0300000012 | |||
ModB: 0.0300000012 | |||
RateA: 0.200000003 | |||
RateB: 0.150000006 | |||
EnvA: 0 | |||
EnvB: 0 | |||
TimeA: 0.0500000007 | |||
TimeB: 0.0500000007 | |||
plk: 0.165399998 | |||
SusDamp: 0.50999999 | |||
HPF: 0 | |||
LPF: 39.6390991 | |||
inharm: 0 | |||
RelAmpl: 0 | |||
RelTone: 1000 | |||
RelDTime: 0.0100000007 | |||
RelDamp: 0.359999985 | |||
RelATime: 4.01999998 | |||
brilliant: 0 | |||
treble: 0 | |||
medium: 1 | |||
soft: 0 | |||
fco1: 2500 | |||
fco2: 1000 | |||
fco3: 500 | |||
fco4: 200 | |||
gain1: 3 | |||
gain2: 2.29999995 | |||
gain3: 1.29999995 | |||
gain4: 1.39999998 | |||
Q1: 1.25 | |||
Q2: 1 | |||
Q3: 1 | |||
Q4: 2 | |||
level: 0.925000072 | |||
-------- End of Preset: Clavinet 2 | |||
-------- Start of Preset: Clavinet 3 | |||
brilliant: 0 | |||
treble: 0 | |||
medium: 1 | |||
soft: 0 | |||
C_D: 1 | |||
A_B: 0 | |||
pickA: 0.120000005 | |||
pickB: 0.252000004 | |||
ModA: 0.0300000012 | |||
ModB: 0.0300000012 | |||
RateA: 0.200000003 | |||
RateB: 0.150000006 | |||
EnvA: 0 | |||
EnvB: 0 | |||
TimeA: 0.0500000007 | |||
TimeB: 0.0500000007 | |||
plk: 0.00079999998 | |||
SusDamp: 0.0799999759 | |||
HPF: 2.04999995 | |||
LPF: 8.57209969 | |||
inharm: -0.50999999 | |||
RelAmpl: 2.15999985 | |||
RelTone: 2358.80005 | |||
RelDTime: 0.0650000051 | |||
RelDamp: 0.300000012 | |||
RelATime: 8 | |||
brilliant: 0 | |||
treble: 0 | |||
medium: 1 | |||
soft: 0 | |||
fco1: 2500 | |||
fco2: 1000 | |||
fco3: 500 | |||
fco4: 200 | |||
gain1: 3 | |||
gain2: 2.29999995 | |||
gain3: 1.29999995 | |||
gain4: 1.39999998 | |||
Q1: 1.25 | |||
Q2: 1 | |||
Q3: 1 | |||
Q4: 2 | |||
level: 1.21700001 | |||
-------- End of Preset: Clavinet 3 | |||
-------- Start of Preset: Clavinet 4 | |||
brilliant: 0 | |||
treble: 1 | |||
medium: 0 | |||
soft: 0 | |||
C_D: 1 | |||
A_B: 0 | |||
pickA: 0.530000031 | |||
pickB: 0.462000012 | |||
ModA: 0.0300000012 | |||
ModB: 0.0300000012 | |||
RateA: 0.200000003 | |||
RateB: 0.150000006 | |||
EnvA: 0 | |||
EnvB: 0 | |||
TimeA: 0.0500000007 | |||
TimeB: 0.0500000007 | |||
plk: 0.269099981 | |||
SusDamp: -1 | |||
HPF: 0 | |||
LPF: 25.2099991 | |||
inharm: 0 | |||
RelAmpl: 2 | |||
RelTone: 1000 | |||
RelDTime: 0.0100000007 | |||
RelDamp: 0.879999995 | |||
RelATime: 0.049999997 | |||
brilliant: 0 | |||
treble: 1 | |||
medium: 0 | |||
soft: 0 | |||
fco1: 2500 | |||
fco2: 1000 | |||
fco3: 500 | |||
fco4: 200 | |||
gain1: 3 | |||
gain2: 2.29999995 | |||
gain3: 1.29999995 | |||
gain4: 1.39999998 | |||
Q1: 1.25 | |||
Q2: 1 | |||
Q3: 1 | |||
Q4: 2 | |||
level: 0.5 | |||
-------- End of Preset: Clavinet 4 | |||
-------- Start of Preset: Clavinet 5 | |||
brilliant: 0 | |||
treble: 1 | |||
medium: 0 | |||
soft: 1 | |||
C_D: 0 | |||
A_B: 1 | |||
pickA: 0.398000032 | |||
pickB: 0.522000015 | |||
ModA: 0.0300000012 | |||
ModB: 0.0300000012 | |||
RateA: 0.200000003 | |||
RateB: 0.150000006 | |||
EnvA: 0 | |||
EnvB: 0 | |||
TimeA: 0.0500000007 | |||
TimeB: 0.0500000007 | |||
plk: 0.285899997 | |||
SusDamp: 0.0999999791 | |||
HPF: 0 | |||
LPF: 31.4514999 | |||
inharm: 0 | |||
RelAmpl: 0 | |||
RelTone: 1000 | |||
RelDTime: 0.0100000007 | |||
RelDamp: 0.579999983 | |||
RelATime: 3.91999984 | |||
brilliant: 0 | |||
treble: 1 | |||
medium: 0 | |||
soft: 1 | |||
fco1: 2500 | |||
fco2: 1000 | |||
fco3: 500 | |||
fco4: 200 | |||
gain1: 3 | |||
gain2: 2.29999995 | |||
gain3: 1.29999995 | |||
gain4: 1.39999998 | |||
Q1: 1.25 | |||
Q2: 1 | |||
Q3: 1 | |||
Q4: 2 | |||
level: 0.461000025 | |||
-------- End of Preset: Clavinet 5 | |||
-------- Start of Preset: Clavinet 6 | |||
brilliant: 0 | |||
treble: 1 | |||
medium: 0 | |||
soft: 0 | |||
C_D: 1 | |||
A_B: 1 | |||
pickA: 0.0940000042 | |||
pickB: 0.398000032 | |||
ModA: 0.0300000012 | |||
ModB: 0.0300000012 | |||
RateA: 0.200000003 | |||
RateB: 0.150000006 | |||
EnvA: 0 | |||
EnvB: 0 | |||
TimeA: 0.0500000007 | |||
TimeB: 0.0500000007 | |||
plk: 0.128700003 | |||
SusDamp: 0.299999982 | |||
HPF: 0 | |||
LPF: 72 | |||
inharm: 0 | |||
RelAmpl: 0 | |||
RelTone: 1000 | |||
RelDTime: 0.0100000007 | |||
RelDamp: 0.280000001 | |||
RelATime: 1.39999998 | |||
brilliant: 0 | |||
treble: 1 | |||
medium: 0 | |||
soft: 0 | |||
fco1: 2500 | |||
fco2: 1000 | |||
fco3: 500 | |||
fco4: 200 | |||
gain1: 3 | |||
gain2: 2.29999995 | |||
gain3: 1.29999995 | |||
gain4: 1.39999998 | |||
Q1: 1.25 | |||
Q2: 1 | |||
Q3: 1 | |||
Q4: 2 | |||
level: 0.5 | |||
-------- End of Preset: Clavinet 6 | |||
-------- Start of Preset: Clavinet 7 | |||
brilliant: 1 | |||
treble: 1 | |||
medium: 0 | |||
soft: 0 | |||
C_D: 1 | |||
A_B: 0 | |||
pickA: 0.00200000009 | |||
pickB: 0.950000048 | |||
ModA: 0.0300000012 | |||
ModB: 0.0300000012 | |||
RateA: 0.200000003 | |||
RateB: 0.150000006 | |||
EnvA: 0 | |||
EnvB: 0 | |||
TimeA: 0.0500000007 | |||
TimeB: 0.0500000007 | |||
plk: 0.128700003 | |||
SusDamp: 0.299999982 | |||
HPF: 3.46000004 | |||
LPF: 24.0676003 | |||
inharm: 0 | |||
RelAmpl: 0 | |||
RelTone: 1000 | |||
RelDTime: 0.0100000007 | |||
RelDamp: 0.280000001 | |||
RelATime: 3.32999992 | |||
brilliant: 1 | |||
treble: 1 | |||
medium: 0 | |||
soft: 0 | |||
fco1: 2500 | |||
fco2: 1000 | |||
fco3: 500 | |||
fco4: 200 | |||
gain1: 3 | |||
gain2: 2.29999995 | |||
gain3: 1.29999995 | |||
gain4: 1.39999998 | |||
Q1: 1.25 | |||
Q2: 1 | |||
Q3: 1 | |||
Q4: 2 | |||
level: 4.26300001 | |||
-------- End of Preset: Clavinet 7 | |||
-------- Start of Preset: Clavinet 8 | |||
brilliant: 1 | |||
treble: 1 | |||
medium: 0 | |||
soft: 0 | |||
C_D: 1 | |||
A_B: 0 | |||
pickA: 0.584000051 | |||
pickB: 0.450000018 | |||
ModA: 0.0300000012 | |||
ModB: 0.0300000012 | |||
RateA: 0.200000003 | |||
RateB: 0.150000006 | |||
EnvA: 0 | |||
EnvB: 0 | |||
TimeA: 0.0500000007 | |||
TimeB: 0.0500000007 | |||
plk: 0.23709999 | |||
SusDamp: 0.459999979 | |||
HPF: 1.46999991 | |||
LPF: 16.7103996 | |||
inharm: 0 | |||
RelAmpl: 0 | |||
RelTone: 1000 | |||
RelDTime: 0.0100000007 | |||
RelDamp: 0.140000001 | |||
RelATime: 3.58999991 | |||
brilliant: 1 | |||
treble: 1 | |||
medium: 0 | |||
soft: 0 | |||
fco1: 2500 | |||
fco2: 1000 | |||
fco3: 500 | |||
fco4: 200 | |||
gain1: 3 | |||
gain2: 2.29999995 | |||
gain3: 1.29999995 | |||
gain4: 1.39999998 | |||
Q1: 1.25 | |||
Q2: 1 | |||
Q3: 1 | |||
Q4: 2 | |||
level: 0.720000029 | |||
-------- End of Preset: Clavinet 8 | |||
-------- Start of Preset: Clavinet 9 | |||
brilliant: 1 | |||
treble: 0 | |||
medium: 0 | |||
soft: 0 | |||
C_D: 0 | |||
A_B: 0 | |||
pickA: 0.25 | |||
pickB: 0.0700000003 | |||
ModA: 0.0300000012 | |||