@@ -0,0 +1,33 @@ | |||
*~ | |||
*.a | |||
*.cdbs-orig | |||
*.dll | |||
*.dylib | |||
*.exe | |||
*.la | |||
*.o | |||
*.so | |||
*.so.* | |||
*.lv2 | |||
*.make | |||
Makefile | |||
object_script.*.Debug | |||
object_script.*.Release | |||
.directory | |||
.fuse* | |||
.svn | |||
.*.kate-swp | |||
.DS_Store | |||
.kdev_include_paths | |||
.kdev4 | |||
bin/lv2 | |||
bin/vst | |||
debian | |||
intermediate | |||
lv2_ttl_generator | |||
sdks/ASIOSDK2/* | |||
sdks/vstsdk2.4/* |
@@ -8,8 +8,20 @@ PREFIX = /usr | |||
all: | |||
$(MAKE) -C ports | |||
$(MAKE) gen | |||
# ----------------------------------------- | |||
# gen | |||
gen: gen_lv2 gen_vst | |||
gen_lv2: | |||
@./scripts/generate-cabbage-lv2.sh | |||
@./scripts/generate-ttl.sh | |||
gen_vst: | |||
@./scripts/generate-cabbage-vst.sh | |||
# ----------------------------------------- | |||
# install | |||
@@ -18,9 +30,13 @@ install: | |||
install -d $(DESTDIR)$(PREFIX)/lib/lv2/ | |||
install -d $(DESTDIR)$(PREFIX)/lib/vst/ | |||
# install ports | |||
# install plugins | |||
ifneq (,$(wildcard bin/lv2/TheFunction.lv2)) | |||
cp -r bin/lv2/*.lv2/ $(DESTDIR)$(PREFIX)/lib/lv2/ | |||
endif | |||
ifneq (,$(wildcard bin/vst/TheFunction.so)) | |||
cp -r bin/vst/* $(DESTDIR)$(PREFIX)/lib/vst/ | |||
endif | |||
# ----------------------------------------- | |||
# clean | |||
@@ -28,6 +44,19 @@ install: | |||
clean: | |||
$(MAKE) clean -C ports | |||
rm -rf bin/lv2/*.lv2/ | |||
rm -rf bin/lv2-extra/ | |||
rm -rf bin/vst-extra/ | |||
distclean: clean | |||
$(MAKE) distclean -C ports | |||
# ----------------------------------------- | |||
# Custom build types | |||
lv2: | |||
$(MAKE) -C ports lv2 | |||
$(MAKE) gen_lv2 | |||
vst: | |||
$(MAKE) -C ports vst | |||
$(MAKE) gen_vst |
@@ -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), trackercolour("tomato") | |||
rslider bounds( 80, 6, 90, 90), text("Tempo[BPM]"), channel("tempo"), range(6, 3000, 30, 0.5, 1), textBox(1), trackercolour("tomato") | |||
rslider bounds(175, 6, 90, 90), text("Depth"), channel("depth"), range(0, 1.00, 1, 0.5), textBox(1), trackercolour("tomato") | |||
rslider bounds(345, 6, 90, 90), text("Level"), channel("level"), range(0, 1.00, 1), textBox(1), trackercolour("tomato") | |||
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,134 @@ | |||
<Cabbage> | |||
form caption("Band Filter"), colour("DarkSlateGrey"), size(470, 360), pluginID("band") | |||
xypad bounds(5, 5, 350, 350), channel("cf", "bw"), rangex(0, 1, 0.5), rangey(0, 1, 0.3), text("x:cutoff | y:bandwidth"), colour("white") | |||
checkbox bounds(370, 10, 25, 25), channel("balance"), FontColour("white"), value(0) | |||
label bounds(400, 15, 80, 14), text("Balance"), FontColour("white") | |||
label bounds(375, 43, 85, 15), text("Filter Type"), FontColour("white") | |||
combobox bounds(370, 60,85, 20), channel("type"), value(1), text("reson", "butterbp", "areson", "butterbr") | |||
rslider bounds(368, 93, 90, 90), text("Mix"), fontcolour("white"), channel("mix"), range(0, 1.00, 1), trackercolour("white") | |||
rslider bounds(368,190, 90, 90), text("Level"), fontcolour("white"), channel("level"), range(0, 1.00, 1), trackercolour("white") | |||
rslider bounds(360,283, 50, 30), text("CF"), fontcolour("white"), TextBox(1), channel("cfDisp"), range(1, 20000, 1) | |||
rslider bounds(415,283, 50, 30), text("BW"), fontcolour("white"), TextBox(1), channel("bwDisp"), range(1, 20000, 1) | |||
image bounds(75, 343, 315, 18), colour(75, 85, 90, 100), plant("credit"), line(0){ | |||
} | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-dm0 -n -+rtmidi=null -M0 | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
;Author: Iain McCurdy (2012) | |||
instr 1 | |||
kcf chnget "cf" | |||
kbw chnget "bw" | |||
kbalance chnget "balance" | |||
rslider bounds(360,283, 50, 30), text("CF"), fontcolour("white"), TextBox(1), channel("cfDisp"), range(1, 20000, 1) | |||
rslider bounds(415,283, 50, 30), text("BW"), fontcolour("white"), TextBox(1), channel("bwDisp"), range(1, 20000, 1) | |||
image bounds(75, 343, 315, 18), colour(75, 85, 90, 100), plant("credit"), line(0){ | |||
} | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-dm0 -n -+rtmidi=null -M0 | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
;Author: Iain McCurdy (2012) | |||
instr 1 | |||
kcf chnget "cf" | |||
kbw chnget "bw" | |||
kbalance chnget "balance" | |||
rslider bounds(360,283, 50, 30), text("CF"), fontcolour("white"), TextBox(1), channel("cfDisp"), range(1, 20000, 1) | |||
rslider bounds(415,283, 50, 30), text("BW"), fontcolour("white"), TextBox(1), channel("bwDisp"), range(1, 20000, 1) | |||
image bounds(75, 343, 315, 18), colour(75, 85, 90, 100), plant("credit"), line(0){ | |||
} | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-dm0 -n -+rtmidi=null -M0 | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
;Author: Iain McCurdy (2012) | |||
instr 1 | |||
kcf chnget "cf" | |||
kbw chnget "bw" | |||
kbalance chnget "balance" | |||
ktype chnget "type" | |||
kmix chnget "mix" | |||
klevel chnget "level" | |||
kporttime linseg 0,0.001,0.05 | |||
kcf expcurve kcf, 4 | |||
kcf scale kcf,18000,20 | |||
kbw expcurve kbw, 16 | |||
kbw scale kbw,3,0.01 | |||
aL,aR ins | |||
;aL,aR diskin2 "seashore.wav",1,0,1 | |||
;aL pinkish 1 ;USE FOR TESTING | |||
;aR pinkish 1 | |||
kbw limit kbw*kcf,1,20000 | |||
chnset kcf,"cfDisp" ;send actual values for cutoff and bandwidth to GUI value boxes | |||
chnset kbw,"bwDisp" | |||
kcf portk kcf,kporttime | |||
kbw portk kbw,kporttime | |||
if ktype==1 then ;if reson chosen... | |||
aFiltL reson aL,kcf,kbw,1 | |||
aFiltR reson aR,kcf,kbw,1 | |||
elseif ktype==2 then ;or if butterworth bandpass is chosen | |||
aFiltL butbp aL,kcf,kbw | |||
aFiltR butbp aR,kcf,kbw | |||
elseif ktype==3 then ;or if areson is chosen... | |||
aFiltL areson aL,kcf,kbw,1 | |||
aFiltR areson aR,kcf,kbw,1 | |||
else ;otherwise must be butterworth band reject | |||
aFiltL butbr aL,kcf,kbw | |||
aFiltR butbr aR,kcf,kbw | |||
endif | |||
if kbalance==1 then ;if 'balance' switch is on... | |||
aFiltL balance aFiltL,aL,0.3 | |||
aFiltR balance aFiltR,aR,0.3 | |||
endif | |||
amixL ntrpol aL,aFiltL,kmix ;create wet/dry mix | |||
amixR ntrpol aR,aFiltR,kmix | |||
outs amixL*klevel,amixR*klevel | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [3600*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,284 @@ | |||
;BreakBeatCutter.csd | |||
;Iain McCurdy, 2013. | |||
; Break Beat Cut Up using the bbcut opcode with additional processing | |||
;==BBCUT========================================================================================================================== | |||
'Sub-division' determines the note duration used as the base unit in cut-ups. | |||
For example a value of 8 represents quavers (eighth notes), 16 represents semiquavers (sixteenth notes) and so on. | |||
'Bar Length' represents the number of beats per bar. For example, a value of 4 represents a 4/4 bar and so on. | |||
'Phrase' defines the number of bars that will elapse before the cutting up pattern restarts from the beginning. | |||
'Stutter' is a separate cut-up process which occasionally will take a very short fragment of the input audio and repeat | |||
it many times. | |||
'Stutter Speed' defines the duration of each stutter in relation to 'Sub-division'. | |||
If subdivision is 8 (quavers / eighth notes) and 'Stutter Speed' is 2 then each stutter will be a semiquaver / sixteenth note. | |||
'Stutter Chance' defines the frequency of stutter moments. | |||
The range for this parameter is 0 to 1. Zero means stuttering will be very unlikely, 1 means it will be very likely. | |||
'Repeats' defines the number of repeats that will be employed in normal cut-up events. | |||
When processing non-rhythmical, unmetered material it may be be more interesting to employ non-whole numbers for parameters such as 'Sub-division', 'Phrase' and 'Stutter Speed'. | |||
;======================================================================================================================== | |||
;==FILTER================================================================================================================ | |||
Additionally in this example a randomly moving band-pass filter has been implemented. | |||
'Filter Mix' crossfades between the unfiltered bbcut signal and the filtered bbcut signal. | |||
'Cutoff Freq.' consists of two small sliders which determine the range from which random cutoff values are derived. | |||
'Interpolate<=>S&H' fades continuously between an interpolated random function and a sample and hold type random function. | |||
'Filter Div.' controls the frequency subdivision with which new random cutoff frequency values are generated - a value of '1' means that new values are generated once every bar. | |||
;======================================================================================================================== | |||
;==WGUIDE================================================================================================================ | |||
A waveguide effect can randomly and rhythmically cut into the audio stream | |||
'Chance' defines the probability of this happening. 0=never 1=always | |||
The range of frequencies the effect will choose from is defined by the user as note values. | |||
Frequencies are quatised to adhere to equal temperament. | |||
;======================================================================================================================== | |||
;==SQUARE MOD. (Square wave ring modulation)============================================================================= | |||
This effect can similarly randomly and rhythmically cut into the audio stream using the 'chance' control | |||
The range of frequencies the modulator waveform can move between is defined as 'oct' values. | |||
;======================================================================================================================== | |||
;==F.SHIFT (Frequency Shifter)=========================================================================================== | |||
Similar to the above except using a frequency shifter effect. | |||
;======================================================================================================================== | |||
<Cabbage> | |||
form size(440,485), caption("Break Beat Cutter"), pluginID("bbct") | |||
snapshot bounds( 5,450,200, 25), preset("BreakBeatCutter"), master(1), items("Preset 1", "Preset 2", "Preset 3", "Preset 4", "Preset 5", "Preset 6", "Preset 7", "Preset 8", "Preset 9", "Preset 10") | |||
groupbox bounds( 0, 0,440,145), text("CUTTER"), plant("cutter"), FontColour(silver),colour(20,20,20){ | |||
rslider bounds( 10, 25, 70, 70), colour("Tan"), trackercolour("Tan"), fontcolour("silver"), text("Sub-div."), channel("subdiv"), range(1, 512, 8, 1, 1) | |||
rslider bounds( 80, 25, 70, 70), colour("Tan"), trackercolour("Tan"), fontcolour("silver"), text("Bar Length"), channel("barlen"), range(1, 16, 2, 1, 1) | |||
rslider bounds(150, 25, 70, 70), colour("Tan"), trackercolour("Tan"), fontcolour("silver"), text("Phrase"), channel("phrase"), range(1, 512, 8, 1, 1) | |||
rslider bounds(220, 25, 70, 70), colour("Tan"), trackercolour("Tan"), fontcolour("silver"), text("Repeats"), channel("repeats"), range(1, 32, 2, 1, 1) | |||
rslider bounds(290, 25, 70, 70), colour("Tan"), trackercolour("Tan"), fontcolour("silver"), text("Stut. Speed"), channel("stutspd"), range(1, 32, 4, 1, 1) | |||
rslider bounds(360, 25, 70, 70), colour("Tan"), trackercolour("Tan"), fontcolour("silver"), text("Stut. Chance"), channel("stutchnc"), range(0, 1.00, 0.5) | |||
hslider bounds( 5, 95,425, 40), colour("Tan"), trackercolour("Tan"), fontcolour("silver"), textBox(1) channel("BPM"), range(10, 500, 110,1,1) | |||
label bounds(198,127, 25, 11), text("BPM"), FontColour("silver") | |||
} | |||
groupbox bounds( 0,145,440,100), text("FILTER"), plant("filter"), FontColour(silver),colour(20,20,20){ | |||
rslider bounds( 10, 25, 70, 70), colour(200,100,50,255), trackercolour(200,100,50,255), fontcolour("silver"), text("Mix"), channel("FltMix"), range(0, 1.00, 0.6) | |||
rslider bounds( 80, 25, 70, 70), colour(200,100,50,255), trackercolour(200,100,50,255), fontcolour("silver"), text("Division"), channel("fltdiv"), range(1, 16, 1,1,1) | |||
rslider bounds(150, 25, 70, 70), colour(200,100,50,255), trackercolour(200,100,50,255), fontcolour("silver"), text("Bandwidth"), channel("bw"), range(0.1, 10, 1, 0.5, 0.001) | |||
hslider bounds(220, 25,140, 35), colour(200,100,50,255), trackercolour(200,100,50,255), fontcolour("silver"), channel("cfmin"), range(50, 10000, 50 ,0.5,0.1) | |||
hslider bounds(220, 50,140, 35), colour(200,100,50,255), trackercolour(200,100,50,255), fontcolour("silver"), channel("cfmax"), range(50, 10000, 10000,0.5,0.1) | |||
label bounds(254, 77, 80, 12), text("Cutoff Freq."), FontColour("white") | |||
rslider bounds(360, 25, 70, 70), colour(200,100,50,255), trackercolour(200,100,50,255), fontcolour("silver"), text("Int./S&H"), channel("i_h"), range(0, 1, 0) | |||
} | |||
groupbox bounds( 0,245,220,100), text("WAVE GUIDE"), plant("waveguide"), FontColour(silver),colour(20,20,20){ | |||
rslider bounds( 10, 25, 70, 70), colour(150,150,50,255), trackercolour(150,150,50,255), fontcolour("silver"), text("Chance"), channel("WguideChnc"), range(0, 1.00, 0.2) | |||
hslider bounds( 80, 25,140, 35), colour(150,150,50,255), trackercolour(150,150,50,255), fontcolour("silver"), channel("wguidemin"), range(22, 100, 50,1,1) | |||
hslider bounds( 80, 50,140, 35), colour(150,150,50,255), trackercolour(150,150,50,255), fontcolour("silver"), channel("wguidemax"), range(22, 100, 70,1,1) | |||
label bounds(108, 77, 85, 12), text("Pitch Range"), FontColour("white") | |||
} | |||
groupbox bounds(220,245,220,100), text("SQUARE MOD."), plant("sqmod"), FontColour(silver),colour(20,20,20){ | |||
rslider bounds( 10, 25, 70, 70), colour(200,150,200,255), trackercolour(200,150,200,255), fontcolour("silver"), text("Chance"), channel("SqModChnc"), range(0, 1.00, 0.2) | |||
hslider bounds( 80, 25,140, 35), colour(200,150,200,255), trackercolour(200,150,200,255), fontcolour("silver"), channel("sqmodmin"), range(1, 14.0, 6) | |||
hslider bounds( 80, 50,140, 35), colour(200,150,200,255), trackercolour(200,150,200,255), fontcolour("silver"), channel("sqmodmax"), range(1, 14.0, 12) | |||
label bounds(108, 77, 85, 12), text("Freq.Range"), FontColour("white") | |||
} | |||
groupbox bounds(0,345,220,100), text("FREQUENCY SHIFT"), plant("fshift"), FontColour(silver),colour(20,20,20){ | |||
rslider bounds( 10, 25, 70, 70), colour(250,110,250,255), trackercolour(250,110,250,255), fontcolour("silver"), text("Chance"), channel("FshiftChnc"), range(0, 1.00, 0.2) | |||
hslider bounds( 80, 25,140, 35), colour(250,110,250,255), trackercolour(250,110,250,255), fontcolour("silver"), channel("fshiftmin"), range(-4000, 4000,-1000) | |||
hslider bounds( 80, 50,140, 35), colour(250,110,250,255), trackercolour(250,110,250,255), fontcolour("silver"), channel("fshiftmax"), range(-4000, 4000, 1000) | |||
label bounds(108, 77, 85, 12), text("Freq.Range"), FontColour("white") | |||
} | |||
groupbox bounds(220,345,220,100), text("OUTPUT"), plant("output"), FontColour(silver),colour(20,20,20){ | |||
rslider bounds( 10, 25, 70, 70), colour("Tan"), trackercolour("Tan"), fontcolour("silver"), text("Layers"), channel("layers"), range(1, 20, 1,1,1) | |||
rslider bounds( 80, 25, 70, 70), colour("Tan"), trackercolour("Tan"), fontcolour("silver"), text("Dry/Wet"), channel("DryWet"), range(0, 1.00, 0.6) | |||
rslider bounds(150, 25, 70, 70), colour("Tan"), trackercolour("Tan"), fontcolour("silver"), text("Level"), channel("gain"), range(0, 1.00, 0.75) | |||
} | |||
label bounds(10,472, 200, 12), text("Iain McCurdy [2013]"), FontColour("grey") | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-n -dm0 | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 64 | |||
nchnls = 2 | |||
0dbfs=1 | |||
seed 0 | |||
gisine ftgen 0,0,131072,10,1 | |||
opcode BBCutIteration,aa,aaiiiiiiiii | |||
aL,aR,iBPS, isubdiv, ibarlen, iphrase, irepeats, istutspd, istutchnc, icount, ilayers xin | |||
abbcutL bbcutm aL, iBPS, isubdiv, ibarlen, iphrase, irepeats, istutspd, istutchnc | |||
abbcutR bbcutm aR, iBPS, isubdiv, ibarlen, iphrase, irepeats, istutspd, istutchnc | |||
amixL = 0 | |||
amixR = 0 | |||
if icount<ilayers then | |||
amixL,amixR BBCutIteration aL,aR, iBPS, isubdiv, ibarlen, iphrase, irepeats, istutspd, istutchnc, icount+1, ilayers | |||
endif | |||
xout abbcutL+amixL,abbcutR+amixL | |||
endop | |||
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 ; read widgets | |||
gksubdiv chnget "subdiv" ; read in widgets | |||
gkbarlen chnget "barlen" | |||
gkphrase chnget "phrase" | |||
gkrepeats chnget "repeats" | |||
gkstutspd chnget "stutspd" | |||
gkstutchnc chnget "stutchnc" | |||
gkBPM chnget "BPM" | |||
gkfltdiv chnget "fltdiv" | |||
gkDryWet chnget "DryWet" | |||
gkFltMix chnget "FltMix" | |||
gkbw chnget "bw" | |||
gkcfmin chnget "cfmin" | |||
gkcfmax chnget "cfmax" | |||
gki_h chnget "i_h" | |||
gklayers chnget "layers" | |||
gkgain chnget "gain" | |||
konoff chnget "onoff" | |||
endin | |||
instr 2 | |||
kSwitch changed gkBPM, gkrepeats, gkphrase, gkstutspd, gkstutchnc, gkbarlen, gksubdiv, gkfltdiv, gklayers ;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 UPDATE ;BEGIN A REINITIALISATION PASS FROM LABEL 'UPDATE' | |||
endif | |||
UPDATE: | |||
/* INPUT */ | |||
aL,aR ins ; live input | |||
;;;; use a loop sound file for testing | |||
;#define SOUNDFILE #"loop.wav"# ; macro | |||
; ilen filelen $SOUNDFILE ; length of sound file | |||
; ibeats = 8 ; number of beats in the drum loop | |||
; ispd = (ilen/ibeats) * (i(gkBPM)/60) ; speed ratio for this sample to sync with master clock | |||
; aL diskin $SOUNDFILE,ispd,0,1 ; read sound file | |||
; aR = aL ; right channel same as left | |||
iBPS = i(gkBPM)/60 | |||
kmetro metro iBPS ; metronome used for triggering random parameter changes | |||
; call UDO | |||
;OUTPUT OPCODE INPUT | BPM | SUBDIVISION | BAR_LENGTH | PHRASE_LENGTH | NUM.OF_REPEATS | STUTTER_SPEED | STUTTER_CHANCE | |||
abbcutL,abbcutR BBCutIteration aL,aR, i(gkBPM)/60, i(gksubdiv), i(gkbarlen), i(gkphrase), i(gkrepeats), i(gkstutspd), i(gkstutchnc), 1, i(gklayers) | |||
;FILTER================================================================================================================================================================= | |||
ifreq = iBPS * i(gkfltdiv) ; FREQUENCY WITH WHICH NEW FILTER CUTOFF VALUES ARE GENERATED | |||
kcf1h randomh gkcfmin, gkcfmax, ifreq ; sample and hold random frequency values | |||
kcf1i lineto kcf1h, 1/ifreq ; interpolate values | |||
kcf1 ntrpol kcf1i, kcf1h, gki_h ; crossfade between interpolating and sample and hold type random values | |||
abbFltL resonz abbcutL, kcf1, kcf1*gkbw, 2 ; band-pass filter | |||
abbMixL ntrpol abbcutL, abbFltL, gkFltMix ; crossfade between unfiltered and filter audio signal | |||
kcf2h randomh gkcfmin, gkcfmax, ifreq ; RIGHT CHANNEL | |||
kcf2i lineto kcf2h, 1/ifreq ; | |||
kcf2 ntrpol kcf2i, kcf2h, gki_h ; | |||
abbFltR resonz abbcutR, kcf2, kcf2*gkbw, 2 ; | |||
abbMixR ntrpol abbcutR, abbFltR, gkFltMix ; | |||
;======================================================================================================================================================================= | |||
;WGUIDE1================================================================================================================================================================ | |||
kchance chnget "WguideChnc" | |||
kdice trandom kmetro,0,1 | |||
if kdice<kchance then | |||
kwguidemin chnget "wguidemin" | |||
kwguidemax chnget "wguidemax" | |||
knum randomh kwguidemin,kwguidemax,iBPS | |||
afrq interp cpsmidinn(int(knum)) | |||
kfb randomi 0.8,0.99,iBPS/4 | |||
kcf randomi 800,4000,iBPS | |||
abbMixL wguide1 abbMixL*0.7,afrq,kcf,kfb | |||
abbMixR wguide1 abbMixR*0.7,afrq,kcf,kfb | |||
endif | |||
;======================================================================================================================================================================= | |||
;SQUARE MOD============================================================================================================================================================== | |||
kchance chnget "SqModChnc" ; read in widgets | |||
ksqmodmin chnget "sqmodmin" ; | |||
ksqmodmax chnget "sqmodmax" ; | |||
kDiceRoll trandom kmetro,0,1 ; new 'roll of the dice' upon each new time period | |||
if kDiceRoll<kchance then ; if 'roll of the dice' is within chance boundary... | |||
kratei randomi ksqmodmin,ksqmodmax,iBPS ; interpolating random function for modulating waveform frequency | |||
krateh randomh ksqmodmin,ksqmodmax,iBPS ; sample and hold random function for modulating waveform frequency | |||
kcross randomi 0,1,iBPS ; crossfader for morphing between interpolating and S&H functions | |||
krate ntrpol kratei,krateh,kcross ; create crossfaded rate function | |||
amod lfo 1,cpsoct(krate),2 ; modulating waveform (square waveform) | |||
kcf limit cpsoct(krate)*4,20,sr/3 ; cutoff freq for filtering some of the high freq. content of the square wave | |||
amod clfilt amod,kcf,0,2 ; low-pass filter square wave | |||
abbMixL = abbMixL*amod ; ring modulate audio | |||
abbMixR = abbMixR*amod ; | |||
endif | |||
;======================================================================================================================================================================= | |||
;FSHIFT================================================================================================================================================================= | |||
kchance chnget "FshiftChnc" ; read in widgets | |||
kdice trandom kmetro,0,1 ; new 'roll of the dice' upon each new time period | |||
if kdice<kchance then ; if 'roll of the dice' is within chance boundary... | |||
kfshiftmin chnget "fshiftmin" ; read in widgets | |||
kfshiftmax chnget "fshiftmax" ; | |||
kfsfrqi randomi kfshiftmin,kfshiftmax,iBPS*2 ; interpolating random function for modulating waveform frequency | |||
kfsfrqh randomh kfshiftmin,kfshiftmax,iBPS*2 ; sample and hold random function for modulating waveform frequency | |||
kcross randomi 0,1,iBPS*2 ; crossfader for morphing between interpolating and S&H functions | |||
kfsfrq ntrpol kfsfrqi,kfsfrqh,kcross ; create crossfaded rate function modulating waveform (square waveform) | |||
abbMixL FreqShifter abbMixL,kfsfrq,gisine ; | |||
abbMixR FreqShifter abbMixR,kfsfrq,gisine ; | |||
endif ; | |||
;======================================================================================================================================================================= | |||
rireturn ; RETURN FROM REINITIALISATION PASS TO PERFORMANCE TIME PASSES | |||
amixL sum aL*(1-gkDryWet), abbMixL*gkDryWet ;SUM AND MIX DRY SIGNAL AND BBCUT SIGNAL (LEFT CHANNEL) | |||
amixR sum aR*(1-gkDryWet), abbMixR*gkDryWet ;SUM AND MIX DRY SIGNAL AND BBCUT SIGNAL (RIGHT CHANNEL) | |||
outs amixL*gkgain, amixR*gkgain ;SEND AUDIO TO OUTPUTS | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i1 0 36000 | |||
i2 0 36000 | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,166 @@ | |||
Convolution Reverb | |||
------------------ | |||
You are encouraged to experiment with different impulse files. | |||
You can find some here: http://www.openairlib.net/ | |||
The one I reference in this example can be found here: http://www.iainmccurdy.org/CsoundRealtimeExamples/SourceMaterials/Stairwell.wav | |||
NOTE THAT ZERO LATENCY (or close to zero) CONV0LUTION WILL NOT BE POSSIBLE. | |||
Instructions | |||
------------ | |||
'Size Ratio' compresses the duration of the impulse file (provided that 'compressed' is chosen for 'resize' mode). | |||
'Curve' defines the shape of an envelope applied to compressed impulse files using GEN16 | |||
zero = straight line decaying | |||
positive vals. = increasingly convex decaying | |||
negative vals = increasingly concave decaying | |||
Increase 'iplen' (must be a power of 2) if experiencing performance problems, or reduce it to reduce latency. | |||
'Delay OS' fine tunes the delay applied to the dry signal. Normally this should be zero but adjust it to modify how the dry signal lines up with the convoluted signal. | |||
<Cabbage> | |||
form caption("Convolution Reverb") size(505, 90), pluginID("Conv") | |||
image bounds(0, 0, 505, 90), colour(135, 30, 30,220), shape("rounded"), outline(255,255,150), line(4) | |||
button bounds( 10, 10, 90, 20), text("forward","backward"), channel("FwdBwd"), value(0), fontcolour(250,250,250) | |||
label bounds( 30, 30, 60, 12), text("direction"), fontcolour(250,250,250) | |||
button bounds( 10, 50, 90, 20), text("normal","compressed"), channel("resize"), value(0), fontcolour(250,250,250) | |||
label bounds( 35, 70, 60, 12), text("resize"), fontcolour(250,250,250) | |||
rslider bounds(105, 11, 70, 70), text("Size Ratio"), colour(135, 30, 30), trackercolour(255,255,150), fontcolour(250,250,250), channel("CompRat"), range(0, 1.00, 1) | |||
rslider bounds(170, 11, 70, 70), text("Curve"), colour(135, 30, 30), trackercolour(255,255,150), fontcolour(250,250,250), channel("Curve"), range(-8.00, 8.00, 0) | |||
rslider bounds(235, 11, 70, 70), text("In Skip"), colour(135, 30, 30), trackercolour(255,255,150), fontcolour(250,250,250), channel("skipsamples"), range(0, 1.00, 0) | |||
rslider bounds(300, 11, 70, 70), text("Del.OS."), colour(135, 30, 30), trackercolour(255,255,150), fontcolour(250,250,250), channel("DelayOS"), range(-1.00, 1.00, 0) | |||
rslider bounds(365, 11, 70, 70), text("Mix"), colour(135, 30, 30), trackercolour(255,255,150), fontcolour(250,250,250), channel("mix"), range(0, 1.00, 0.25) | |||
rslider bounds(430, 11, 70, 70), text("Level"), colour(135, 30, 30), trackercolour(255,255,150), fontcolour(250,250,250), channel("level"), range(0, 1.00, 0.4) | |||
} | |||
</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) | |||
; IMPULSE RESPONSES STORED AS STEREO GEN01 FUNCTION TABLES | |||
giImpulse ftgen 1, 0, 262144, 1, "stairwell.wav", 0, 0, 0 ;stereo file, duration 1.176s | |||
; reverse function table UDO | |||
opcode tab_reverse,i,i | |||
ifn xin | |||
iTabLen = nsamp(ifn) | |||
iTableRev ftgen ifn+100,0,-iTabLen,-2, 0 | |||
icount = 0 | |||
loop: | |||
ival table iTabLen-icount-1, ifn | |||
tableiw ival,icount,iTableRev | |||
loop_lt icount,1,iTabLen,loop | |||
xout iTableRev | |||
endop | |||
; compress function table UDO | |||
opcode tab_compress,i,iii | |||
ifn,iCompRat,iCurve xin | |||
iTabLen = nsamp(ifn) | |||
iTabLenComp = int(nsamp(ifn)*iCompRat) | |||
iTableComp ftgen ifn+200,0,-iTabLenComp,-2, 0 | |||
iAmpScaleTab ftgen ifn+300,0,-iTabLenComp,-16, 1,iTabLenComp,iCurve,0 | |||
icount = 0 | |||
loop: | |||
ival table icount, ifn | |||
iAmpScale table icount, iAmpScaleTab | |||
tableiw ival*iAmpScale,icount,iTableComp | |||
loop_lt icount,1,iTabLenComp,loop | |||
xout iTableComp | |||
endop | |||
; compress reverse function table UDO | |||
opcode tab_compress_rev,i,iii | |||
ifn,iCompRat,iCurve xin | |||
iTabLen = nsamp(ifn) | |||
iTabLenComp = int(nsamp(ifn)*iCompRat) | |||
iTableComp ftgen ifn+400,0,-iTabLenComp,-2, 0 | |||
iAmpScaleTab ftgen ifn+500,0,-iTabLenComp,-16, 1,iTabLenComp,iCurve,0 | |||
icount = 0 | |||
loop: | |||
ival table icount, ifn | |||
iAmpScale table icount, iAmpScaleTab | |||
tableiw ival*iAmpScale, iTabLenComp-icount-1,iTableComp | |||
loop_lt icount,1,iTabLenComp,loop | |||
xout iTableComp | |||
endop | |||
instr 1 ;CONVOLUTION REVERB INSTRUMENT | |||
kFwdBwd chnget "FwdBwd" | |||
kresize chnget "resize" | |||
kmix chnget "mix" | |||
klevel chnget "level" | |||
kCompRat chnget "CompRat" | |||
kCurve chnget "Curve" | |||
kskipsamples chnget "skipsamples" | |||
kDelayOS chnget "DelayOS" | |||
kCompRat init 1 ;IF THIS IS LEFT UNINITIALISED A CRASH WILL OCCUR! | |||
ainL,ainR ins ;READ STEREO AUDIO INPUT | |||
;ainL,ainR diskin2 "808loop.wav",1,0,1 ;USE A SOUND FILE FOR TESTING | |||
ainMix sum ainL,ainR | |||
;CREATE REVERSED TABLES | |||
irev tab_reverse giImpulse | |||
kSwitch changed kskipsamples,kFwdBwd,kDelayOS,kCompRat,kCurve ;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 IS CHANGED... | |||
reinit UPDATE ;BEGIN A REINITIALISATION PASS IN ORDER TO EFFECT THIS CHANGE. BEGIN THIS PASS AT LABEL ENTITLED 'UPDATE' AND CONTINUE UNTIL rireturn OPCODE | |||
endif ;END OF CONDITIONAL BRANCHING | |||
UPDATE: ;LABEL | |||
;CREATE COMPRESSED TABLES | |||
icomp tab_compress giImpulse,i(kCompRat),i(kCurve) | |||
;CREATE COMPRESSED REVERSED TABLES | |||
icomprev tab_compress_rev giImpulse,i(kCompRat),i(kCurve) | |||
iplen = 1024 ;BUFFER LENGTH (INCREASE IF EXPERIENCING PERFORMANCE PROBLEMS, REDUCE IN ORDER TO REDUCE LATENCY) | |||
itab = giImpulse ;DERIVE FUNCTION TABLE NUMBER OF CHOSEN TABLE FOR IMPULSE FILE | |||
iirlen = nsamp(itab)*0.5 ;DERIVE THE LENGTH OF THE IMPULSE RESPONSE IN SAMPLES. DIVIDE BY 2 AS TABLE IS STEREO. | |||
iskipsamples = nsamp(itab)*0.5*i(kskipsamples) ;DERIVE INSKIP INTO IMPULSE FILE. DIVIDE BY 2 (MULTIPLY BY 0.5) AS ALL IMPULSE FILES ARE STEREO | |||
;FORWARDS REVERB | |||
if kFwdBwd==0&&kresize==0 then | |||
aL,aR ftconv ainMix, itab, iplen,iskipsamples, iirlen ;CONVOLUTE INPUT SOUND | |||
adelL delay ainL, abs((iplen/sr)+i(kDelayOS)) ;DELAY THE INPUT SOUND ACCORDING TO THE BUFFER SIZE | |||
adelR delay ainR, abs((iplen/sr)+i(kDelayOS)) ;DELAY THE INPUT SOUND ACCORDING TO THE BUFFER SIZE | |||
;BACKWARDS REVERB | |||
elseif kFwdBwd==1&&kresize==0 then | |||
aL,aR ftconv ainMix, irev, iplen, iskipsamples, iirlen ;CONVOLUTE INPUT SOUND | |||
adelL delay ainL,abs((iplen/sr)+(iirlen/sr)-(iskipsamples/sr)+i(kDelayOS)) ;DELAY THE INPUT SOUND ACCORDING TO THE BUFFER SIZE AND THE DURATION OF THE IMPULSE FILE | |||
adelR delay ainR,abs((iplen/sr)+(iirlen/sr)-(iskipsamples/sr)+i(kDelayOS)) ;DELAY THE INPUT SOUND ACCORDING TO THE BUFFER SIZE AND THE DURATION OF THE IMPULSE FILE | |||
elseif kFwdBwd==0&&kresize==1 then | |||
aL,aR ftconv ainMix, icomp, iplen,iskipsamples, iirlen*i(kCompRat) ;CONVOLUTE INPUT SOUND | |||
adelL delay ainL, abs((iplen/sr)+i(kDelayOS)) ;DELAY THE INPUT SOUND ACCORDING TO THE BUFFER SIZE | |||
adelR delay ainR, abs((iplen/sr)+i(kDelayOS)) ;DELAY THE INPUT SOUND ACCORDING TO THE BUFFER SIZE | |||
elseif kFwdBwd==1&&kresize==1 then | |||
aL,aR ftconv ainMix, icomprev, iplen, iskipsamples, iirlen*i(kCompRat) ;CONVOLUTE INPUT SOUND | |||
adelL delay ainL,abs((iplen/sr)+((iirlen*i(kCompRat))/sr)-(iskipsamples/sr)+i(kDelayOS)) ;DELAY THE INPUT SOUND ACCORDING TO THE BUFFER SIZE AND THE DURATION OF THE IMPULSE FILE | |||
adelR delay ainR,abs((iplen/sr)+((iirlen*i(kCompRat))/sr)-(iskipsamples/sr)+i(kDelayOS)) ;DELAY THE INPUT SOUND ACCORDING TO THE BUFFER SIZE AND THE DURATION OF THE IMPULSE FILE | |||
endif | |||
; CREATE A DRY/WET MIX | |||
aMixL ntrpol adelL,aL*0.1,kmix | |||
aMixR ntrpol adelR,aR*0.1,kmix | |||
outs aMixL*klevel,aMixR*klevel | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 3600 ;INSTRUMENT 2 (CONVOLUTION INSTRUMENT) RUNS FOR 1 HOUR (AND KEEPS REAL-TIME PERFORMANCE GOING) | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,223 @@ | |||
DelayGrain.csd | |||
Iain McCurdy, 2013 | |||
CONTROLS | |||
-------- | |||
Grain Size -- range of possible grain sizes (in seconds) | |||
Density -- grain density in grains per second (note that the addition of delay will disrupt the regularity of grains) | |||
Delay -- range of delay times possible (in seconds) | |||
Transpose -- range of transpositions (in semitones) | |||
Spread -- random panning spread of grains | |||
Amplitude Decay -- the larger this value, the more grains are delayed, the more their amplitudes will be lowered | |||
Reversal Proability -- probability of material within the grains being played backwards: 0 = all forwards | |||
1 = all backwards | |||
0.5 = 50:50 | |||
reversal might be hard to hear unless grain size is large | |||
Mix -- dry/wet mix | |||
Level -- output level (both dry and wet) | |||
Grain Env. -- sets the amplitude enveloping window for each grain | |||
Hanning: natural sounding soft attack, soft decay envelope | |||
Half-sine: like the hanning but with a slightly sharper attack and decay | |||
Decay 1: a percussive decay envelope with linear segments | |||
Decay 2: a percussive decay envelope with a exponential decay segment. Probably more natural sounding than 'Decay 1' but longer grain sizes may be necessary | |||
Gate: sharp attack and decay. Rather synthetic sounding. | |||
Delay Distr. -- random delay time distribution: exponential, linear or logarithmic. Effect are quite subtle but exponential might be most natural sounding. | |||
<Cabbage> | |||
form caption("Delay Grain") size(410, 540), pluginID("DGrn") | |||
hslider bounds( 5, 5, 400, 25), channel("GSize1"), range(0.005, 2, 0.01, 0.5, 0.0001) | |||
hslider bounds( 5, 20, 400, 25), channel("GSize2"), range(0.005, 2, 0.09, 0.5, 0.0001) | |||
label bounds(161, 39, 120, 11), text("G R A I N S I Z E"), fontcolour(105,105,255) | |||
hslider bounds( 5, 60, 400, 25), channel("Dens"), range(0.2, 2000, 50,0.5,0.001) | |||
label bounds(172, 79, 120, 11), text("D E N S I T Y"), fontcolour(105,105,255) | |||
hslider bounds( 5,100, 400, 25), channel("Dly1"), range(0, 5, 0.01, 0.5, 0.0001) | |||
hslider bounds( 5,115, 400, 25), channel("Dly2"), range(0, 5, 0.5, 0.5, 0.0001) | |||
label bounds(180,134, 120, 11), text("D E L A Y"), fontcolour(105,105,255) | |||
hslider bounds( 5,160, 400, 25), channel("Trns1"), range(-12, 12, 0, 1, 0.001) | |||
hslider bounds( 5,175, 400, 25), channel("Trns2"), range(-12, 12, 0, 1, 0.001) | |||
label bounds(162,194, 120, 11), text("T R A N S P O S E"), fontcolour(105,105,255) | |||
hslider bounds( 5,215, 400, 25), channel("PanSpread"), range(0, 1.00, 0.5,1,0.001) | |||
label bounds(158,234, 120, 11), text("P A N S P R E A D"), fontcolour(105,105,255) | |||
hslider bounds( 5,260, 400, 25), channel("AmpSpread"), range(0, 1.00, 0.5,1,0.001) | |||
label bounds(158,279, 120, 11), text("A M P S P R E A D"), fontcolour(105,105,255) | |||
hslider bounds( 5,300, 400, 25), channel("FiltSpread"), range(0, 1.00, 0.5,1,0.001) | |||
label bounds(147,319, 120, 11), text("F I L T E R S P R E A D"), fontcolour(105,105,255) | |||
hslider bounds( 5,340, 400, 25), channel("ampdecay"), range(0, 1.00, 0.5,1,0.001) | |||
label bounds(134,359, 220, 11), text("A M P L I T U D E D E C A Y"), fontcolour(105,105,255) | |||
hslider bounds( 5,380, 400, 25), channel("reverse"), range(0, 1.00, 0,1,0.001) | |||
label bounds(112,399, 220, 11), text("R E V E R S A L P R O B A B I L I T Y"), fontcolour(105,105,255) | |||
hslider bounds( 5,420, 400, 25), channel("mix"), range(0, 1.00, 1,1,0.001) | |||
label bounds(191,439, 120, 11), text("M I X"), fontcolour(105,105,255) | |||
hslider bounds( 5,460, 400, 25), channel("level"), range(0, 2.00, 1, 0.5, 0.001) | |||
label bounds(183,479, 120, 11), text("L E V E L"), fontcolour(105,105,255) | |||
combobox bounds( 10,506, 90, 17), channel("window"), value(1), text("Hanning","Half Sine","Decay 1","Decay 2","Gate") | |||
label bounds( 19,495, 90, 11), text("GRAIN ENV."), fontcolour(105,105,255) | |||
combobox bounds(110,506, 90, 17), channel("DlyDst"), value(1), text("Exp.","Lin.","Log") | |||
label bounds(119,495, 90, 11), text("DELAY DISTR."), fontcolour(105,105,255) | |||
label bounds( 10,528, 200, 11), text("Author: Iain McCurdy |2013|"), FontColour("grey") | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-dm0 -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
;Author: Iain McCurdy (2013) | |||
; window functions | |||
giwfn1 ftgen 0, 0, 131072, 9, .5, 1, 0 ; HALF SINE | |||
giwfn2 ftgen 0, 0, 131072, 7, 0, 3072, 1, 128000, 0 ; PERCUSSIVE - STRAIGHT SEGMENTS | |||
giwfn3 ftgen 0, 0, 131072, 16, 0, 3072,0,1, 128000,-2, 0 ; PERCUSSIVE - EXPONENTIAL SEGMENTS | |||
giwfn4 ftgen 0, 0, 131072, 7, 0, 3536, 1, 124000, 1, 3536, 0 ; GATE - WITH ANTI-CLICK RAMP UP AND RAMP DOWN SEGMENTS | |||
giwfn5 ftgen 0, 0, 131072, 7, 0, 128000,1, 3072, 0 ; REVERSE PERCUSSIVE - STRAIGHT SEGMENTS | |||
giwfn6 ftgen 0, 0, 131072, 5, .001, 128000,1, 3072, 0.001 ; REVERSE PERCUSSIVE - EXPONENTIAL SEGMENTS | |||
giwfn7 ftgen 0, 0, 131072, 20, 2, 1 ; HANNING WINDOW | |||
giwindows ftgen 0,0,8,-2,giwfn7,giwfn1,giwfn2,giwfn3,giwfn4 | |||
giBufL ftgen 0,0,1048576,-2,0 ; function table used for storing audio | |||
giBufR ftgen 0,0,1048576,-2,0 ; function table used for storing audio | |||
gigaussian ftgen 0,0,4096,20,6,1,1 ; a gaussian distribution | |||
gaGMixL,gaGMixR init 0 ; initialise stereo grain signal | |||
instr 1 ; grain triggering instrument | |||
kGSize1 chnget "GSize1" ; grain size limit 1 | |||
kGSize2 chnget "GSize2" ; grain size limit 2 | |||
kDens chnget "Dens" ; grain density | |||
kDly1 chnget "Dly1" ; delay time limit 1 | |||
kDly2 chnget "Dly2" ; delay time limit 2 | |||
kTrns1 chnget "Trns1" ; transposition in semitones | |||
kTrns2 chnget "Trns2" | |||
kPanSpread chnget "PanSpread" ; random panning spread | |||
kAmpSpread chnget "AmpSpread" ; random amplitude spread | |||
kFiltSpread chnget "FiltSpread" ; random filter spread | |||
kreverse chnget "reverse" ; reversal probability | |||
kampdecay chnget "ampdecay" ; amount of delay->amplitude attenuation | |||
kwindow chnget "window" ; window | |||
kDlyDst chnget "DlyDst" ; delay time distribution | |||
kmix chnget "mix" ; dry/wet mix | |||
klevel chnget "level" ; output level (both dry and wet signals) | |||
aL, aR ins ; read audio input | |||
outs aL*klevel*(1-kmix),aR*klevel*(1-kmix) | |||
/* WRITE TO BUFFER TABLES */ | |||
ilen = ftlen(giBufL) ; table length (in samples) | |||
aptr phasor sr/ilen ; phase pointer used to write to table | |||
aptr = aptr*ilen ; rescale pointer according to table size | |||
tablew aL, aptr, giBufL ; write audio to table | |||
tablew aR, aptr, giBufR ; write audio to table | |||
kptr downsamp aptr ; downsamp pointer to k-rate | |||
ktrig metro kDens ; grain trigger | |||
/* GRAIN SIZE */ | |||
kGSize random 0,1 ; random value 0 - 1 | |||
;kGSize expcurve kGSize,50 ; exponentially redistribute range 0 - 1 | |||
kMinGSize min kGSize1,kGSize2 ; find minimum grain size limit | |||
kMaxGSize max kGSize1,kGSize2 ; find maximum grain size limit | |||
kGSize scale kGSize,kMaxGSize,kMinGSize ; rescale random value according to minimum and maximum limits | |||
/* DELAY TIME */ | |||
kDly random 0,1 ; uniform random value 0 - 1 | |||
if kDlyDst=1 then ; if delay time distribution is exponential | |||
kDly expcurve kDly,100 ; exponential distrubution range 0 - 1 | |||
elseif kDlyDst=3 then ; .. or if logarithmic | |||
kDly logcurve kDly,100 ; exponential distrubution range 0 - 1 | |||
endif ; (other linear so do not alter) | |||
if kDly1=kDly2 then | |||
kMinDly = kDly1 ; delays can't be the same value!! | |||
kMaxDly = kDly2+0.001 | |||
else | |||
kMinDly min kDly1,kDly2 ; find minimum delay time limit | |||
kMaxDly max kDly1,kDly2 ; find maximum delay time limit | |||
endif | |||
ioffset = 1/sr ; delay offset (can't read at same location as write pointer!) | |||
kDly scale kDly,kMaxDly,kMinDly; distribution rescaled to match the user defined limits | |||
/* CALL GRAIN */ | |||
; p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16 | |||
schedkwhen ktrig,0,0,2,kDly+0.0001,kGSize,kptr,kPanSpread,kreverse,kDly,kMinDly+ioffset,kMaxDly+0.0001,kampdecay,klevel*kmix,kwindow,kAmpSpread,kFiltSpread,kTrns1,kTrns2 ; call grain instrument | |||
endin | |||
instr 2 ; grain instrument | |||
iGStart = p4 ; grain start position (in samples) | |||
ispread = p5 ; random panning spread | |||
ireverse= (rnd(1)>p6?1:-1) ; decide fwd/bwd status | |||
iwindow table p12-1,giwindows ; amplitude envelope shape for this grain | |||
/* AMPLITUDE CONTROL */ | |||
idly = p7 ; delay time | |||
iMinDly = p8 ; minimum delay | |||
iMaxDly = p9 ; maximum delay | |||
iampdecay= p10 ; amount of delaytime->amplitude attenuation | |||
ilevel = p11 ; grain output level | |||
iAmpSpread = p13 | |||
iFiltSpread = p14 | |||
iRto divz idly-iMinDly , iMaxDly-iMinDly, 0 ; create delay:amplitude ration (safely) | |||
iamp = (1 - iRto) ^ 2 ; invert range | |||
iamp ntrpol 1,iamp,iampdecay ; mix flat amplitude to scaled amplitude according to user setting | |||
iRndAmp random 1-iAmpSpread, 1 ; random amplitude value for this grain | |||
iamp = iamp*iRndAmp ; apply random amplitude | |||
/* TRANSPOSITION */ | |||
iTrns random p15,p16 | |||
iRto = semitone(iTrns) | |||
if iRto>1 then | |||
iStrtOS = (iRto-1) * sr * p3 | |||
else | |||
iStrtOS = 0 | |||
endif | |||
aline line iGStart-iStrtOS,p3,iGStart-iStrtOS+(p3*iRto*sr*ireverse) ; grain pointer | |||
aenv oscili iamp,1/p3,iwindow ; amplitude envelope | |||
aL tablei aline,giBufL,0,0,1 ; read audio from table | |||
aR tablei aline,giBufR,0,0,1 ; read audio from table | |||
if iFiltSpread>0 then | |||
iRndCfOct random 14-(iFiltSpread*10),14 | |||
iRndCf = cpsoct(iRndCfOct) | |||
aL butlp aL,iRndCf | |||
aR butlp aR,iRndCf | |||
endif | |||
ipan random 0.5-(ispread*0.5),0.5+(ispread*0.5) ; random pan position for this grain | |||
gaGMixL = gaGMixL + (aL*aenv*ipan*ilevel) ; left channel mix added to global variable | |||
gaGMixR = gaGMixR + (aR*aenv*(1-ipan)*ilevel) ; right channel mix added to global variable | |||
endin | |||
instr 3 ; output instrument (always on) | |||
outs gaGMixL,gaGMixR ; send global audio signals to output | |||
clear gaGMixL,gaGMixR ; clear global audio variables | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [60*60*24*7] ; read audio, write to buffers, call grains. | |||
i 3 0 [60*60*24*7] ; output | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,142 @@ | |||
doppler.csd | |||
Written by Iain McCurdy, 2013 | |||
; CONTROLS | |||
; Input - select input: either left channel, right channel, or a mix of both channels | |||
; Shape - shape of the LFO moving the source: either sine, triangle, random spline OR manual | |||
note, if 'random' is chosen, 'speed' can take a little while to respond to changes | |||
made to the 'speed' control is the speed was previously slow | |||
If 'manual' is selected source position is controlled using the on screen slider | |||
; Room Size - effectively the dpeth of the doppler pitch modulating effect | |||
; Speed - speed of the LFO moving the source with respect to the mic. position | |||
; Depth - amplitude of the LFO moving the source | |||
; Smoothing - a smoothing filter applied to doppler pitch modulation. Its effect can be subtle. | |||
; Mix - a dry/wet mixer. Mixing the dry and wet signals can be used to create chorus effects. | |||
; Ampscale - amount of amplitude drop off as the source moves away from the source. | |||
Kind of like another room size control | |||
; Pan Depth - Amount of left-right movement in the output as the source swings past the microphone | |||
; Out Amp - scales the output signal | |||
; Mic.Position - Position of the microphone | |||
; Source Position- Location of the source (for display only unless 'manual' shape is chosen) | |||
<Cabbage> | |||
form caption("-oOo-"), size(610, 180), pluginID("dopp") | |||
label bounds(23, 10, 60,11), text("Input") | |||
combobox bounds(10, 23, 60,20), channel("input"), value(4), text("left","right","mixed","test") | |||
label bounds(23, 50, 60,11), text("Shape") | |||
combobox bounds(10, 63, 60,20), channel("shape"), value(1), text("sine","triangle","random","manual") | |||
rslider bounds( 75, 10, 80, 80), channel("RoomSize"), range(0.1,100,40,0.5,0.5), text("Room Size"), TextBox(1), colour( 45, 45, 45), trackercolour(200,200,200) | |||
rslider bounds(140, 10, 80, 80), channel("speed"), range(0,10,0.08,0.5,0.01), text("Speed"), TextBox(1), colour( 45, 45, 45), trackercolour(200,200,200) | |||
rslider bounds(205, 10, 80, 80), channel("depth"), range(0,0.5,0.5,0.5,0.01), text("Depth"), TextBox(1), colour( 45, 45, 45), trackercolour(200,200,200) | |||
rslider bounds(270, 10, 80, 80), channel("filtercutoff"), range(1,20,6,1,1), text("Smoothing"), TextBox(1), colour( 45, 45, 45), trackercolour(200,200,200) | |||
rslider bounds(335, 10, 80, 80), channel("ampscale"), range(0,1,0.98), text("Amp.Scale"), TextBox(1), colour( 45, 45, 45), trackercolour(200,200,200) | |||
rslider bounds(400, 10, 80, 80), channel("PanDep"), range(0,0.5,0.4), text("Pan Depth"), TextBox(1), colour( 45, 45, 45), trackercolour(200,200,200) | |||
rslider bounds(465, 10, 80, 80), channel("mix"), range(0,1,1), text("Mix"), TextBox(1), colour( 45, 45, 45), trackercolour(200,200,200) | |||
rslider bounds(530, 10, 80, 80), channel("OutAmp"), range(0,1,0.5), text("Level"), TextBox(1), colour( 45, 45, 45), trackercolour(200,200,200) | |||
hslider bounds( 10, 86,590, 40), channel("microphone"), range(0,1.00,0.5), text("Mic. Position"), TextBox(1), colour(100,100,100), trackercolour(200,200,200) | |||
hslider bounds( 10,111,590, 40), channel("source"), range(0,1.00,0.5), text("Source Position"), TextBox(1), colour(100,100,100), trackercolour(200,200,200) | |||
label bounds(22, 155,200,18), text("D O P P L E R"), fontcolour(100,100,100) | |||
label bounds(20, 153,200,18), text("D O P P L E R"), fontcolour(180,180,180) | |||
label bounds(232,160, 200, 12), text("Author: Iain McCurdy |2013|"), FontColour("grey") | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-dm0 -n -+rtmidi=null -M0 | |||
</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 ;MAXIMUM AMPLITUDE VALUE | |||
;AMPLITUDE SCALING CURVE | |||
giampcurve ftgen 0,0,131072,5,0.01,131072*0.5,1,131072*0.5,0.01 | |||
instr 1 | |||
gkinput chnget "input" | |||
gkRoomSize chnget "RoomSize" | |||
gkspeed chnget "speed" | |||
gkdepth chnget "depth" | |||
gkfiltercutoff chnget "filtercutoff" | |||
gkfiltercutoff init 6 | |||
gkampscale chnget "ampscale" | |||
gkPanDep chnget "PanDep" | |||
kmix chnget "mix" ;READ IN DRY/WET CROSSFADER WIDGET | |||
gkOutAmp chnget "OutAmp" | |||
gkmicrophone chnget "microphone" | |||
gkshape chnget "shape" | |||
gkshape init 1 | |||
/* INPUT */ | |||
aL,aR ins | |||
if gkinput=1 then | |||
asig = aL | |||
elseif gkinput=2 then | |||
asig = aR | |||
elseif gkinput=3 then | |||
asig = (aL+aR)*0.677 | |||
else | |||
;INPUT TONE=============================================(for testing) | |||
asig vco2 .5, 300 ;GENERATE TONE | |||
asig tone asig, 1200 ;LOW PASS FILTER TO SOFTEN THE TONE | |||
;======================================================= | |||
endif | |||
;LFO(modulates source position)========================= | |||
ktrig changed gkshape ;IF I-RATE VARIABLE SLIDER IS CHANGED GENERATE A '1' | |||
if ktrig=1 then ;IF TRIGGER IS '1'... | |||
reinit RESTART_LFO ;BEGIN A REINITIALISATION PASS FROM LABEL 'UPDATE' | |||
endif ;END OF THIS CONDITIONAL BRANCH | |||
RESTART_LFO: ;LABEL CALLED 'UPDATE' | |||
if i(gkshape)=3 then ;IF 'RANDOM' SHAPE IS SELECTED... | |||
gksource rspline 0.5-gkdepth, 0.5+gkdepth, gkspeed,gkspeed*2 | |||
elseif i(gkshape)=4 then ;IF 'MANUAL' SHAPE IS SELECTED... | |||
gksource chnget "source" ;READ SOURCE POSITION FROM SLIDER | |||
else | |||
gksource lfo gkdepth, gkspeed, i(gkshape)-1 ;LFO | |||
gksource = gksource + 0.5 ;OFFSET INTO THE POSITIVE DOMAIN | |||
endif | |||
rireturn | |||
chnset gksource,"source" | |||
;====================================================== | |||
kporttime linseg 0, 0.001, 0.1 ;RAMPING UP PORTAMENTO TIME VARIABLE | |||
;DOPPLER================================================ | |||
ispeedofsound init 340.29 ;SPEED OF SOUND DEFINED | |||
ksource portk gksource, kporttime ;SMOOTH SOURCE POSITION MOVEMENT | |||
kmicrophone portk gkmicrophone, kporttime ;SMOOTH MICROPHOPNE POSITION MOVEMENT | |||
ktrig changed gkfiltercutoff ;IF I-RATE VARIABLE SLIDER IS CHANGED GENERATE A '1' | |||
if ktrig=1 then ;IF TRIGGER IS '1'... | |||
reinit UPDATE ;BEGIN A REINITIALISATION PASS FROM LABEL 'UPDATE' | |||
endif ;END OF THIS CONDITIONAL BRANCH | |||
UPDATE: ;LABEL CALLED 'UPDATE' | |||
kdisp limit ksource-(kmicrophone-0.5), 0, 1 ;CALCULATE DISPLACEMENT (DISTANCE) BETWEEN SOURCE AND MICROPHONE AND LIMIT VALUE TO LIE BETWEEN ZERO AND 1 | |||
kamp table kdisp, giampcurve,1 ;READ AMPLITUDE SCALING VALUE FROM TABLE | |||
kamp ntrpol 1, kamp, gkampscale ;CALCULATE AMOUNT OF AMPLITUDE SCALING DESIRED BY THE USER FROM THE ON SCREEN SLIDER | |||
aout doppler asig*kamp, ksource*gkRoomSize, kmicrophone*gkRoomSize, ispeedofsound, i(gkfiltercutoff) ;APPLY DOPPLER EFFECT | |||
rireturn ;RETURN FROM REINITIALISATION PASS | |||
kpan = (gksource<gkmicrophone?0.5+gkPanDep:0.5-gkPanDep) ;CALCULATE PAN VALUE ACCORDING TO SOURCE AND MIC POSITION | |||
kpan portk kpan, kporttime ;APPLY PORTAMENTO SMOOTHING TO PAN POSITION VALUE | |||
aL ntrpol asig,aout*sqrt(kpan)*gkOutAmp,kmix ;DRY/WET MIX LEFT CHANNEL | |||
aR ntrpol asig,aout*sqrt(1-kpan)*gkOutAmp,kmix ;DRY/WET MIX RIGHT CHANNEL | |||
outs aL, aL ;SEND AUDIO TO OUTPUTS AND APPLY PANNING | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 3600 ;DUMMY SCORE EVENT - PERMITS REAL-TIME PERFORMANCE FOR 1 HOUR | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,165 @@ | |||
DopplerSpin.csd | |||
Written by Iain McCurdy, 2013 | |||
; CONTROLS | |||
; Frequency of Rotation -- Frequency of the spinning | |||
; Central/Edge -- Listening position in relation to the circulat motion. Can be thought of as a control for the amount of amplitude modulation. | |||
; Orientation (radians) -- direction of listeing | |||
; Panning Width -- amount of panning directionality in the modulation | |||
; Doppler Depth -- amount of doppler effect (circle size). | |||
; (Reverb) Scaling -- a dry/wet mixer. Mixing the dry and wet signals can be used to create chorus effects. | |||
; (Reverb) Time -- amount of amplitude drop off as the source moves away from the source. | |||
; (Reverb) Damping -- Amount of left-right movement in the output as the source swings past the microphone | |||
; Mix -- scales the output signal | |||
; Level -- Output Level | |||
; Auto-Frequency -- If this button is activated the frequency of the spinning moves randomly between -Frequency of Rotation and +Frequency of Rotation | |||
; This example uses three LFOs to create the effect of a sound moving in a circle around the listener. | |||
; The three parameters controlled by these LFOs are amplitude, panning and delay time. | |||
; The modulation of the delay time also results in a modulation of pitch which is sometimes referred to as the Doppler effect. | |||
; Note that in this example the 'vdelayxw' opcode is used to implement the delay and doppler shift. | |||
; This opcode is unique in that the delay time of the write pointer rather than the read pointer is modulated. | |||
; This is appropriate here as it is the sound source that is moving, not the listener. | |||
; Crucial to this effect is that that all three LFOs share the same frequency value. | |||
; Negative frequency values are also allowed - this would represent a change in direction of the source sounds motion around us. | |||
; Also of crucial importance is the phase relationship between the three LFOs as this defines exactly where the sound source is in relation to the listener. | |||
; The panning LFO should be at its points of minimum rate of change when the sound source is moving parallel to the direction in which the listener is facing, i.e. directly to the left or to the right of the listener. | |||
; The delay time LFO (pitch modulation/doppler) should be at its points of minimum rate of change when the sound source is moving perpendicular to the direction in which the listener is facing, i.e. directly in front of or behind the listener. | |||
; The phase difference between these two LFOs is either 90 or 270 degrees, depending on whether the source sound is moving in a clockwise or anticlockwise direction around us. | |||
; Amplitude modulation comes into play whenever we are not listening from the centre of the circle of motion. | |||
; The close to the edge of the circle we are the greater the amount of amplitude modulation we will experience. | |||
; If the amplitude modulation is extreme then the circle of the source sound's motion must be extremely large. The phase of the amplitude modulation LFO is also adjustable ('Orientation' slider - | |||
; this define which edge of the circle we are closest to, e.g. upper, lower, left, right etc. It is probably best to always include at least a small amount of amplitude modulation as we perceive sounds directly to our left or to our right to be | |||
; louder, even if they remain equidistant from us. In this case the amplitude LFO phase ('Orientation') should be 0.5 (radians). | |||
; The waveform for all three LFOs is a sine wave. | |||
; This defines the object's motion as being circular. | |||
; If we were to use a different waveform this would model non-circular motion. | |||
; There is interesting potential in experimentation in this direction with this example. | |||
; Finally as the moving signal becomes more distant, i.e. when the amplitude scaling function is at its minimum, a reverberated version of the signal can become more evident. | |||
; The degree to which this is present can be scaled using the 'Reverb Scaling' slider. | |||
<Cabbage> | |||
form caption("Doppler Spin"), size(700,265), pluginID("SDop") | |||
;label bounds(23, 10, 60,11), text("Input") | |||
label bounds( 10, 4,120, 15), text("i n p u t"), fontcolour("white") | |||
combobox bounds(10, 30, 60,20), channel("input"), value(1), text("left","right","mixed","test") | |||
line bounds( 85, 5, 2, 70), colour("Grey") | |||
label bounds(185, 4,120, 15), text("r e v e r b"), fontcolour("white") | |||
checkbox bounds(100, 33,110, 20), text("Reverb On/Off") channel("RvbOnOff"), FontColour("White"), colour("lime") value(1) | |||
rslider bounds(210, 23, 55, 55), channel("RvbScaling"), range(0,1.000,0.3,1,0.001), text("Scaling"), TextBox(0), colour( 95, 45,115), trackercolour( 95, 45,115) | |||
rslider bounds(270, 23, 55, 55), channel("RvbTime"), range(0.3,0.990,0.7,1,0.001), text("Time"), TextBox(0), colour( 85, 45,125), trackercolour( 85, 45,125) | |||
rslider bounds(330, 23, 55, 55), channel("RvbFilt"), range(20,20000,4000,0.5,0.001), text("Damping"), TextBox(0), colour( 75, 45,135), trackercolour( 75, 45,135) | |||
line bounds(390, 5, 2, 70), colour("Grey") | |||
label bounds(411, 4,120, 15), text("o u t p u t"), fontcolour("white") | |||
rslider bounds(400, 23, 55, 55), channel("mix"), range(0,1.000,1,1,0.001), text("Mix"), TextBox(0), colour( 65, 45,145), trackercolour( 65, 45,145) | |||
rslider bounds(460, 23, 55, 55), channel("OutGain"), range(0,1.000,0.7,1,0.001), text("Level"), TextBox(0), colour( 55, 45,155), trackercolour( 65, 45,145) | |||
line bounds(520, 5, 2, 70), colour("Grey") | |||
checkbox bounds(530, 33,110, 20), text("Auto-Frequency") channel("AutoFreq"), FontColour("White"), colour("lime") value(0) | |||
hslider bounds( 5, 80,690, 35), channel("freq"), range(-10,10.00,0.2,1,0.0001), text("Frequency of Rotation"), TextBox(1), colour(145, 45, 65), trackercolour(145, 45, 65) | |||
hslider bounds( 5,110,690, 35), channel("AmpDepth"), range(0,1.000,0.7,1,0.001), text("Central/Edge"), TextBox(1), colour(135, 45, 75), trackercolour(135, 45, 75) | |||
hslider bounds( 5,140,690, 35), channel("AmpPhase"), range(0,1.000,0.5,1,0.001), text("Orientation [radians]"), TextBox(1), colour(125, 45, 85), trackercolour(125, 45, 85) | |||
hslider bounds( 5,170,690, 35), channel("PanDepth"), range(0,1.000,1,1,0.001), text("Panning Width"), TextBox(1), colour(115, 45, 95), trackercolour(115, 45, 95) | |||
hslider bounds( 5,200,690, 35), channel("DopDep"), range(0,0.030,0.003,0.5,0.000001), text("Doppler Depth"), TextBox(1), colour(105, 45,105), trackercolour(105, 45,105) | |||
label bounds( 5,247, 200, 12), text("Author: Iain McCurdy |2013|"), FontColour("grey") | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-dm0 -n -+rtmidi=null -M0 | |||
</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 ;MAXIMUM AMPLITUDE VALUE | |||
gisine ftgen 0,0,131072,10,1 | |||
instr 1 | |||
gkinput chnget "input" | |||
kfreq chnget "freq" | |||
kAmpDepth chnget "AmpDepth" | |||
kAmpPhase chnget "AmpPhase" | |||
kPanDepth chnget "PanDepth" | |||
kDopDep chnget "DopDep" | |||
kRvbScaling chnget "RvbScaling" | |||
kRvbTime chnget "RvbTime" | |||
kRvbFilt chnget "RvbFilt" | |||
kmix chnget "mix" | |||
kOutGain chnget "OutGain" | |||
kRvbOnOff chnget "RvbOnOff" | |||
kAutoFreq chnget "AutoFreq" | |||
/* INPUT */ | |||
aL,aR ins | |||
if gkinput=1 then | |||
asig = aL | |||
elseif gkinput=2 then | |||
asig = aR | |||
elseif gkinput=3 then | |||
asig = (aL+aR)*0.677 | |||
else | |||
;INPUT TONE=============================================(for testing) | |||
asig vco2 .5, 300 ;GENERATE TONE | |||
asig tone asig, 1200 ;LOW PASS FILTER TO SOFTEN THE TONE | |||
;======================================================= | |||
endif | |||
if kAutoFreq=1 then | |||
kfreq jspline kfreq,1,4 | |||
endif | |||
kporttime linseg 0,0.001,0.1 ;CREATE 'PORTAMENTO TIME'. A FUNCTION THAT RISES QUICKLY FROM ZERO TO A HELD VALUE. | |||
kAmpPhase portk kAmpPhase, kporttime ;APPLY PORTAMENTO TO gkAmpPhase. CREATE NEW OUTPUT VARIABLE kAmpPhase (GLOBAL VARIABLES CAN'T BE BOTH INPUT AND OUTPUT) | |||
kDopDep portk kDopDep, kporttime ;APPLY PORTAMENTO TO gkDopDep. CREATE NEW OUTPUT VARIABLE kDopDep (GLOBAL VARIABLES CAN'T BE BOTH INPUT AND OUTPUT) | |||
aAmp osciliktp kfreq, gisine, kAmpPhase ;AN LFO DEFINES A VARIABLE USED TO MODULATE AMPLITUDE (NOTE: VARIABLE PHASE). THIS MODELS THE LOCATION WITHIN THE CIRCLE FROM WHICH WE ARE LISTENING. NO AMPLITUDE MODULATION REPRESENT REPRESENTS OUR LISTENING POSITION BEING EXACTLY CENTRAL, MAXIMUM MODULATION REPRESENTS US BEING NEAR TO THE EDGE OF A LARGE CIRCLE. THE CONTROL OVER PHASE OF THIS LFO REPRESENTS WHICH EDGE WE ARE CLOSER TO. | |||
aAmp = (aAmp * 0.5 * kAmpDepth) + 0.5 ;RESCALE AND OFFSET AMPLITUDE MODULATION LFO | |||
aPan oscili (kPanDepth * 0.5), kfreq, gisine, 0.75 ;AN LFO DEFINES A VARIABLE FOR PANNING CONTROL - I.E. WHETHER SOUND IS CURRENTLY TO OUT LEFT OR TO OUT RIGHT. NOTE THAT PHASE IS 0.75 AND THEREFORE 0.75 RADIANS (OR 270 DEGREES OUT OF PHASE) WITH THE DELAY MODULATION | |||
aPan = aPan + 0.5 ;OFFSET PANNING LFO | |||
iMaxDelay = 1 ;DEFINE A VARIABLE THAT WILL BE USE FOR 'MAXIMUM DELAY TIME' (BUFFER LENGTH) | |||
aDelTim oscili kDopDep, kfreq, gisine, 0 ;AN LFO DEFINES A VARIABLE FOR DELAY TIME (NOTE PHASE AT ZERO) | |||
aDelTim = aDelTim + kDopDep ;DELAY TIME VARIABLE 'aDelay' IS OFFSET TO STAY WITHIN THE POSITIVE DOMAIN | |||
;vdelayxw IS USED FOR THE DELAY READ/WRITE AS IT MODULATES THE WRITE POINTER RATHER THAN THE READ POINTER. | |||
;THIS IS MORE APPROPRIATE IN THIS EXAMPLE AS THE SOURCE IS MOVING BUT THE POINT OF LISTENING IS STATIONARY | |||
aDelTap vdelayxw asig, aDelTim, iMaxDelay, 16 | |||
aL, aR pan2 aDelTap, aPan, 1 ;APPLY PANNING TO SIGNAL OUTPUT FROM DELAY USING pan2 OPCODE. CREATE A NEW | |||
aL = aL * (aAmp^0.5) ;APPLY AMPLITUDE MODULATION (CREATE A NEW AUDIO SIGNAL - DRY (UN-REVERBERATED) SIGNAL) | |||
aR = aR * (aAmp^0.5) ;APPLY AMPLITUDE MODULATION (CREATE A NEW AUDIO SIGNAL - DRY (UN-REVERBERATED) SIGNAL) | |||
if kRvbOnOff=1 then | |||
aRvbL, aRvbR reverbsc aL, aR, kRvbTime, kRvbFilt ;REVERB (UNAFFECTED BY AMPLITUDE MODULATION) | |||
aL = (aL+(aRvbL*kRvbScaling)) | |||
aR = (aR+(aRvbL*kRvbScaling)) | |||
endif | |||
aL ntrpol asig,aL,kmix | |||
aR ntrpol asig,aR,kmix | |||
outs aL * kOutGain , aR * kOutGain ;SEND AUDIO TO OUTPUTS. MIX DRY AND REVERBERATED SIGNALS. | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [3600*24*7*52] | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,351 @@ | |||
; FilterLFO.csd | |||
; Author: Iain McCurdy (2013) | |||
; INTRODUCTION | |||
; ------------ | |||
; multimode filter with a 2 multimode LFOs on the cutoff frequency | |||
; additional controls for specific filter models are accessed using the pop-up buttons | |||
; The outputs of both LFOs are added to the main cutoff frequency (Freq.) | |||
; LFO amplitude are in 'octaves' | |||
; LFO rates are in beats per minute | |||
; 'Smoothing' adds a small amount of portamento to changes in cutoff frequency | |||
; this can be useful in square wave-type modulations | |||
; 'Type' is ignored when 'moogladder', 'resonz', 'phaser2' or 'resony' are chosen as 'model' | |||
; some subtlety is required when using the more complex filter models (e.g. phaser2, resony) | |||
; often low LFO amplitudes and rate work better with these | |||
; CONTROL | |||
; ------- | |||
; Freq. -- global manual frequency control. Like an LFO offset value. | |||
; Res. -- resonance control. Affects moogladder, resonz and phaser2 models | |||
; Mix -- dry/wet (filtered/unfiltered) mix | |||
; Level -- global output level control | |||
; Model -- (drop down menu) filter model | |||
; Type -- Filter type: highpass/lowpass - affects tone, butterworth, cl-butterworth, cl-Chebychev models only | |||
; Input -- choose between live input and (for testing) sawtooth tone and pink noise | |||
; Resync -- resync. (i.e. restart) the two LFOs | |||
; clfilt/phaser2/resony -- pop-up panels with further controls for these models | |||
; LFO Type -- sine, triangle, square (bipolar), square (unipolar), sawtooth up, sawtooth down, random sample & hold and random spline | |||
; LFO Amp -- amplitude of the LFOs | |||
; LFO Rate -- rates of the LFOs in beats per minute | |||
; Link Rates -- when this switch is activate Rate controls for the two LFOs will be linked | |||
; LFO Rate Div. -- integer division of Rate control value (unaffected by 'Link Rates' setting) | |||
; Smooth -- a small amount of smoothing can be appied to the LFO to smooth abrupt changes in value (may be useful and 'square' and 'rand.S&H' type modulations | |||
<Cabbage> | |||
form caption("Filter LFO") size(790,170), pluginID("FLFO") | |||
image pos(0, 0), size(790,170), colour(0,0,0,170), shape("rounded"), outline("white"), line(4) | |||
rslider bounds( 10, 11, 70, 70), text("Freq."), colour( 30, 30, 30), trackercolour("black"), fontcolour("white"), channel("cf"), range(1, 20000, 300, 0.333) | |||
rslider bounds( 75, 11, 70, 70), text("Res."), colour( 30, 30, 30), trackercolour("black"), fontcolour("white"), channel("res"), range(0,1.00,0.75) | |||
rslider bounds(140, 11, 70, 70), text("Mix"), colour( 30, 30, 30), trackercolour("black"), fontcolour("white"), channel("mix"), range(0,1.00,1) | |||
rslider bounds(205, 11, 70, 70), text("Level"), colour( 30, 30, 30), trackercolour("black"), fontcolour("white"), channel("level"), range(0, 1.00, 0.2) | |||
combobox bounds( 20, 90, 100, 18), channel("model"), value(6), text("Tone","Butterworth","Moogladder","cl-Butterworth","cl-Chebychev I","resonz","phaser2","resony") | |||
label bounds( 44,108, 80, 12), text("MODEL"), fontcolour("white") | |||
combobox bounds(140, 90, 100, 18), channel("type"), value(1), text("Low-pass","High-pass") | |||
label bounds(169,108, 80, 12), text("TYPE"), fontcolour("white") | |||
combobox bounds( 20,127,100, 18), channel("input"), value(2), text("Live","Tone","Noise") | |||
label bounds( 46,145,100, 12), text("INPUT"), fontcolour("white") | |||
button bounds(140,127, 80, 18), colour("Green"), text("RESYNC.", "RESYNC."), channel("resync"), value(1) | |||
; controls pertaining to the setup of clfilt accessed in a pop-up panel. | |||
groupbox bounds(280, 15,150, 90), colour("black"), plant("clfilt"), line(0), popup(1);, fontcolour("white") | |||
{ | |||
rslider bounds( 5, 16, 70, 70), text("N.Poles"), colour( 30 , 30, 30), trackercolour("black"), FontColour("white"), channel("npol"), range(2, 80, 2, 1, 2) | |||
rslider bounds( 75, 16, 70, 70), text("Ripple"), colour( 30 , 30, 30), trackercolour("black"), FontColour("white"), channel("pbr"), range(0.1, 50.00, 1, 0.5, 0.001) | |||
} | |||
; controls pertaining to the setup of phaser2 accessed in a pop-up panel. | |||
groupbox bounds(280, 55,315, 90), colour("black"), plant("phaser2"), line(0), popup(1);, fontcolour(white) | |||
{ | |||
rslider bounds( 5, 16, 70, 70), text("Q"), channel("q"), range(0.0001,4,3), colour( 30 , 30, 30), trackercolour("black"), FontColour("white") | |||
rslider bounds( 75, 16, 70, 70), text("N.Ords."), channel("ord"), range(1, 256, 8, 0.5,1), colour( 30 , 30, 30), trackercolour("black"), FontColour("white") | |||
label bounds(160, 20, 60,12), text("Sep. Mode") | |||
combobox bounds(150, 34, 80,25), channel("mode"), size(100,50), value(1), text("Equal", "Power"), colour( 30 , 30, 30), trackercolour("black"), FontColour("white") | |||
rslider bounds(240, 16, 70, 70), text("Separation"), channel("sep"), range(-3, 3.00, 0.9), colour( 30 , 30, 30), trackercolour("black"), FontColour("white") | |||
} | |||
; controls pertaining to the setup of resony accessed in a pop-up panel. | |||
groupbox bounds(280, 95,565, 90), colour("black"), plant("resony"), line(0), popup(1);, fontcolour(white) | |||
{ | |||
rslider bounds( 5, 16, 70, 70), text("BW."), fontcolour("white"), channel("bw"), range(0.01, 1000, 13, 0.5), colour( 30 , 30, 30), trackercolour("black") | |||
rslider bounds( 75, 16, 70, 70), text("Num."), fontcolour("white"), channel("num"), range(1, 80, 10, 1,1), colour( 30 , 30, 30), trackercolour("black") | |||
rslider bounds(145, 16, 70, 70), text("Sep.oct."), fontcolour("white"), channel("sepR"), range(-11, 11, 2), colour( 30 , 30, 30), trackercolour("black") | |||
rslider bounds(215, 16, 70, 70), text("Sep.semi."), fontcolour("white"), channel("sepR2"), range(-48, 48, 24,1,1), colour( 30 , 30, 30), trackercolour("black") | |||
combobox bounds(285, 10,130, 70), caption("Scaling Mode"), channel("scl"), value(2), text("none", "peak response", "RMS") | |||
combobox bounds(425, 10,130, 70), caption("Separation Mode"), channel("sepmode"), value(1), text("octs.total", "hertz", "octs.adjacent") | |||
} | |||
;checkbox bounds(400, 50,100, 15), text("Balance") channel("balance"), FontColour("white"), colour("yellow") value(0) | |||
line bounds(390, 10, 2,150), colour("Grey") | |||
;LFO | |||
label bounds(405, 11, 45, 17), text("LFO 1"), fontcolour("white") | |||
combobox bounds(405, 50, 100, 18), channel("LFOtype"), value(3), text("Sine","Triangle","Square[bi]","Square[uni]","Saw Up","Saw Down","Rand.S&H","Rand.Spline") | |||
label bounds(425, 54, 80, 12), text("LFO-Shape"), fontcolour("white") | |||
rslider bounds(515, 11, 70, 70), text("Amp"), colour( 30, 30 ,30), trackercolour("black"), fontcolour("white"), channel("LFOamp"), range(0, 9.00, 0.67) | |||
rslider bounds(580, 11, 70, 70), text("Rate"), colour( 30, 30 ,30), trackercolour("black"), fontcolour("white"), channel("LFOBPM"), range(0, 480, 60, 1, 1) | |||
rslider bounds(645, 11, 70, 70), text("Rate Div."),colour( 30, 30 ,30), trackercolour("black"), fontcolour("white"), channel("LFOBPMDiv"), range(1, 64, 1, 1, 1) | |||
rslider bounds(710, 11, 70, 70), text("Smoothing"),colour( 30, 30 ,30), trackercolour("black"), fontcolour("white"), channel("LFOport"), range(0, 0.1, 0.005, 0.25, 0.000001) | |||
checkbox bounds(405, 31, 80, 12), text("Link Rates"), channel("RateLink"),colour(yellow), fontcolour("white"), value(0) | |||
;LFO2 | |||
label bounds(405, 91, 45, 17), text("LFO 2"), fontcolour("white") | |||
combobox bounds(405,130, 100, 18), channel("LFOtype2"), value(8), text("Sine","Triangle","Square[bi]","Square[uni]","Saw Up","Saw Down","Rand.S&H","Rand.Spline") | |||
label bounds(425,134, 80, 12), text("Shape"), fontcolour("white") | |||
rslider bounds(515, 91, 70, 70), text("Amp"), colour( 30, 30 ,30), trackercolour("black"), fontcolour("white"), channel("LFOamp2"), range(0, 9.00, 2.5) | |||
rslider bounds(580, 91, 70, 70), text("Rate"),colour( 30, 30 ,30), trackercolour("black"), fontcolour("white"), channel("LFOBPM2"), range(0, 480, 1, 1, 1) | |||
rslider bounds(645, 91, 70, 70), text("Rate Div."),colour( 30, 30 ,30), trackercolour("black"), fontcolour("white"), channel("LFOBPMDiv2"), range(1, 64, 1, 1, 1) | |||
rslider bounds(710, 91, 70, 70), text("Smoothing"),colour( 30, 30 ,30), trackercolour("black"), fontcolour("white"), channel("LFOport2"), range(0, 0.1, 0.001, 0.25, 0.000001) | |||
checkbox bounds(405,111, 80, 12), text("Link Rates"), channel("RateLink"),colour(yellow), fontcolour("white"), value(0) | |||
label bounds(220,150, 200, 12), text("Author: Iain McCurdy |2013|"), FontColour("grey") | |||
</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 (2013) | |||
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 IF 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 IF 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,1 | |||
kcf chnget "cf" ; | |||
kcf portk kcf,kporttime*0.05 | |||
kres chnget "res" ; | |||
kmodel chnget "model" ; | |||
ktype chnget "type" ; | |||
kresync chnget "resync" ; | |||
kmix chnget "mix" ; | |||
klevel chnget "level" ; | |||
kpbr chnget "pbr" ; | |||
kpbr init 1 | |||
knpol chnget "npol" ; | |||
knpol init 2 | |||
kq chnget "q" ; | |||
kmode chnget "mode" ; | |||
kmode init 1 | |||
kmode init i(kmode)-1 | |||
ksep chnget "sep" ; | |||
kfeedback chnget "feedback" ; | |||
kord chnget "ord" ; | |||
;resony | |||
kbw chnget "bw" | |||
knum chnget "num" | |||
ksepR chnget "sepR" | |||
ksepR2 chnget "sepR2" | |||
ksepmode chnget "sepmode" | |||
ksepmode = ksepmode - 1 | |||
ksepmode init 1 | |||
kscl chnget "scl" | |||
kscl = kscl - 1 | |||
kscl init 1 | |||
;kbalance chnget "balance" ; | |||
kLFOtype chnget "LFOtype" | |||
kLFOamp chnget "LFOamp" | |||
kLFOamp portk kLFOamp, kporttime*0.05 | |||
kLFOBPM chnget "LFOBPM" | |||
kLFOBPMDiv chnget "LFOBPMDiv" | |||
kLFOcps = (kLFOBPM*4)/(60*kLFOBPMDiv) | |||
kLFOport chnget "LFOport" | |||
kLFOtype2 chnget "LFOtype2" | |||
kLFOamp2 chnget "LFOamp2" | |||
kLFOamp2 portk kLFOamp2, kporttime*0.05 | |||
kLFOBPM2 chnget "LFOBPM2" | |||
kLFOBPMDiv2 chnget "LFOBPMDiv2" | |||
kLFOcps2 = (kLFOBPM2*4)/(60*kLFOBPMDiv2) | |||
kLFOport2 chnget "LFOport2" | |||
kRateLink chnget "RateLink" | |||
if kRateLink=1 then | |||
ktrig1 changed kLFOBPM | |||
ktrig2 changed kLFOBPM2 | |||
if ktrig1=1 then | |||
chnset kLFOBPM,"LFOBPM2" | |||
elseif ktrig2=1 then | |||
chnset kLFOBPM2,"LFOBPM" | |||
endif | |||
endif | |||
/* INPUT */ | |||
kinput chnget "input" | |||
if kinput=1 then | |||
aL,aR ins | |||
elseif kinput=2 then | |||
aL vco2 0.2, 150 | |||
aR = aL | |||
else | |||
aL pinkish 0.2 | |||
aR pinkish 0.2 | |||
endif | |||
; RETRIGGERING FOR I-RATE VARIABLE | |||
kLFOtype init 1 | |||
kLFOtype2 init 1 | |||
ktrig changed knpol,kpbr,kLFOtype,kLFOtype2,kmodel,ktype,kord,kmode, kscl, knum, ksepmode, kresync,kLFOBPMDiv,kLFOBPMDiv2,kRateLink | |||
if ktrig==1 then | |||
reinit UPDATE | |||
endif | |||
UPDATE: | |||
; LFO | |||
if i(kLFOtype)==7 then | |||
klfo randomh -kLFOamp, kLFOamp, kLFOcps | |||
elseif i(kLFOtype)==8 then | |||
klfo jspline kLFOamp, kLFOcps, kLFOcps*5 | |||
else | |||
klfo lfo kLFOamp, kLFOcps, i(kLFOtype)-1 | |||
endif | |||
klfo portk klfo,kporttime*kLFOport | |||
;kcf limit kcf * octave(klfo),20,sr/2 | |||
; LFO2 | |||
if i(kLFOtype2)==7 then | |||
klfo2 randomh -kLFOamp2, kLFOamp2, kLFOcps2 | |||
elseif i(kLFOtype2)==8 then | |||
klfo2 jspline kLFOamp2, kLFOcps2, kLFOcps2*5 | |||
else | |||
klfo2 lfo kLFOamp2, kLFOcps2, i(kLFOtype2)-1 | |||
endif | |||
klfo2 portk klfo2,kporttime*kLFOport2 | |||
kcf limit kcf * octave(klfo) * octave(klfo2),20,sr/2 | |||
; FILTER MODEL SELECT | |||
if i(kmodel)==1 then | |||
if i(ktype)==1 then ; tone | |||
aFiltL tone aL, kcf | |||
aFiltR tone aR, kcf | |||
else | |||
aFiltL atone aL, kcf | |||
aFiltR atone aR, kcf | |||
endif | |||
elseif i(kmodel)==2 then ; butterworth | |||
if i(ktype)==1 then | |||
aFiltL butlp aL, kcf | |||
aFiltR butlp aR, kcf | |||
else | |||
aFiltL buthp aL, kcf | |||
aFiltR buthp aR, kcf | |||
endif | |||
elseif i(kmodel)==3 then ; moogladder | |||
kres scale kres,0.95,0 | |||
aFiltL moogladder aL,kcf,kres | |||
aFiltR moogladder aR,kcf,kres | |||
elseif i(kmodel)==4 then ; cl-butterworth | |||
if i(ktype)==1 then | |||
aFiltL clfilt aL, kcf, 0, i(knpol) | |||
aFiltR clfilt aR, kcf, 0, i(knpol) | |||
else | |||
aFiltL clfilt aL, kcf, 1, i(knpol) | |||
aFiltR clfilt aR, kcf, 1, i(knpol) | |||
endif | |||
elseif i(kmodel)==5 then ; cl-chebychev I | |||
if i(ktype)==1 then | |||
aFiltL clfilt aL, kcf, 0, i(knpol), 1, i(kpbr) | |||
aFiltR clfilt aR, kcf, 0, i(knpol), 1, i(kpbr) | |||
else | |||
aFiltL clfilt aL, kcf, 1, i(knpol), 1, i(kpbr) | |||
aFiltR clfilt aR, kcf, 1, i(knpol), 1, i(kpbr) | |||
endif | |||
elseif i(kmodel)==6 then ; resonz | |||
kres logcurve kres,4 | |||
kbw scale 1-kres,3,0.1 | |||
aFiltL resonz aL, kcf, kcf*kbw, 1 | |||
aFiltR resonz aR, kcf, kcf*kbw, 1 | |||
elseif i(kmodel)==7 then ; phaser2 | |||
kfeedback scale kres,0.99,0 | |||
aFiltL phaser2 aL, kcf, kq, kord, kmode, ksep, kfeedback ; PHASER2 IS APPLIED TO THE LEFT CHANNEL | |||
aFiltR phaser2 aR, kcf, kq, kord, kmode, ksep, kfeedback ; PHASER1 IS APPLIED TO THE RIGHT CHANNEL | |||
elseif i(kmodel)==8 then ; resony | |||
;CALL resony2 UDO | |||
aFiltL resony2 aL, kcf, kbw, i(knum), ksepR , i(ksepmode), i(kscl) | |||
aFiltR resony2 aR, kcf, kbw, i(knum), ksepR , i(ksepmode), i(kscl) | |||
endif | |||
rireturn | |||
/* | |||
if kbalance==1 then | |||
aFiltL balance aFiltL,aL | |||
aFiltR balance aFiltR,aR | |||
endif | |||
*/ | |||
aL ntrpol aL,aFiltL,kmix | |||
aR ntrpol aR,aFiltR,kmix | |||
outs aL*klevel,aR*klevel | |||
endin | |||
instr UpdateWidgets | |||
ksepR chnget "sepR" | |||
ksepR2 chnget "sepR2" | |||
ktrig1 changed ksepR | |||
ktrig2 changed ksepR2 | |||
if ktrig1==1 then | |||
chnset ksepR*12, "sepR2" | |||
elseif ktrig2==1 then | |||
chnset ksepR2/12, "sepR" | |||
endif | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [3600*24*7] | |||
i "UpdateWidgets" 0 [3600*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,89 @@ | |||
<Cabbage> | |||
form caption("Flanger") size(510, 90), pluginID("flan") | |||
image pos(0, 0), size(510, 90), colour("lightgreen"), shape("rounded"), outline("white"), line(4) | |||
rslider bounds( 5, 10, 70, 70), text("Rate"), channel("rate"), range(0.001, 40, 0.15, 0.5, 0.001), colour("DarkGreen"), trackercolour( 0, 30, 0), fontcolour( 0, 30, 0) | |||
rslider bounds( 75, 10, 70, 70), text("Depth"), channel("depth"), range(0, 0.01, 0.005,1,0.0001), colour("DarkGreen"), trackercolour( 0, 30, 0), fontcolour( 0, 30, 0) | |||
rslider bounds(145, 10, 70, 70), text("Delay"), channel("delay"), range(0.0001, 0.1, 0.0001, 0.5, 0.0001), colour("DarkGreen"), trackercolour( 0, 30, 0), fontcolour( 0, 30, 0) | |||
rslider bounds(215, 10, 70, 70), text("Feedback"), channel("fback"), range(-1, 1, 0), colour("DarkGreen"), trackercolour( 0, 30, 0), fontcolour( 0, 30, 0) | |||
rslider bounds(285, 10, 70, 70), text("Mix"), channel("mix"), range(0, 1.00, 0.5), colour("DarkGreen"), trackercolour( 0, 30, 0), fontcolour( 0, 30, 0) | |||
checkbox bounds(355, 10, 80, 15), colour("yellow"), channel("ThruZero"), value(1), text("Thru.Zero"), fontcolour( 0, 30, 0) | |||
label bounds(365, 37, 70, 12), text("LFO Shape"), fontcolour( 0, 30, 0) | |||
combobox bounds(355, 50, 80, 20), channel("lfoshape"), size(100,50), value(1), text("parabola", "sine", "triangle", "randomi", "randomh") | |||
rslider bounds(435, 10, 70, 70), text("Level"), channel("level"), range(0, 1.00, 1), colour("DarkGreen"), trackercolour( 0, 30, 0), fontcolour( 0, 30, 0) | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
;Author: Iain McCurdy (2012) | |||
opcode Flanger,a,akkkkk | |||
ain,krate,kdepth,kdelay,kfback,klfoshape xin ;read in input arguments | |||
iparabola ftgentmp 0, 0, 131072, 19, 0.5, 1, 180, 1 ;u-shape parabola for lfo | |||
isine ftgentmp 0, 0, 131072, 19, 1, 0.5, 0, 0.5 ;sine-shape for lfo | |||
itriangle ftgentmp 0, 0, 131072, 7, 0,131072/2,1,131072/2,0;triangle-shape for lfo | |||
adlt interp kdelay ;a new a-rate variable 'adlt' is created by interpolating the k-rate variable 'kdlt' | |||
if klfoshape==1 then | |||
amod oscili kdepth, krate, iparabola ;oscillator that makes use of the positive domain only u-shape parabola | |||
elseif klfoshape==2 then | |||
amod oscili kdepth, krate, isine ;oscillator that makes use of the positive domain only sine wave | |||
elseif klfoshape==3 then | |||
amod oscili kdepth, krate, itriangle ;oscillator that makes use of the positive domain only triangle | |||
elseif klfoshape==4 then | |||
amod randomi 0,kdepth,krate,1 | |||
else | |||
amod randomh 0,kdepth,krate,1 | |||
endif | |||
adlt sum adlt, amod ;static delay time and modulating delay time are summed | |||
adelsig flanger ain, adlt, kfback , 1.2 ;flanger signal created | |||
adelsig dcblock adelsig | |||
aout sum ain*0.5, adelsig*0.5 ;create dry/wet mix | |||
xout aout ;send audio back to caller instrument | |||
endop | |||
instr 1 | |||
krate chnget "rate" ;read in widgets | |||
kdepth chnget "depth" | |||
kdelay chnget "delay" | |||
kfback chnget "fback" | |||
klevel chnget "level" | |||
klfoshape chnget "lfoshape" | |||
kThruZero chnget "ThruZero" | |||
kmix chnget "mix" | |||
;a1,a2 ins ;read live stereo audio input | |||
a1 pinkish 0.2 ;for testing... | |||
a2 pinkish 0.2 | |||
kporttime linseg 0,0.001,0.1 | |||
kdelay portk kdelay,kporttime | |||
afla1 Flanger a1,krate,kdepth,kdelay,kfback,klfoshape ;call udo (left channel) | |||
afla2 Flanger a2,krate,kdepth,kdelay,kfback,klfoshape ;call udo (right channel) | |||
if kThruZero==1 then ;if 'Thru.Zero' mode is selected... | |||
a1 delay a1,0.0001 | |||
a2 delay a2,0.0001 | |||
a1 ntrpol -a1,afla1,kmix ;invert delayed dry signal and mix with flanger signal | |||
a2 ntrpol -a2,afla2,kmix | |||
else ;otherwise... (standard flanger) | |||
a1 ntrpol a1,afla1,kmix ;create mix between dry signal and flanger signal | |||
a2 ntrpol a2,afla2,kmix | |||
endif | |||
outs a1*klevel,a2*klevel ;send audio to outputs, scale amplitude according to GUI knob value | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [60*60*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,286 @@ | |||
FormantFilter.csd | |||
reson 1 uses reson with scaling method 1. | |||
reson 2 uses reson with scaling method 2. | |||
'gain' controls the gain the the bandpass filtered sound only. | |||
'BW.Mult' is a factor which all five bandwidth values are multiplied by. | |||
'Freq.Mult.' is a factor by which all cutoff frequencies are multiplied by. | |||
<Cabbage> | |||
form caption("Formant Filter"), colour("SlateGrey"), size(550, 300), pluginID("form") | |||
xypad bounds(5, 5, 350, 260), channel("x", "y"), rangex(0, 1, 0.5), rangey(0, 1, 0), text("upper edge:A E I | lower :U O"), fontcolour("white") | |||
vslider bounds(360, 0, 30,140), text("f1"), channel("f1"), range(0, 1.00, 1), fontcolour("white") | |||
vslider bounds(380, 0, 30,140), text("f2"), channel("f2"), range(0, 1.00, 1), fontcolour("white") | |||
vslider bounds(400, 0, 30,140), text("f3"), channel("f3"), range(0, 1.00, 1), fontcolour("white") | |||
vslider bounds(420, 0, 30,140), text("f4"), channel("f4"), range(0, 1.00, 1), fontcolour("white") | |||
vslider bounds(440, 0, 30,140), text("f5"), channel("f5"), range(0, 1.00, 1), fontcolour("white") | |||
combobox bounds(365, 155,100, 20), channel("voice"), value(1), text("bass", "tenor", "countertenor", "alto", "soprano") | |||
combobox bounds(365, 185,100, 20), channel("filter"), value(1), text("reson 1", "reson 2", "butterworth") | |||
checkbox bounds(365, 215,100, 20), colour("yellow"), channel("balance"), value(0), text("Balance"), fontcolour("white") | |||
button bounds(365, 245,100, 20), text("Live Input","Noise Input"), channel("input"), value(0), fontcolour("lime") | |||
rslider bounds(480, 5, 60, 60), text("BW.Mult"), channel("BWMlt"), range(0.01, 4, 1, 0.4), fontcolour("white") | |||
rslider bounds(480, 70, 60, 60), text("Freq.Mult"), channel("FrqMlt"), range(0.25, 4, 1, 0.4), fontcolour("white") | |||
rslider bounds(480,140, 60, 60), text("Mix"), channel("mix"), range(0, 1.00, 1), fontcolour("white") | |||
rslider bounds(480,210, 60, 60), text("Gain"), channel("gain"), range(0, 5.00, 1, 0.5), fontcolour("white") | |||
image bounds( 5, 275, 350, 18), colour(75, 85, 90, 100), plant("credit"), line(0){ | |||
label bounds(0.03, 0.1, .6, .8), text("Author: Iain McCurdy |2012|"), colour("white") | |||
} | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-dm0 -n -+rtmidi=null -M0 | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
;Author: Iain McCurdy (2012) | |||
;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 | |||
giBFA ftgen 0, 0, 8, -2, 4, 600, 400, 250, 350 ;FREQ | |||
giBFE ftgen 0, 0, 8, -2, 4, 1040, 1620, 1750, 600 ;FREQ | |||
giBFI ftgen 0, 0, 8, -2, 4, 2250, 2400, 2600, 2400 ;FREQ | |||
giBFO ftgen 0, 0, 8, -2, 4, 2450, 2800, 3050, 2675 ;FREQ | |||
giBFU ftgen 0, 0, 8, -2, 4, 2750, 3100, 3340, 2950 ;FREQ | |||
giBDbA ftgen 0, 0, 8, -2, 4, 0, 0, 0, 0 ;dB | |||
giBDbE ftgen 0, 0, 8, -2, 4, -7, -12, -30, -20 ;dB | |||
giBDbI ftgen 0, 0, 8, -2, 4, -9, -9, -16, -32 ;dB | |||
giBDbO ftgen 0, 0, 8, -2, 4, -9, -12, -22, -28 ;dB | |||
giBDbU ftgen 0, 0, 8, -2, 4, -20, -18, -28, -36 ;dB | |||
giBBWA ftgen 0, 0, 8, -2, 4, 60, 40, 60, 40 ;BAND WIDTH | |||
giBBWE ftgen 0, 0, 8, -2, 4, 70, 80, 90, 80 ;BAND WIDTH | |||
giBBWI ftgen 0, 0, 8, -2, 4, 110, 100, 100, 100 ;BAND WIDTH | |||
giBBWO ftgen 0, 0, 8, -2, 4, 120, 120, 120, 120 ;BAND WIDTH | |||
giBBWU ftgen 0, 0, 8, -2, 4, 130, 120, 120, 120 ;BAND WIDTH | |||
;TENOR | |||
giTFA ftgen 0, 0, 8, -2, 5, 650, 400, 290, 400, 350 ;FREQ | |||
giTFE ftgen 0, 0, 8, -2, 5, 1080, 1700, 1870, 800, 600 ;FREQ | |||
giTFI ftgen 0, 0, 8, -2, 5, 2650, 2600, 2800, 2600, 2700 ;FREQ | |||
giTFO ftgen 0, 0, 8, -2, 5, 2900, 3200, 3250, 2800, 2900 ;FREQ | |||
giTFU ftgen 0, 0, 8, -2, 5, 3250, 3580, 3540, 3000, 3300 ;FREQ | |||
giTDbA ftgen 0, 0, 8, -2, 5, 0, 0, 0, 0, 0 ;dB | |||
giTDbE ftgen 0, 0, 8, -2, 5, -6, -14, -15, -10, -20 ;dB | |||
giTDbI ftgen 0, 0, 8, -2, 5, -7, -12, -18, -12, -17 ;dB | |||
giTDbO ftgen 0, 0, 8, -2, 5, -8, -14, -20, -12, -14 ;dB | |||
giTDbU ftgen 0, 0, 8, -2, 5, -22, -20, -30, -26, -26 ;dB | |||
giTBWA ftgen 0, 0, 8, -2, 5, 80, 70, 40, 40, 40 ;BAND WIDTH | |||
giTBWE ftgen 0, 0, 8, -2, 5, 90, 80, 90, 80, 60 ;BAND WIDTH | |||
giTBWI ftgen 0, 0, 8, -2, 5, 120, 100, 100, 100, 100 ;BAND WIDTH | |||
giTBWO ftgen 0, 0, 8, -2, 5, 130, 120, 120, 120, 120 ;BAND WIDTH | |||
giTBWU ftgen 0, 0, 8, -2, 5, 140, 120, 120, 120, 120 ;BAND WIDTH | |||
;COUNTER TENOR | |||
giCTFA ftgen 0, 0, 8, -2, 5, 660, 440, 270, 430, 370 ;FREQ | |||
giCTFE ftgen 0, 0, 8, -2, 5, 1120, 1800, 1850, 820, 630 ;FREQ | |||
giCTFI ftgen 0, 0, 8, -2, 5, 2750, 2700, 2900, 2700, 2750 ;FREQ | |||
giCTFO ftgen 0, 0, 8, -2, 5, 3000, 3000, 3350, 3000, 3000 ;FREQ | |||
giCTFU ftgen 0, 0, 8, -2, 5, 3350, 3300, 3590, 3300, 3400 ;FREQ | |||
giTBDbA ftgen 0, 0, 8, -2, 5, 0, 0, 0, 0, 0 ;dB | |||
giTBDbE ftgen 0, 0, 8, -2, 5, -6, -14, -24, -10, -20 ;dB | |||
giTBDbI ftgen 0, 0, 8, -2, 5, -23, -18, -24, -26, -23 ;dB | |||
giTBDbO ftgen 0, 0, 8, -2, 5, -24, -20, -36, -22, -30 ;dB | |||
giTBDbU ftgen 0, 0, 8, -2, 5, -38, -20, -36, -34, -30 ;dB | |||
giTBWA ftgen 0, 0, 8, -2, 5, 80, 70, 40, 40, 40 ;BAND WIDTH | |||
giTBWE ftgen 0, 0, 8, -2, 5, 90, 80, 90, 80, 60 ;BAND WIDTH | |||
giTBWI ftgen 0, 0, 8, -2, 5, 120, 100, 100, 100, 100 ;BAND WIDTH | |||
giTBWO ftgen 0, 0, 8, -2, 5, 130, 120, 120, 120, 120 ;BAND WIDTH | |||
giTBWU ftgen 0, 0, 8, -2, 5, 140, 120, 120, 120, 120 ;BAND WIDTH | |||
;ALTO | |||
giAFA ftgen 0, 0, 8, -2, 5, 800, 400, 350, 450, 325 ;FREQ | |||
giAFE ftgen 0, 0, 8, -2, 5, 1150, 1600, 1700, 800, 700 ;FREQ | |||
giAFI ftgen 0, 0, 8, -2, 5, 2800, 2700, 2700, 2830, 2530 ;FREQ | |||
giAFO ftgen 0, 0, 8, -2, 5, 3500, 3300, 3700, 3500, 2500 ;FREQ | |||
giAFU ftgen 0, 0, 8, -2, 5, 4950, 4950, 4950, 4950, 4950 ;FREQ | |||
giADbA ftgen 0, 0, 8, -2, 5, 0, 0, 0, 0, 0 ;dB | |||
giADbE ftgen 0, 0, 8, -2, 5, -4, -24, -20, -9, -12 ;dB | |||
giADbI ftgen 0, 0, 8, -2, 5, -20, -30, -30, -16, -30 ;dB | |||
giADbO ftgen 0, 0, 8, -2, 5, -36, -35, -36, -28, -40 ;dB | |||
giADbU ftgen 0, 0, 8, -2, 5, -60, -60, -60, -55, -64 ;dB | |||
giABWA ftgen 0, 0, 8, -2, 5, 50, 60, 50, 70, 50 ;BAND WIDTH | |||
giABWE ftgen 0, 0, 8, -2, 5, 60, 80, 100, 80, 60 ;BAND WIDTH | |||
giABWI ftgen 0, 0, 8, -2, 5, 170, 120, 120, 100, 170 ;BAND WIDTH | |||
giABWO ftgen 0, 0, 8, -2, 5, 180, 150, 150, 130, 180 ;BAND WIDTH | |||
giABWU ftgen 0, 0, 8, -2, 5, 200, 200, 200, 135, 200 ;BAND WIDTH | |||
;SOPRANO | |||
giSFA ftgen 0, 0, 8, -2, 5, 800, 350, 270, 450, 325 ;FREQ | |||
giSFE ftgen 0, 0, 8, -2, 5, 1150, 2000, 2140, 800, 700 ;FREQ | |||
giSFI ftgen 0, 0, 8, -2, 5, 2900, 2800, 2950, 2830, 2700 ;FREQ | |||
giSFO ftgen 0, 0, 8, -2, 5, 3900, 3600, 3900, 3800, 3800 ;FREQ | |||
giSFU ftgen 0, 0, 8, -2, 5, 4950, 4950, 4950, 4950, 4950 ;FREQ | |||
giSDbA ftgen 0, 0, 8, -2, 5, 0, 0, 0, 0, 0 ;dB | |||
giSDbE ftgen 0, 0, 8, -2, 5, -6, -20, -12, -11, -16 ;dB | |||
giSDbI ftgen 0, 0, 8, -2, 5, -32, -15, -26, -22, -35 ;dB | |||
giSDbO ftgen 0, 0, 8, -2, 5, -20, -40, -26, -22, -40 ;dB | |||
giSDbU ftgen 0, 0, 8, -2, 5, -50, -56, -44, -50, -60 ;dB | |||
giSBWA ftgen 0, 0, 8, -2, 5, 80, 60, 60, 70, 50 ;BAND WIDTH | |||
giSBWE ftgen 0, 0, 8, -2, 5, 90, 90, 90, 80, 60 ;BAND WIDTH | |||
giSBWI ftgen 0, 0, 8, -2, 5, 120, 100, 100, 100, 170 ;BAND WIDTH | |||
giSBWO ftgen 0, 0, 8, -2, 5, 130, 150, 120, 130, 180 ;BAND WIDTH | |||
giSBWU ftgen 0, 0, 8, -2, 5, 140, 200, 120, 135, 200 ;BAND WIDTH | |||
instr 1 | |||
gkx chnget "x" | |||
gky chnget "y" | |||
gkf1 chnget "f1" | |||
gkf2 chnget "f2" | |||
gkf3 chnget "f3" | |||
gkf4 chnget "f4" | |||
gkf5 chnget "f5" | |||
gkvoice chnget "voice" | |||
gkvoice init 1 | |||
gkBWMlt chnget "BWMlt" | |||
gkFrqMlt chnget "FrqMlt" | |||
gkmix chnget "mix" | |||
gkgain chnget "gain" | |||
gkfilter chnget "filter" | |||
gkbalance chnget "balance" | |||
gkinput chnget "input" | |||
endin | |||
instr 2 | |||
kporttime linseg 0,0.001,0.1 | |||
if gkinput==0 then | |||
asigL,asigR ins | |||
else | |||
asigL pinkish 1 | |||
asigR pinkish 1 | |||
endif | |||
kx portk gkx,kporttime | |||
ky portk gky,kporttime | |||
kSwitch changed gkvoice ;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: | |||
;A TEXT MACRO IS DEFINED THAT WILL BE THE CODE FOR DERIVING DATA FOR EACH FORMANT. A MACRO IS USED TO AVOID HAVING TO USING CODE REPETITION AND TO EASIER FACICLITATE CODE MODIFICATION | |||
#define FORMANT_DATA(N) | |||
# | |||
invals table 0, giBFA+((i(gkvoice)-1)*15)+$N-1 ;NUMBER OF DATA ELEMENTS IN EACH TABLE | |||
invals = invals-1 ; | |||
kfreq$N_U tablei 1+(kx*(3/5)*invals),giBFA+((i(gkvoice)-1)*15)+$N-1 ;READ DATA FOR FREQUENCY (UPPER EDGE OF PANEL) | |||
kfreq$N_L tablei 1+(((1-kx)*(1/5))+(4/5)*invals),giBFA+((i(gkvoice)-1)*15)+$N-1 ;READ DATA FOR FREQUENCY (LOWER EDGE OF PANEL) | |||
kfreq$N ntrpol kfreq$N_L, kfreq$N_U, ky ;INTERPOLATE BETWEEN UPPER VALUE AND LOWER VALUE (DETERMINED BY Y-LOCATION ON PANEL) | |||
kfreq$N = kfreq$N * gkFrqMlt ;MULTIPLY FREQUENCY VALUE BY VALUE FROM 'Frequency Multiply' SLIDER | |||
kdbamp$N_U tablei 1+(kx*(3/5)*invals),giBDbA+((i(gkvoice)-1)*15)+$N-1 ;READ DATA FOR INTENSITY (UPPER EDGE OF PANEL) | |||
kdbamp$N_L tablei 1+(((1-kx)*(1/5))+(4/5)*invals),giBDbA+((i(gkvoice)-1)*15)+$N-1 ;READ DATA FOR INTENSITY (LOWER EDGE OF PANEL) | |||
kdbamp$N ntrpol kdbamp$N_L, kdbamp$N_U, ky ;INTERPOLATE BETWEEN UPPER VALUE AND LOWER VALUE (DETERMINED BY Y-LOCATION ON PANEL) | |||
kbw$N_U tablei 1+(kx*(3/5)*invals),giBBWA+((i(gkvoice)-1)*15)+$N-1 ;READ DATA FOR BANDWIDTH (UPPER EDGE OF PANEL) | |||
kbw$N_L tablei 1+(((1-kx)*(1/5))+(4/5)*invals),giBBWA+((i(gkvoice)-1)*15)+$N-1 ;READ DATA FOR BANDWIDTH (LOWER EDGE OF PANEL) | |||
kbw$N ntrpol kbw$N_L, kbw$N_U, ky ;INTERPOLATE BETWEEN UPPER VALUE AND LOWER VALUE (DETERMINED BY Y-LOCATION ON PANEL) | |||
kbw$N = kbw$N * gkBWMlt ;MULTIPLY BANDWIDTH VALUE BY VALUE FROM 'Bandwidth Multiply' SLIDER | |||
# ;END OF MACRO! | |||
;READING DATA FOR FORMANTS (MACROS IMPLEMENTED) | |||
$FORMANT_DATA(1) | |||
$FORMANT_DATA(2) | |||
$FORMANT_DATA(3) | |||
$FORMANT_DATA(4) | |||
$FORMANT_DATA(5) | |||
rireturn ;RETURN FROM REINITIALISATION PASS TO PERFORMANCE TIME PASSES | |||
if gkfilter==1 then | |||
aBPF1L reson asigL, kfreq1, kbw1, 1 ;FORMANT 1 | |||
aBPF1R reson asigR, kfreq1, kbw1, 1 ;FORMANT 1 | |||
; | |||
aBPF2L reson asigL, kfreq2, kbw2, 1 ;FORMANT 2 | |||
aBPF2R reson asigR, kfreq2, kbw2, 1 ;FORMANT 2 | |||
; | |||
aBPF3L reson asigL, kfreq3, kbw3, 1 ;FORMANT 3 | |||
aBPF3R reson asigR, kfreq3, kbw3, 1 ;FORMANT 3 | |||
; | |||
aBPF4L reson asigL, kfreq4, kbw4, 1 ;FORMANT 4 | |||
aBPF4R reson asigR, kfreq4, kbw4, 1 ;FORMANT 4 | |||
; | |||
aBPF5L reson asigL, kfreq5, kbw5, 1 ;FORMANT 5 | |||
aBPF5R reson asigR, kfreq5, kbw5, 1 ;FORMANT 5 | |||
elseif gkfilter==2 then | |||
aBPF1L reson asigL, kfreq1, kbw1, 2 ;FORMANT 1 | |||
aBPF1R reson asigR, kfreq1, kbw1, 2 ;FORMANT 1 | |||
; | |||
aBPF2L reson asigL, kfreq2, kbw2, 2 ;FORMANT 2 | |||
aBPF2R reson asigR, kfreq2, kbw2, 2 ;FORMANT 2 | |||
; | |||
aBPF3L reson asigL, kfreq3, kbw3, 2 ;FORMANT 3 | |||
aBPF3R reson asigR, kfreq3, kbw3, 2 ;FORMANT 3 | |||
; | |||
aBPF4L reson asigL, kfreq4, kbw4, 2 ;FORMANT 4 | |||
aBPF4R reson asigR, kfreq4, kbw4, 2 ;FORMANT 4 | |||
; | |||
aBPF5L reson asigL, kfreq5, kbw5, 2 ;FORMANT 5 | |||
aBPF5R reson asigR, kfreq5, kbw5, 2 ;FORMANT 5 | |||
else | |||
aBPF1L butbp asigL, kfreq1, kbw1 ;FORMANT 1 | |||
aBPF1R butbp asigR, kfreq1, kbw1 ;FORMANT 1 | |||
; | |||
aBPF2L butbp asigL, kfreq2, kbw2 ;FORMANT 2 | |||
aBPF2R butbp asigR, kfreq2, kbw2 ;FORMANT 2 | |||
; | |||
aBPF3L butbp asigL, kfreq3, kbw3 ;FORMANT 3 | |||
aBPF3R butbp asigR, kfreq3, kbw3 ;FORMANT 3 | |||
; | |||
aBPF4L butbp asigL, kfreq4, kbw4 ;FORMANT 4 | |||
aBPF4R butbp asigR, kfreq4, kbw4 ;FORMANT 4 | |||
; | |||
aBPF5L butbp asigL, kfreq5, kbw5 ;FORMANT 5 | |||
aBPF5R butbp asigR, kfreq5, kbw5 ;FORMANT 5 | |||
endif | |||
if gkbalance==1 then | |||
aBPF1L balance aBPF1L,asigL,0.1 | |||
aBPF1R balance aBPF1R,asigR,0.1 | |||
aBPF2L balance aBPF2L,asigL,0.1 | |||
aBPF2R balance aBPF2R,asigR,0.1 | |||
aBPF3L balance aBPF3L,asigL,0.1 | |||
aBPF3R balance aBPF3R,asigR,0.1 | |||
aBPF4L balance aBPF4L,asigL,0.1 | |||
aBPF4R balance aBPF4R,asigR,0.1 | |||
aBPF5L balance aBPF5L,asigL,0.1 | |||
aBPF5R balance aBPF5R,asigR,0.1 | |||
endif | |||
;FORMANTS ARE MIXED AND MULTIPLIED BOTH BY INTENSITY VALUES DERIVED FROM TABLES AND BY THE ON-SCREEN GAIN CONTROLS FOR EACH FORMANT | |||
aMixL sum aBPF1L*(ampdbfs(kdbamp1))*gkf1, aBPF2L*(ampdbfs(kdbamp2))*gkf2, aBPF3L*(ampdbfs(kdbamp3))*gkf3, aBPF4L*(ampdbfs(kdbamp4))*gkf4, aBPF5L*(ampdbfs(kdbamp5))*gkf5 | |||
aMixR sum aBPF1R*(ampdbfs(kdbamp1))*gkf1, aBPF2R*(ampdbfs(kdbamp2))*gkf2, aBPF3R*(ampdbfs(kdbamp3))*gkf3, aBPF4R*(ampdbfs(kdbamp4))*gkf4, aBPF5R*(ampdbfs(kdbamp5))*gkf5 | |||
aOutMixL ntrpol asigL, aMixL*gkgain, gkmix ;MIX BETWEEN DRY AND WET SIGNALS | |||
aOutMixR ntrpol asigR, aMixR*gkgain, gkmix ;MIX BETWEEN DRY AND WET SIGNALS | |||
outs aOutMixL, aOutMixR ;SEND AUDIO TO OUTPUTS | |||
endin | |||
instr 99 ; fix cabbage bug | |||
kon = 1 | |||
chnset kon,"f1" | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [3600*24*7] | |||
i 2 0 [3600*24*7] | |||
i 99 0 0.01 ; fix for cabbage bug | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,74 @@ | |||
<Cabbage> | |||
form caption("HRTF 3D") size(365, 275) | |||
image pos(0, 0), size(365, 236), colour(50, 20, 0), shape("rounded"), outline("white"), line(4) | |||
xypad bounds(6, 6, 250, 224), channel("Az", "Elev"), text("X=Azimuth : Y=Elev."), rangex(-180, 180, 0), rangey(-40, 90, 0) | |||
checkbox bounds(265, 6, 80, 12), channel("TestSound"), FontColour("white"), value(1), text("Test Sound"), colour(yellow) | |||
combobox bounds(265, 20, 90,25), channel("type"), value(2), text("hrtfmove", "hrtfmove2") | |||
hslider bounds(265, 50, 90,55), channel("L_R_In"), range(0, 1.00, 0), caption("L/R In") | |||
combobox bounds(265,110, 90,60), channel("overlap"), value(3), text("1", "2", "4", "8", "16", "32", "64"), caption("Overlap") | |||
hslider bounds(265, 175, 90, 55), channel("radius"), range(1, 30, 9), caption("Radius") | |||
image bounds(5,245, 215, 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 = 1 ;NUMBER OF AUDIO SAMPLES IN EACH CONTROL CYCLE | |||
nchnls = 2 ;NUMBER OF CHANNELS (2=STEREO) | |||
0dbfs = 1 | |||
;Author: Iain McCurdy (2012) | |||
instr 1 | |||
kAz chnget "Az" ;READ WIDGETS... | |||
kElev chnget "Elev" ; | |||
ktype chnget "type" ; | |||
kL_R_In chnget "L_R_In" ; | |||
koverlap chnget "overlap" ; | |||
kradius chnget "radius" ; | |||
kTestSound chnget "TestSound" | |||
if kTestSound=1 then ; generate a test sound... | |||
aL pinkish 0.3 ; generate some pink noise | |||
koct rspline 8,12,0.3,1 ; randomly moving pitch (oct format) | |||
aL reson aL,cpsoct(koct),cpsoct(koct)*0.2,1 ; reson filter it | |||
aR = aL ; right channel same as the left | |||
else | |||
aL,aR ins ;READ STEREO AUDIO INPUT | |||
endif | |||
asrc ntrpol aL,aR,kL_R_In | |||
kporttime linseg 0,0.001,0.02 ;PORTAMENTO TIME RISES UP QUICKLY FROM ZERO TO A HELD VALUE | |||
;kAz portk kAz,kporttime ;SMOOTH RT CHANGES OF AZIMUTH | |||
;kElev portk kElev,kporttime ;SMOOTH RT CHANGES OF ELEVATION | |||
kswitch changed koverlap,kradius ;IF 'OVERLAP' OR 'RADIUS' CHANGE, GENERATE A TRIGGER | |||
if kswitch==1 then ;IF A CHANGE TRIGGER HAS BEEN GENERATED... | |||
reinit update ;REINITIALISE FROM LABEL 'update' | |||
endif ;END OF CONDITIONAL BRANCH | |||
update: ;A LABEL. REINITIALISATION BEGINS FROM HERE | |||
ioverlap = 2 ^ (i(koverlap) - 1) ;DERIVE OVERLAP VALUE (1,2,4,8 etc.) FROM COMBOBOX INDEX VALUES (1,2,3,4 etc.) | |||
if ktype==1 then ;IF 'hrtfmove' SELECTED USING COMBOBOX... | |||
aleft, aright hrtfmove asrc, kAz, kElev, "hrtf-44100-left.dat","hrtf-44100-right.dat",ioverlap, i(kradius);, isr] ;APPLY hrtfmove2 OPCODE TO AUDIO SOURCE FROM INSTR 1 | |||
else ;IF 'hrtfmove2' SELECTED USING COMBOBOX... | |||
aleft, aright hrtfmove2 asrc, kAz, kElev, "hrtf-44100-left.dat","hrtf-44100-right.dat",ioverlap, i(kradius);, isr] ;APPLY hrtfmove2 OPCODE TO AUDIO SOURCE FROM INSTR 1 | |||
endif ;END OF CONDITIONAL BRANCH | |||
rireturn | |||
outs aleft, aright ;SEND AUDIO TO OUTPUTS | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [3600*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), trackercolour(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), trackercolour(200,255,200), fontcolour("white"), range(0,1.00,0) | |||
rslider bounds(205, 11, 70, 70), channel("mix"), text("Mix"), colour( 0, 60, 30), trackercolour(200,255,200), fontcolour("white"), range(0,1.00,1) | |||
button bounds(280, 10, 80, 20), text("12dB/oct","24dB/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), trackercolour(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,338 @@ | |||
LiveSndwarp.csd | |||
Iain McCurdy (2012) | |||
Description and Instructions | |||
---------------------------- | |||
This instrument implements live granulation of an audio input stream using the sndwarp opcode. | |||
Live audio from the first input channel (left input if stereo) is written into a function table from which sndwarp reads | |||
audio. (If 'stereo in/out' is chosen from 'In/Out Mode' then audio from the second/right channel is written into a second | |||
table.) The key is that manual pointer read mode is used with sndwarp (as opposed to time-stretch mode) and that the read | |||
pointer follows on behind the pointer which is used to write audio into the function table(s). Some care is needed to ensure | |||
that the read pointer does not 'overtake' the write pointer (which would result in dicontinuities in the audio it reads). | |||
This could be possible if pitch transposition upwards of grains is used as the grain pointer is then moving faster than the | |||
write pointer. This example prevents this from happening internally so the user does not need to worry. The user can also | |||
define a random offset for the grain read pointer using the 'Grain Delay' settings. Delay times are randomly chosen | |||
according to a 'betarand' distribution the 'beta' of which the user can set: if distribution shape is 1 the distribution is | |||
uniform, if it is 2 the distribution is linear and beyond 2 it is increasingly exponential. | |||
Note that 'Size' (grain size) and 'Size Rnd.' (random grain size) are i-rate variables so that changing them requires | |||
reinitialisation in the orchestra. For this reason discontinuity in the audio output can be heard when they are modified. | |||
Grain Size and Size Random (bandwith) are in sample frames. Divide by sample rate to derive a value in seconds. | |||
Pitch transposition can be set using either the 'Pitch' knob (ratio multiplier) or 'Semis' (transposition in semitones). | |||
Changes made to 'Semis' will be reflected in the setting of the 'Pitch' knob, but not vice versa. | |||
Pitch can also be controlled through MIDI input (in which case 'Pitch' and 'Semis' will be ignored). Using MIDI will | |||
polyphony will be possible. If you intend to use MIDI to start and stop sndwarp instances, turn 'On/Off [MIDI]' off. | |||
You can also adjust the MIDI note at which unison (no transposition) will occur using the 'Uni.Note' knob. | |||
Sound output from sndwarp can be fed back into the input to be mixed with the live audio in. The amount of feedback can be | |||
controlled using the 'Feedback' slider. Using high levels of feedback can result in overloading but this will also be | |||
dependent upon other factors such as random delay time, grain size (window size), density and transposition so user caution | |||
is advised. If the 'clip' button is activated the feedback signal will be clipped at the clip level set (a ratio of then | |||
maximum amplitude) providing at least some control over a runaway feedback loop. Note that 'Clip Lev.' defines the amplitude | |||
at which clipping begins, therefore lower settings will result in the signal being clipped sooner. The feedback signal can | |||
also be filtered by a lowpass filter. | |||
If 'balance' is activated the output of sndwarp is dynamically balanced with the input signal. This can be useful for | |||
compensating for increases in amplitude caused when 'Number of Overlaps' (grain density) is increased. There are 3 | |||
mono/stereo modes: 'mono in - mono out (x2)', 'mono in - stereo out' (stereo effect is created using sndwarp's built-in | |||
window/grain size randomisation, and 'stereo in - stereo out' mode. | |||
The buffer size used in the example is just under 23 seconds long (function table size 1048576 at sr=44100). This could be | |||
enlarged if required but bear in mind that sndwarp needs a power of two table size. | |||
Activating 'Freeze' will pause writing of live audio to the function table and allow the user to manually navigate through | |||
the buffered audio. The feedback loop will also be deactivated when 'freeze' is active. | |||
<Cabbage> | |||
form caption("Live Sndwarp") size(530, 465), pluginID("lwrp") | |||
groupbox bounds( 0, 0, 300,100), text("Master"), colour(30, 30, 40), fontcolour(255,125,125){ | |||
checkbox bounds( 10, 28, 110, 20), colour("yellow"), channel("OnOff"), value(1), text("On/Off [MIDI]"), trackercolour("red") | |||
label bounds( 22, 53, 80, 13), text("In/Out Mode") | |||
combobox bounds( 10, 69, 100, 20), channel("monostereo"), value(2), text("mono","stereo out","stereo in/out") | |||
rslider bounds(115, 30, 60, 60), text("In Gain"), channel("InGain"), range(0, 2.00, 1, 0.5), trackercolour("red") | |||
rslider bounds(175, 30, 60, 60), text("Out Gain"), channel("amp"), range(0, 2.00, 1, 0.5), trackercolour("red") | |||
rslider bounds(235, 30, 60, 60), text("Mix"), channel("mix"), range(0, 1.00, 1), trackercolour("red") | |||
} | |||
groupbox bounds(300, 0, 230,100), text("Feedback - CAUTION!"), colour(25, 25, 35), fontcolour(250,120,120){ | |||
rslider bounds(305, 30, 60, 60), text("Amount"), channel("feedback"), range(0, 1.00, 0), trackercolour("red") | |||
checkbox bounds(365, 35, 70, 20), colour("yellow"), channel("clip"), value(1), text("Clip"), trackercolour("red") | |||
checkbox bounds(365, 65, 70, 20), colour("yellow"), channel("LPF_On"), value(0), text("LPF"), trackercolour("red") | |||
rslider bounds(410, 30, 60, 60), text("Clip Lev."), channel("ClipLev"), range(0.01, 1, 0.5, 0.5), trackercolour("red") | |||
rslider bounds(465, 30, 60, 60), text("LPF"), channel("Cutoff"), range(20, 20000, 4000, 0.5), trackercolour("red") | |||
} | |||
groupbox bounds( 0,100, 530,100), text("Grains"), colour(35, 35, 45), fontcolour(255,130,130){ | |||
rslider bounds( 5,130, 60, 60), text("Size"), channel("wsize"), range(1, 88200, 7000, 0.25), trackercolour("red") | |||
rslider bounds( 65,130, 60, 60), text("Size Rnd."), channel("rnd"), range(0, 30000, 1000, 0.375), trackercolour("red") | |||
rslider bounds(125,130, 60, 60), text("Pitch"), channel("pch"), range(0.01, 8, 1, 0.5), trackercolour("red") | |||
rslider bounds(185,130, 60, 60), text("Semis"), channel("semis"), range(-48, 48, 0,1,1), trackercolour("red") | |||
rslider bounds(245,130, 60, 60), text("Density"), channel("olaps"), range(1, 100, 10, 1, 1), trackercolour("red") | |||
label bounds(305,125, 100, 13), text("Grain Envelope") | |||
combobox bounds(305,141, 100, 20), channel("wfn"), value(1), text("Half Sine","Perc. 1","Perc. 2","Gate","Rev. Perc. 1 ","Rev. Perc. 2") | |||
checkbox bounds(315,170, 100, 20), colour("yellow"), channel("balance"), value(0), text("Balance") | |||
rslider bounds(405,130, 60, 60), text("Delay"), channel("dly"), range(0, 5, 0.01, 0.5), trackercolour("red") | |||
rslider bounds(465,130, 60, 60), text("Distr."), channel("beta"), range(1, 16.0, 1, 0.5), trackercolour("red") | |||
} | |||
groupbox bounds( 0,200,530,135), text("Freeze"), colour(45, 45, 55), fontcolour(255,100,100){ | |||
label bounds(234,230, 80, 17), text("FREEZE"), fontcolour("LightBlue") | |||
label bounds(233,231, 80, 17), text("FREEZE"), fontcolour(105,105,255) | |||
checkbox bounds(225,249, 80, 30), colour(115,115,255), channel("freeze"), value(0) | |||
rslider bounds( 10,227, 60, 60), text("Port.Time"), channel("ManPtrPort"), range(0, 1.00, 0.5), trackercolour("red") | |||
hslider bounds( 10,280,510, 40), channel("ManPtr"), range(-1.00, 0, 0, 1, 0.001), trackercolour("red") | |||
label bounds(220,315,100, 13), text("Manual Pointer") | |||
} | |||
groupbox bounds( 0,335, 80,100), text("MIDI"), colour(30, 30, 40), fontcolour(255,100,100){ | |||
rslider bounds( 10,365, 60, 60), text("Uni.Note"), channel("UniNote"), range(0, 127, 72,1,1), trackercolour("red") | |||
keyboard bounds( 80,335,450,100) | |||
} | |||
image bounds( 5, 440, 215, 20), colour(75, 85, 90, 100), plant("credit"), line(0){ | |||
label bounds(0.03, 0.1, .9, .7), text("Author: Iain McCurdy |2012|"), colour("white") | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
;-d -n | |||
-dm0 -n -+rtmidi=null -M0 | |||
</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 | |||
massign 0,2 | |||
gibuffer ftgen 0, 0, 1048576, 2, 0 ;Buffer table. Roughly 23 seconds duration. | |||
gibufferR ftgen 0, 0, 1048576, 2, 0 ;right channel | |||
;GRAIN ENVELOPE WINDOW FUNCTION TABLES: | |||
giwfn1 ftgen 0, 0, 131072, 9, .5, 1, 0 ; HALF SINE | |||
giwfn2 ftgen 0, 0, 131072, 7, 0, 3072, 1, 128000, 0 ; PERCUSSIVE - STRAIGHT SEGMENTS | |||
giwfn3 ftgen 0, 0, 131072, 5, .001, 3072, 1, 128000, 0.001 ; PERCUSSIVE - EXPONENTIAL SEGMENTS | |||
giwfn4 ftgen 0, 0, 131072, 7, 0, 1536, 1, 128000, 1, 1536, 0 ; GATE - WITH ANTI-CLICK RAMP UP AND RAMP DOWN SEGMENTS | |||
giwfn5 ftgen 0, 0, 131072, 7, 0, 128000,1, 3072, 0 ; REVERSE PERCUSSIVE - STRAIGHT SEGMENTS | |||
giwfn6 ftgen 0, 0, 131072, 5, .001, 128000,1, 3072, 0.001 ; REVERSE PERCUSSIVE - EXPONENTIAL SEGMENTS | |||
instr 1 | |||
gkOnOff chnget "OnOff" | |||
ktrigger trigger gkOnOff,0.5,0 | |||
schedkwhen ktrigger,0,0,2,0,-1 | |||
ginsamp = ftlen(gibuffer)-1 ;index of the final sample in the function table | |||
gkamp chnget "amp" | |||
gkInGain chnget "InGain" | |||
gkmix chnget "mix" | |||
gkbalance chnget "balance" | |||
gkmonostereo chnget "monostereo" | |||
gkfback chnget "feedback" | |||
gkclip chnget "clip" | |||
gkClipLev chnget "ClipLev" | |||
gkCutoff chnget "Cutoff" | |||
gkpch chnget "pch" | |||
gkLPF_On chnget "LPF_On" | |||
gkwsize chnget "wsize" | |||
gkrnd chnget "rnd" | |||
gkolap chnget "olaps" | |||
gkwfn chnget "wfn" | |||
gkdly chnget "dly" | |||
gkbeta chnget "beta" | |||
gkfreeze chnget "freeze" | |||
gkManPtrPort chnget "ManPtrPort" | |||
gkManPtr chnget "ManPtr" | |||
gkUniNote chnget "UniNote" | |||
ktrigger trigger gkfreeze,0.5,1 ;if 'freeze' switch is turned off... | |||
if ktrigger==1 then | |||
chnset 1-ktrigger,"ManPtr" ;reset Manual Pointer slider to its default (maximum) position | |||
endif | |||
ain inch 1 ;read audio input from the left input channel | |||
ain = ain*gkInGain ;scale input signal according to 'In Gain' control position | |||
outch 1,ain*(1-gkmix) ;send some dry signal to output according to dry/wet 'Mix' control position | |||
gaFBackSig,gaFBackSigR init 0 ;audio feedback signal (initialised for first performance iteration) | |||
/*dc offset filter feedback signal*/ | |||
aFBackSig dcblock2 gaFBackSig ;filter dc offset from left channel feedback signal | |||
if gkmonostereo==3 then ;if 'stereo in' mode is active... | |||
aFBackSigR dcblock2 gaFBackSigR ;filter dc offset from right channel feedback signal | |||
endif | |||
/*lowpass filter feedback signal*/ | |||
if gkLPF_On==1 then ;if lowpass filter button is on... | |||
aFBackSig tone aFBackSig,gkCutoff ;...filter left feedback channel | |||
if gkmonostereo==3 then ;if 'stereo in' mode is active... | |||
aFBackSigR tone aFBackSigR,gkCutoff ;lowpass filter the right channel | |||
endif | |||
endif | |||
/*clip feedback signal*/ | |||
if gkclip==1 then ;if clip switch is on... | |||
ktrig changed gkClipLev ;if clip level control is adjusted generate a trigger impulse (momentary '1') | |||
if ktrig==1 then ;if a trigger impulse has been received... | |||
reinit UPDATE_CLIP_L ;reinitialise clip opcode (clip level is i-rate only) | |||
endif | |||
UPDATE_CLIP_L: | |||
aFBackSig clip aFBackSig, 0, 0dbfs*i(gkClipLev) ;clip left feedback signal at maximum amplitude using bram de jong method | |||
if gkmonostereo==3 then ;and if stereo in/out mode is also chosen | |||
aFBackSigR clip aFBackSigR, 0, 0dbfs*i(gkClipLev) ;clip right channel feedback signal | |||
rireturn | |||
endif | |||
endif | |||
gaphsW phasor (sr*(1-gkfreeze))/ginsamp ;pointer 0 - 1 ;create a moving phase value that will be used to point to locations in a function table where input audio signal will be written | |||
/*write audio from left input to function table*/ | |||
if gkfreeze==0 then | |||
tablew ain+aFBackSig,gaphsW,gibuffer,1 ;write input audio to table | |||
endif | |||
/*if stereo in - stereo out mode*/ | |||
if gkmonostereo==3 then ;if stereo in/out mode has been chosen... | |||
aR inch 2 ;read right channel audio input | |||
aR = aR*gkInGain ;rescale its amplitude with 'Input Gain' slider | |||
if gkfreeze==0 then | |||
tablew aR+aFBackSigR,gaphsW,gibufferR,1 ;write right channel audio input audio to table | |||
endif | |||
outch 2,aR*(1-gkmix) ;if 'stereo in' mode is selected, send some right channel dry signal to output according to dry/wet 'Mix' control position | |||
else | |||
outch 2,ain*(1-gkmix) ;otherwise not 'stereo in' mode so just send some left channel dry signal to output | |||
endif | |||
clear gaFBackSig,gaFBackSigR ;clear feedback signals | |||
endin | |||
instr 2 | |||
iMIDIActiveValue = 1 ;IF MIDI ACTIVATED | |||
iMIDIflag = 0 ;IF FLTK ACTIVATED | |||
mididefault iMIDIActiveValue, iMIDIflag ;IF NOTE IS MIDI ACTIVATED REPLACE iMIDIflag WITH iMIDIActiveValue | |||
kMIDIflag init iMIDIflag | |||
if gkOnOff==0&&iMIDIflag==0 then | |||
turnoff | |||
endif | |||
if iMIDIflag==1 then | |||
icps cpsmidi | |||
kpch = icps/cpsmidinn(gkUniNote) | |||
else | |||
kpch = gkpch | |||
endif | |||
kporttime linseg 0,0.001,0.03 ;portamento time. Rises quickly from zero to a held value. | |||
kpch portk kpch,kporttime ;Apply portamento smoothing to changes made to the pitch multiplier | |||
apch interp kpch ;interpolate pitch multiplier variable to create an a-rate version. This will produce higher quality results when pitch is modulated. | |||
kManPtr portk gkManPtr,kporttime*10*gkfreeze*gkManPtrPort | |||
ktrig changed gkwsize,gkrnd,gkolap,gkwfn ;if any of the list of input args. change, generate a trigger impulse (momentary '1'). The input args are all i-rate in sndwarp so reinitialisation will be required for their changes to register. | |||
if ktrig==1 then ;if a trigger hass been generated... | |||
reinit UPDATE_SNDWARP ;... begin a reinitialisation pass from the given label | |||
endif | |||
UPDATE_SNDWARP: ;a label. Reinitialisation begins from here. | |||
imode = 1 ;sndwarp mode. (1=pointer mode, timestretch mode not so useful in a live audio in application) | |||
ibeg = 0 ;point in the function table from which to begin reading audio (0=beginning) | |||
iwsize = i(gkwsize) ;window (grain) size in samples | |||
irnd = i(gkrnd) ;window (grain) size randomisation bandwidth in samples | |||
iolap = i(gkolap) ;number of grain overlaps | |||
kRndDly betarand gkdly,1,gkbeta ;random grain delay time | |||
if gkmonostereo!=0 then | |||
kRndDlyR betarand gkdly,1,gkbeta ;random grain delay time | |||
endif | |||
iMaxDur = (iwsize+irnd)/sr ;maximum grain duration in seconds | |||
kTransComp limit iMaxDur*(kpch-1),0,ginsamp/sr | |||
kdelay = (kTransComp+kRndDly) / (ginsamp/sr) ;delay time required when reading grains from the function table | |||
if gkmonostereo!=0 then | |||
kdelayR = (kTransComp+kRndDlyR) / (ginsamp/sr) ;delay time required when reading grains from the function table | |||
endif | |||
if gkfreeze==1 then | |||
kdelay = kdelay + (sr/(ginsamp)*1.75*iwsize/sr) ;if freeze mode is active regress the read pointer a small amount | |||
if gkmonostereo!=0 then | |||
kdelayR = kdelayR + (sr/(ginsamp)*1.75*iwsize/sr) ;if freeze mode is active regress the read pointer a small amount | |||
endif | |||
endif | |||
aphsR wrap (gaphsW-kdelay+kManPtr)*(ginsamp/sr),0,(ginsamp-iwsize-irnd)/sr ;location from which to read grain. This is always directly related to the poistion of the write pointer. | |||
aphsR_R wrap (gaphsW-kdelayR+kManPtr)*(ginsamp/sr),0,(ginsamp-iwsize-irnd)/sr ;location from which to read grain. This is always directly related to the poistion of the write pointer. | |||
iwfn = giwfn1+i(gkwfn)-1 ;Grain amplitude windowing shape | |||
/*sndwarp*/ | |||
asig,ac sndwarp 1, aphsR, apch, gibuffer, ibeg, iwsize, irnd, iolap, iwfn, imode | |||
if gkbalance==1 then ;if 'balance switch is on... | |||
asig balance asig,ac ;... amplitude balance the signal | |||
endif | |||
if gkmonostereo==1 then ;if 'mono' mode seleced... | |||
gaFBackSig = gaFBackSig+(asig*gkfback) ;create feedback signal for next iteration. (This will be written into the function table along with the live audio in.) | |||
aR = asig | |||
elseif gkmonostereo==2 then ;or if 'stereo out' mode | |||
aR,acR sndwarp 1, aphsR_R, apch, gibuffer, ibeg, iwsize, irnd, iolap, iwfn, imode | |||
if gkbalance==1 then | |||
aR balance aR,acR | |||
endif | |||
gaFBackSig = gaFBackSig+((asig+aR)*gkfback) ;create feedback signal, a mixture of the left and right sndwarp output channels | |||
else ;otherwise 'stereo in/out' mode | |||
aR,acR sndwarp 1, aphsR_R, apch, gibufferR, ibeg, iwsize, irnd, iolap, iwfn, imode | |||
if gkbalance==1 then | |||
aR balance aR,acR | |||
endif | |||
gaFBackSig = gaFBackSig+(asig*gkfback) ;left channel feedback signal | |||
gaFBackSig = gaFBackSig+(aR*gkfback) ;right channel feedback signal | |||
endif | |||
rireturn ;return from reinitialisation | |||
aAntiClick linsegr 0,0.03,1,0.03,0 | |||
outs asig*gkamp*gkmix*aAntiClick, aR*gkamp*gkmix*aAntiClick ;send audio to outputs | |||
endin | |||
instr UpdateWidgets | |||
ksemis chnget "semis" ;read in 'semis' widget | |||
ktrig1 changed ksemis ;if 'semis' knob is moved... | |||
if ktrig1==1 then | |||
chnset semitone(ksemis), "pch" ;update 'Pitch' knob with the value of semis (converted to a ratio) | |||
endif | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [3600*24*7] | |||
;i 2 0 [3600*24*7] | |||
i "UpdateWidgets" 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), trackercolour(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), trackercolour(200,240,250), fontcolour("white"), range(0,1.00,0) | |||
rslider bounds(205, 11, 70, 70), channel("mix"), text("Mix"), colour( 0, 40, 50), trackercolour(200,240,250), fontcolour("white"), range(0,1.00,1) | |||
button bounds(280, 10, 80, 20), channel("steepness"), text("12dB/oct","24dB/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), trackercolour(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,233 @@ | |||
; Modulating Delays - randomly modulating delays | |||
; GATE (for gating the incoming signal) | |||
; On Thrsh / Off Thrsh - thresholds at which the gate will open and close | |||
; Rise Time - time it takes for the gate to ramp open | |||
; Rel Time - time it takes for the gate to ramp closed | |||
; SETUP | |||
; Pan Width - extent of the random panning effect (0 = all layers centred) | |||
; Spread - spread of the delay times of the different layers (if only 1 layer is active this control isn't really useful) | |||
; if 'spread' is zero, all layers' delay time modulated between 'Min Time' and 'Max Time' | |||
; Layers - Number of layers of modualting delays | |||
; REVERB - there is a reverb effect within the each delay buffer | |||
; Amount - amount of reverb signal added to the output of the delay buffer - within the delay buffer -, this will therefore be mixed into the feedback signal and fed back into to reverb also | |||
; Time - reverb time | |||
; Damping - damping of high frequencies within the delay effect | |||
; ** CAUTION MUST BE TAKEN WHEN USING HIGH LEVELS OF DELAY FEEDBACK WITH A HIGH REVERB AMOUNT AS OVERLOADING CAN QUICKLY OCCUR ** | |||
; OUTPUT | |||
; Dry - level control for the dry (post gate) signal | |||
; Wet - level control for the wet (delayed) signal | |||
; SLIDERS | |||
; Min Time - Minimum delay time in the delay time random modulation | |||
; Max Time - Maximum delay time in the delay time random modulation | |||
; Min Rate - Minimum rate in the random modulation | |||
; Max Rate - Maximum rate in the random modulation | |||
; Min F.back - Minimum feedback value in the modulation of delay feedback values | |||
; Max F.back - Maximum feedback value in the modulation of delay feedback values | |||
; Min Tone - Minimum cutoff frequency in a randomly modulting low-pass filter within each delay buffer | |||
; Max Tone - Maximum cutoff frequency in a randomly modulting low-pass filter within each delay buffer | |||
<Cabbage> | |||
form size(960, 340), caption("Modulating Delays"), pluginID("mdel") | |||
label bounds(200, 5, 80, 11), text("G A T E"), fontcolour("white") | |||
checkbox bounds( 10, 35,100, 20), text("Gate On/Off") channel("GateActive"), FontColour("White"), colour("lime") value(1) | |||
rslider bounds(100, 20, 60, 60), channel("OnThreshold"), text("On Thrsh."), range(0, 1, 0.05, 0.5, 0.001), colour(30,30,30) trackercolour(100,100,100) | |||
rslider bounds(160, 20, 60, 60), channel("OffThreshold"), text("Off Thrsh."), range(0, 1, 0.01, 0.5, 0.001), colour(30,30,30) trackercolour(100,100,100) | |||
rslider bounds(220, 20, 60, 60), channel("RiseTime"), text("Rise Time"), range(0, 10, 1, 0.5, 0.001), colour(30,30,30) trackercolour(100,100,100) | |||
rslider bounds(280, 20, 60, 60), channel("RelTime"), text("Rel.Time"), range(0, 10, 0.01, 0.5, 0.001), colour(30,30,30) trackercolour(100,100,100) | |||
checkbox bounds(340, 35, 90, 15), text("Gating") channel("gating"), FontColour("White"), colour("red") value(0) shape(ellipse) | |||
label bounds(487, 5, 80, 11), text("S E T U P"), fontcolour("white") | |||
line bounds(405, 25, 3, 50), colour("Grey") | |||
rslider bounds(420, 20, 60, 60), channel("width"), text("Pan Width"),range(0, 0.5, 0.5), colour(100,100,100) trackercolour(100,100,100) | |||
rslider bounds(480, 20, 60, 60), channel("spread"), text("Spread"), range(0, 4, 1, 0.5, 0.001), colour(100,100,100) trackercolour(100,100,100) | |||
rslider bounds(540, 20, 60, 60), channel("layers"), text("Layers"), range(1, 22, 8,1,1), colour(100,100,100) trackercolour(100,100,100) | |||
line bounds(610, 25, 3, 50), colour("Grey") | |||
label bounds(680, 5, 80, 11), text("R E V E R B"), fontcolour("white") | |||
rslider bounds(620, 20, 60, 60), channel("RvbAmt"), text("Amount"), range(0, 0.2, 0.06,1,0.001), colour(100,100,100) trackercolour(100,100,100) | |||
rslider bounds(680, 20, 60, 60), channel("RvbTime"), text("Time"), range(0.01,10, 7), colour(100,100,100) trackercolour(100,100,100) | |||
rslider bounds(740, 20, 60, 60), channel("damping"), text("Damping"), range(0, 1, 0.5), colour(100,100,100) trackercolour(100,100,100) | |||
line bounds(810, 25, 3, 50), colour("Grey") | |||
label bounds(856, 5, 80, 11), text("O U T P U T"), fontcolour("white") | |||
rslider bounds(825, 20, 60, 60), channel("dry"), text("Dry"), range(0, 4, 0, 0.5, 0.001), colour(160,160,160) trackercolour(160,160,160) | |||
rslider bounds(885, 20, 60, 60), channel("wet"), text("Wet"), range(0, 4, 1, 0.5, 0.001), colour(160,160,160) trackercolour(160,160,160) | |||
line bounds( 0, 95,960, 3), colour("Grey") | |||
hslider bounds(10,110, 940, 30), channel("MinTime"), text(Delay Time Minimum), range(0.001, 10, 0.131, 0.5, 0.000001),colour("blue"), trackercolour(blue) | |||
hslider bounds(10,130, 940, 30), channel("MaxTime"), text(Delay Time Maximum), range(0.001, 10, 0.9, 0.5, 0.000001), colour("blue"), trackercolour(blue) | |||
hslider bounds(10,160, 940, 30), channel("MinRate"), text(Random Rate Minimum), range(0.001, 10, 0.1, 0.5, 0.00001), colour("red"), trackercolour(red) | |||
hslider bounds(10,180, 940, 30), channel("MaxRate"), text(Random Rate Maximum), range(0.001, 10, 0.2, 0.5, 0.00001), colour("red"), trackercolour(red) | |||
hslider bounds(10,210, 940, 30), channel("MinFB"), text(Delay Feedback Minimum), range(0, 0.999, 0.95,1,0.001), colour("yellow"), trackercolour(yellow) | |||
hslider bounds(10,230, 940, 30), channel("MaxFB"), text(Delay Feedback Maximum), range(0, 0.999, 0.975,1,0.001), colour("yellow"), trackercolour(yellow) | |||
hslider bounds(10,260, 940, 30), channel("MinTone"), text(Tone Cutoff Frequency Minimum), range(4, 14, 11), colour(purple), trackercolour(purple) | |||
hslider bounds(10,280, 940, 30), channel("MaxTone"), text(Tone Cutoff Frequency Maximum), range(4, 14, 14), colour(purple), trackercolour(purple) | |||
label bounds( 10,320, 200, 12), text("Author: Iain McCurdy |2013|"), FontColour("grey") | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-n -d | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 16 | |||
nchnls = 2 | |||
0dbfs=1 | |||
opcode DelayIteration,aa,aakkkkkkkkkkkKiii | |||
aL,aR,kMinTime,kMaxTime,kMinRate,kMaxRate,kMinFB,kMaxFB,kwidth,kMinTone,kMaxTone,kRvbAmt,kRvbTime,kdamping,ispread,icount,ilayers xin | |||
kdel rspline kMinTime,kMaxTime,kMinRate,kMaxRate | |||
kdel limit kdel,0.001,10 | |||
adel interp kdel | |||
kFB rspline kMinFB,kMaxFB,kMinRate,kMaxRate | |||
kFB limit kFB,0,1 | |||
iMaxDel = 10 | |||
iws = 4 | |||
aout1, aout2 init 0 | |||
ktone rspline kMinTone, kMaxTone,kMinRate,kMaxRate | |||
ktone = cpsoct(ktone) | |||
idelOS random 0,ispread | |||
abuf delayr iMaxDel+idelOS | |||
aout1 deltap3 adel+idelOS | |||
arvb nreverb aout1, kRvbTime, kdamping | |||
aout1 = aout1 + arvb*kRvbAmt | |||
aout1 dcblock2 aout1 | |||
aout1 tone aout1,ktone | |||
delayw aL + aout1*kFB | |||
abuf delayr iMaxDel+idelOS | |||
aout2 deltap3 adel+idelOS | |||
arvb nreverb aout2, kRvbTime, kdamping | |||
aout2 = aout2 + arvb*kRvbAmt | |||
aout2 dcblock2 aout2 | |||
aout2 tone aout2,ktone | |||
delayw aR + aout2*kFB | |||
kpan rspline 0.5-kwidth,0.5+kwidth,kMinRate,kMaxRate | |||
kpan limit kpan,0,1 | |||
apan interp kpan | |||
aout1 = aout1*(1-apan) | |||
aout2 = aout2*(apan) | |||
amix1,amix2 init 0 | |||
amix1 = 0 | |||
amix2 = 0 | |||
if icount<ilayers then | |||
amix1,amix2 DelayIteration aL,aR,kMinTime,kMaxTime,kMinRate,kMaxRate,kMinFB,kMaxFB,kwidth,kMinTone,kMaxTone,kRvbAmt,kRvbTime,kdamping,ispread,icount+1,ilayers | |||
endif | |||
xout aout1+amix1, aout2+amix2 | |||
endop | |||
opcode SwitchPort, k, kki | |||
kin,kupport,idnport xin | |||
kold init 0 | |||
kporttime = (kin<kold?idnport:kupport) | |||
kout portk kin, kporttime | |||
kold = kout | |||
xout kout | |||
endop | |||
instr 1 | |||
kporttime linseg 0,0.001,1 | |||
aL,aR ins | |||
;aL,aR diskin2 "Synthpad.wav",1,0,1 | |||
;aL diskin2 "loop.wav",1,0,1 | |||
;aR = aL | |||
kMinTime chnget "MinTime" | |||
kMaxTime chnget "MaxTime" | |||
kMinTime portk kMinTime,kMinTime | |||
kMaxTime portk kMaxTime,kMaxTime | |||
kspread chnget "spread" | |||
kMinRate chnget "MinRate" | |||
kMaxRate chnget "MaxRate" | |||
kMinFB chnget "MinFB" | |||
kMaxFB chnget "MaxFB" | |||
kwidth chnget "width" | |||
kMinTone chnget "MinTone" | |||
kMaxTone chnget "MaxTone" | |||
kres chnget "res" | |||
klayers chnget "layers" | |||
klayers init 1 | |||
kdry chnget "dry" | |||
kwet chnget "wet" | |||
kGateActive chnget "GateActive" | |||
kOnThreshold chnget "OnThreshold" | |||
kOffThreshold chnget "OffThreshold" | |||
kRiseTime chnget "RiseTime" | |||
kRelTime chnget "RelTime" | |||
kRvbAmt chnget "RvbAmt" | |||
kRvbTime chnget "RvbTime" | |||
kdamping chnget "damping" | |||
/* GATE */ | |||
if kGateActive=1 then | |||
krms rms (aL+aR)*0.5 | |||
kthreshold init i(kOnThreshold) | |||
kon = 1 | |||
koff = 0 | |||
if krms>kthreshold then | |||
kgate = 1 | |||
kthreshold = kOnThreshold | |||
chnset koff,"gating" | |||
else | |||
kgate = 0 | |||
kthreshold = kOffThreshold | |||
chnset kon,"gating" | |||
endif | |||
kgate SwitchPort kgate,kRiseTime,0.1 | |||
kgate expcurve kgate,8 | |||
agate interp kgate | |||
aL = aL * agate | |||
aR = aR * agate | |||
endif | |||
ktrig trigger kGateActive,0.5,1 | |||
if ktrig=1 then | |||
chnset koff,"gating" | |||
endif | |||
/* REINITIALISING */ | |||
ktrig changed klayers,kspread | |||
if ktrig=1 then | |||
reinit UPDATE | |||
endif | |||
UPDATE: | |||
/* CALL THE UDO */ | |||
aout1,aout2 DelayIteration aL,aR,kMinTime,kMaxTime,kMinRate,kMaxRate,kMinFB,kMaxFB,kwidth,kMinTone,kMaxTone,kRvbAmt,kRvbTime,kdamping,i(kspread),1,i(klayers) | |||
rireturn | |||
outs (aout1 * kwet) + (aL * kdry), (aout2 * kwet) + (aR * kdry) | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 360000 | |||
</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("screverb","freeverb"), 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), trackercolour(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), trackercolour(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), trackercolour(240,210,170) | |||
rslider bounds(275, 11, 70, 70), text("Mix"), fontcolour(white), channel("mix"), range(0, 1.00, 1), colour( 79, 81, 70), trackercolour(240,210,170) | |||
rslider bounds(340, 11, 70, 70), text("Level"), fontcolour(white), channel("amp"), range(0, 1.00, 1), colour( 79, 81, 70), trackercolour(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,87 @@ | |||
; phaser1.csd | |||
; Iain McCurdy 2012 | |||
<Cabbage> | |||
form caption("phaser1") size(350, 90), pluginID("phs1") | |||
image pos(0, 0), size(350, 90), colour(80,20,20), shape("rounded"), outline("white"), line(4) | |||
rslider bounds(10, 11, 70, 70), text("Frequency"), channel("freq"), range(20.0, 5000, 160, 0.25), colour(80,20,20), fontcolour("white"), trackercolour(180,120,120) | |||
rslider bounds(75, 11, 70, 70), text("Feedback"), channel("feedback"), range(-0.99, 0.99, 0.9), colour(80,20,20), fontcolour("white"), trackercolour(180,120,120) | |||
rslider bounds(140, 11, 70, 70), text("N.Ords."), channel("ord"), range(1, 256, 32, 0.5,1), colour(80,20,20), fontcolour("white"), trackercolour(180,120,120) | |||
rslider bounds(205, 11, 70, 70), text("Mix"), channel("mix"), range(0, 1.00, 1), colour(80,20,20), fontcolour("white"), trackercolour(180,120,120) | |||
rslider bounds(270, 11, 70, 70), text("Level"), channel("level"), range(0, 1.00, 0.7), colour(80,20,20), fontcolour("white"), trackercolour(180,120,120) | |||
} | |||
</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 | |||
gkfreq chnget "freq" ;READ WIDGETS... | |||
gkfeedback chnget "feedback" ; | |||
gkord chnget "ord" ; | |||
gkmix chnget "mix" ; | |||
gklevel chnget "level" ; | |||
;asigL, asigR diskin2 "Seashore.wav",1,0,1 ; | |||
asigL, asigR ins | |||
kporttime linseg 0,0.01,0.03 ;CREATE A VARIABLE THAT WILL BE USED FOR PORTAMENTO TIME | |||
kfreq portk gkfreq, kporttime ;PORTAMENTO IS APPLIED TO 'SMOOTH' SLIDER MOVEMENT | |||
kSwitch changed gkord ;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 UPDATE ;BEGIN A REINITIALISATION PASS FROM LABEL 'UPDATE' | |||
endif ;END OF CONDITIONAL BRANCH | |||
UPDATE: ;BEGIN A REINITIALISATION PASS FROM HERE | |||
aphaserl phaser1 asigL, kfreq, gkord, gkfeedback ;PHASER1 IS APPLIED TO THE LEFT CHANNEL | |||
aphaserr phaser1 asigR, kfreq, gkord, gkfeedback ;PHASER1 IS APPLIED TO THE RIGHT CHANNEL | |||
rireturn ;RETURN FROM REINITIALISATION PASS TO PERFORMANCE TIME PASSES | |||
amixL ntrpol asigL,aphaserl,gkmix | |||
amixR ntrpol asigR,aphaserr,gkmix | |||
outs amixL*gklevel, amixR*gklevel ;PHASER OUTPUT ARE SENT TO THE SPEAKERS | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [3600*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> | |||
@@ -0,0 +1,95 @@ | |||
<Cabbage> | |||
form caption("phaser2") size(565, 90), pluginID("phs2") | |||
image pos(0, 0), size(565, 90), colour(0,0,25), shape("rounded"), outline("white"), line(4) | |||
rslider bounds(10, 11, 70, 70), text("Frequency"), channel("freq"), range(20.0, 5000, 160, 0.25), colour(100,100,200), trackercolour(silver) | |||
rslider bounds(75, 11, 70, 70), text("Q"), channel("q"), range(0.0001,4,3), colour(100,100,200), trackercolour(silver) | |||
rslider bounds(140, 11, 70, 70), text("N.Ords."), channel("ord"), range(1, 256, 8, 0.5,1), colour(100,100,200), trackercolour(silver) | |||
label bounds(220, 20, 60,12), text("Sep. Mode") | |||
rslider bounds(290, 11, 70, 70), text("Separation"), channel("sep"), range(-3, 3.00, 0.9), colour(100,100,200), trackercolour(silver) | |||
rslider bounds(355, 11, 70, 70), text("Feedback"), channel("feedback"), range(-0.99, 0.99, 0.9), colour(100,100,200), trackercolour(silver) | |||
rslider bounds(420, 11, 70, 70), text("Mix"), channel("mix"), range(0, 1.00, 1), colour(100,100,200), trackercolour(silver) | |||
rslider bounds(485, 11, 70, 70), text("Level"), channel("level"), range(0, 1.00, 0.7), colour(100,100,200), trackercolour(silver) | |||
combobox bounds(210, 34, 80,25), channel("mode"), size(100,50), value(1), text("Equal", "Power") | |||
} | |||
</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 | |||
gkfreq chnget "freq" ;READ WIDGETS... | |||
gkq chnget "q" ; | |||
gkmode chnget "mode" ; | |||
gkmode init 1 | |||
gkmode init i(gkmode)-1 | |||
gksep chnget "sep" ; | |||
gkfeedback chnget "feedback" ; | |||
gkord chnget "ord" ; | |||
gkmix chnget "mix" ; | |||
gklevel chnget "level" ; | |||
;asigL, asigR diskin2 "Seashore.wav",1,0,1 ;USE SOUND FILE FOR TESTING | |||
asigL, asigR ins | |||
kporttime linseg 0,0.01,0.03 ;CREATE A VARIABLE THAT WILL BE USED FOR PORTAMENTO TIME | |||
kfreq portk gkfreq, kporttime ;PORTAMENTO IS APPLIED TO 'SMOOTH' SLIDER MOVEMENT | |||
kq portk gkq, kporttime ;PORTAMENTO IS APPLIED TO 'SMOOTH' SLIDER MOVEMENT | |||
ksep portk gksep, kporttime ;PORTAMENTO IS APPLIED TO 'SMOOTH' SLIDER MOVEMENT | |||
kSwitch changed gkord,gkmode ;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 UPDATE ;BEGIN A REINITIALISATION PASS FROM LABEL 'UPDATE' | |||
endif ;END OF CONDITIONAL BRANCH | |||
UPDATE: ;BEGIN A REINITIALISATION PASS FROM HERE | |||
aphaserl phaser2 asigL, kfreq, kq, gkord, gkmode, ksep, gkfeedback ; PHASER2 IS APPLIED TO THE LEFT CHANNEL | |||
aphaserr phaser2 asigR, kfreq, kq, gkord, gkmode, ksep, gkfeedback ; PHASER1 IS APPLIED TO THE RIGHT CHANNEL | |||
rireturn ;RETURN FROM REINITIALISATION PASS TO PERFORMANCE TIME PASSES | |||
amixL ntrpol asigL,aphaserl,gkmix | |||
amixR ntrpol asigR,aphaserr,gkmix | |||
outs amixL*gklevel, amixR*gklevel ;PHASER OUTPUTS ARE SENT OUT | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [3600*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> | |||
@@ -0,0 +1,154 @@ | |||
; Reverse.csd | |||
; Iain McCurdy [2012] | |||
; | |||
; Buffers audio for reversed (and forward) playback. | |||
; | |||
; INSTRUCTIONS | |||
; ------------ | |||
; Time L -- length of the left channel delay buffer | |||
; Time R -- length of the right channel delay buffer | |||
; Spread -- stereo spread of the two channel. 1 = hard left and right | |||
; Mix -- dry/wet mix | |||
; Level -- output level | |||
; Reverse -- (switch) activate reversed buffer | |||
; Forward -- (switch) activate forward buffer | |||
; Link L&R -- (switch) pair the left and right Time controls (functions differently if 'Time Mod' is activated) | |||
; Time Mod -- (switch) if this switch is on the delay times for both channels will modulate randomly between 'Time L' and 'Time R'. If 'Link L&R' is active this modulation is done in tandem for both channels. | |||
; Pan Mod -- (switch) if this switch is on the panning modulates randomly | |||
<Cabbage> | |||
form caption("Reverse") size(455, 95), pluginID("rvrs") | |||
image bounds(0, 0, 455, 95), colour("darkslategrey"), shape("rounded"), outline("white"), line(4) | |||
rslider bounds( 10, 10, 75, 75), text("Time L"), channel("timeL"), range(0.010, 4, 1, 0.5,0.001),colour(darkslategrey) fontcolour(255,255,200), trackercolour(lightblue) | |||
rslider bounds( 80, 10, 75, 75), text("Time R"), channel("timeR"), range(0.010, 4, 1, 0.5,0.001),colour(darkslategrey) fontcolour(255,255,200), trackercolour(lightblue) | |||
rslider bounds(150, 10, 75, 75), text("Spread"), channel("spread"), range(0, 1.00, 1), colour(darkslategrey) fontcolour(255,255,200), trackercolour(lightblue) | |||
rslider bounds(220, 10, 75, 75), text("Mix"), channel("mix"), range(0, 1.00, 1), colour(darkslategrey) fontcolour(255,255,200), trackercolour(lightblue) | |||
rslider bounds(290, 10, 75, 75), text("Level"), channel("level"), range(0, 1.00, 1, 0.5), colour(darkslategrey) fontcolour(255,255,200), trackercolour(lightblue) | |||
checkbox bounds(370, 12, 100, 12), text("Reverse"), channel("reverse"), value(1), colour(255,255, 50) fontcolour(255,255,200) | |||
checkbox bounds(370, 27, 100, 12), text("Forward"), channel("forward"), value(0), colour(255,255, 50) fontcolour(255,255,200) | |||
checkbox bounds(370, 42, 100, 12), text("Link L&R"), channel("link"), value(0), colour(255,255, 50) fontcolour(255,255,200) | |||
checkbox bounds(370, 57, 100, 12), text("Time Mod."), channel("TMod"), value(0), colour(255,255, 50) fontcolour(255,255,200) | |||
checkbox bounds(370, 72, 100, 12), text("Pan Mod."), channel("PMod"), value(0), colour(255,255, 50) fontcolour(255,255,200) | |||
} | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
;Author: Iain McCurdy (2012) | |||
;http://iainmccurdy.org/csound.html | |||
opcode Reverse, a, aKkkk ;nb. CAPITAL K CREATE A K-RATE VARIABLE THAT HAS A USEFUL VALUE ALSO AT I-TIME | |||
ain,ktime,kreverse,kforward,klink xin ;READ IN INPUT ARGUMENTS | |||
;four windowing envelopes. An appropriate one will be chosen based on the reversed chunk duration | |||
ienv1 ftgenonce 0, 0, 131072, 7, 0, 1024, 1, 131072-(1024*2), 1, 1024, 0 ;for longest chunk times | |||
ienv2 ftgenonce 0, 0, 131072, 7, 0, 4096, 1, 131072-(4096*2), 1, 4096, 0 | |||
ienv3 ftgenonce 0, 0, 131072, 7, 0,16384, 1, 131072-(16384*2), 1, 16384, 0 | |||
ienv4 ftgenonce 0, 0, 131072, 7, 0,32768, 1, 131072-(32768*2), 1, 32768, 0 ;for shortest chunk times | |||
atime interp ktime ;INTERPOLATE TO CREATE A-RATE VERSION OF K-TIME | |||
iratio = octave(1) | |||
ktrig trigger klink,0.5,0 ;if 'Link L&R' is turned on restart delay time phasors to ensure sync between the two channels | |||
if ktrig=1 then | |||
reinit RESTART_PHASOR | |||
endif | |||
RESTART_PHASOR: | |||
aptr phasor (2/ktime) ;CREATE A MOVING PHASOR THAT WITH BE USED TO TAP THE DELAY BUFFER | |||
rireturn | |||
if ktime<0.2 then ;IF CHUNK TIME IS LESS THAN 0.2... (VERY SHORT) | |||
aenv table3 aptr,ienv4,1 ;CREATE AMPLITUDE ENVELOPE | |||
elseif ktime<0.4 then | |||
aenv table3 aptr,ienv3,1 | |||
elseif ktime<2 then | |||
aenv table3 aptr,ienv2,1 | |||
else ;other longest bracket of delay times | |||
aenv table3 aptr,ienv1,1 | |||
endif | |||
aptr = aptr*atime ;SCALE PHASOR ACCORDING TO THE LENGTH OF THE DELAY TIME CHOSEN BY THE USER | |||
abuffer delayr 4 ;+ 0.01 ;CREATE A DELAY BUFFER | |||
abwd deltap3 aptr ;READ AUDIO FROM A TAP WITHIN THE DELAY BUFFER | |||
afwd deltap3 atime ;FORWARD DELAY | |||
delayw ain ;WRITE AUDIO INTO DELAY BUFFER | |||
;rireturn ;RETURN FROM REINITIALISATION PASS | |||
xout (abwd*aenv*kreverse)+(afwd*kforward) ;SEND AUDIO BACK TO CALLER INSTRUMENT. APPLY AMPLITUDE ENVELOPE TO PREVENT CLICKS. | |||
endop | |||
instr 1 | |||
ktimeL chnget "timeL" | |||
ktimeR chnget "timeR" | |||
kspread chnget "spread" | |||
kmix chnget "mix" | |||
klevel chnget "level" | |||
kreverse chnget "reverse" | |||
kforward chnget "forward" | |||
kTMod chnget "TMod" | |||
kPMod chnget "PMod" | |||
/* LINK */ | |||
klink chnget "link" ; if 'Link L&R' is selected | |||
if klink=1&&kTMod=0 then | |||
ktrigL changed ktimeL,klink | |||
ktrigR changed ktimeR | |||
if ktrigL=1 then | |||
chnset ktimeL,"timeR" | |||
elseif ktrigR=1 then | |||
chnset ktimeR,"timeL" | |||
endif | |||
endif | |||
a1,a2 ins | |||
if kTMod=1 then ; if time modulation is selected.... | |||
if klink=0 then ; and if 'link L&R' is off... | |||
ktime1 rspline ktimeL,ktimeR,0.2,1 ; generate delay time value: random spline between ktimeL and ktimeR | |||
ktime2 rspline ktimeL,ktimeR,0.2,1 | |||
ktimeL limit ktime1,0.01,4 ; assign to delay time variable and limit to prevent out of range values (possible with rspline) | |||
ktimeR limit ktime2,0.01,4 | |||
else | |||
ktime rspline ktimeL,ktimeR,0.2,1 | |||
ktimeL limit ktime,0.01,4 | |||
ktimeR = ktimeL ; right channel delay the same as left | |||
endif | |||
endif | |||
arev1 Reverse a1,ktimeL,kreverse,kforward,klink ; call UDO | |||
arev2 Reverse a2,ktimeR,kreverse,kforward,klink | |||
if kPMod=1 then ; if panning modulation is on... | |||
kpan rspline 0,1,0.2,1 ; pan position generated as a random spline | |||
ap1 = (arev1*kpan) + (arev2*(1-kpan)) ; create new left channel | |||
ap2 = (arev1*(1-kpan)) + (arev2*kpan) ; create new right channel | |||
arev1 = ap1 ; reassign left channel to new left channel | |||
arev2 = ap2 ; reassign right channel to new right channel | |||
endif | |||
a1 ntrpol a1,arev1,kmix ; dry/wet mix | |||
a2 ntrpol a2,arev2,kmix | |||
a1 = a1 * klevel ; apply level control | |||
a2 = a2 * klevel | |||
kspread scale kspread,1,0.5 ; rescale from range 0 - 1 to 0.5 - 1 | |||
aL sum a1*kspread,a2*(1-kspread) ; create stereo mix according to Spread control | |||
aR sum a2*kspread,a1*(1-kspread) ; create stereo mix according to Spread control | |||
outs aL,aR | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [60*60*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,481 @@ | |||
StutterFilter.csd | |||
Written by Iain McCurdy |2013| | |||
<Cabbage> | |||
form caption("Stutter Filter") size(800, 510), pluginID("stfl") | |||
image bounds(290, 475,225, 30), colour(100,100,100), shape("rounded"), outline("white"), line(4) | |||
snapshot bounds(305,480,200, 20), preset("StutterFilter"), master(1), items("Preset 1", "Preset 2", "Preset 3", "Preset 4", "Preset 5", "Preset 6", "Preset 7", "Preset 8", "Preset 9", "Preset 10") | |||
label bounds( 8, 496, 200, 12), text("Iain McCurdy [2013]"), FontColour("grey") | |||
; METRONOME | |||
groupbox bounds( 0, 0, 80, 60), text("INPUT"), plant("input"), FontColour(silver),colour(50,50,50){ | |||
checkbox bounds( 5, 30, 80, 13), text("Test Tone") channel("TestTone"), FontColour("White"), colour(255,100,100) value(1) | |||
} | |||
; METRONOME | |||
groupbox bounds( 0, 60, 80,410), text("TEMPO"), plant("metronome"), FontColour(silver),colour(50,50,50){ | |||
checkbox bounds( 10, 23, 80, 13), text("Start") channel("MetroStart"), FontColour("White"), colour(lightblue) value(1) | |||
rslider bounds( 5, 40, 70, 70), colour(200,200,250,220), text("BPM"), channel("tempo"), range(1, 500, 60) | |||
rslider bounds( 5,120, 70, 70), colour(200,200,250,220), text("Jitter"), channel("ratejit"), range(0, 4.00, 1.4) | |||
} | |||
; AMPLITUDE ENVELOPE | |||
groupbox bounds( 80, 0, 80,470), text("AMP ENV"), plant("amplitudeenvelope"), FontColour(silver),colour(60,60,60){ | |||
rslider bounds( 5, 25, 70, 70), colour(200,200,250,220), text("Jitter"), channel("ampjit"), range(0, 1.00, 0) | |||
rslider bounds( 5,105, 70, 70), colour(200,200,250,220), text("Max.Dur."), channel("maxdur"), range(0.01, 5.00, 0.1, 0.5, 0.01) | |||
rslider bounds( 5,185, 70, 70), colour(200,200,250,220), text("Smoothing"), channel("smoothing"), range(0.005, 0.01, 0.005, 1, 0.0001) | |||
combobox bounds( 5,265, 70, 20), channel("shape"), value(1), text("Square", "Inv.Sq.","Smooth","Lin.","Exp.") | |||
rslider bounds( 5,295, 70, 70), colour(200,200,250,220), text("Layer Spread"), channel("LayerSpread"), range(0, 1.00, 0) | |||
} | |||
; FILTER ENVELOPE | |||
groupbox bounds(160, 0, 80, 470), text("FILT ENV"), plant("filterenvelope"), FontColour(silver),colour(30,30,30){ | |||
checkbox bounds( 10, 23, 70, 13), text("On/Off") channel("EnvFlt"), FontColour("White"), colour("lime") value(0) | |||
rslider bounds( 5, 40, 70, 70), colour(200,200,250,220), text("Start"), channel("EnvStart"), range(0, 1.00, 1) | |||
rslider bounds( 5,120, 70, 70), colour(200,200,250,220), text("End"), channel("EnvEnd"), range(0, 1.00,0) | |||
} | |||
; FILTER | |||
groupbox bounds(240, 0, 80, 470), text("FILTER"), plant("filter"), FontColour(silver),colour(40,40,40){ | |||
checkbox bounds( 10, 23, 70, 13), text("On/Off") channel("FiltOnOff"), FontColour("White"), colour(lightblue) value(1) | |||
rslider bounds( 5, 40, 70, 70), colour(200,200,250,220), text("Filt.Freq."), channel("cfoct"), range(4.00, 14, 8) | |||
rslider bounds( 5,120, 70, 70), colour(200,200,250,220), text("Filt.Jitter"), channel("cfjit"), range(0, 7.00, 2.83) | |||
rslider bounds( 5,200, 70, 70), colour(200,200,250,220), text("Q"), channel("bw"), range(0.01, 5, 0.5, 0.5,0.001) | |||
rslider bounds( 5,280, 70, 70), colour(200,200,250,220), text("Q jit"), channel("bwjit"), range(0, 4.00, 0) | |||
rslider bounds( 5,360, 70, 70), colour(200,200,250,220), text("Filt.Spline"), channel("fltspline"), range(0, 2.00, 0) | |||
combobox bounds( 5,440, 70, 20), channel("FiltType"), value(1), text("resonz", "reson","Butlp","Moog") | |||
} | |||
; PITCH SHIFTER | |||
groupbox bounds(320, 0, 80, 470), text("PITCH"), plant("pitchshifter"), FontColour(silver),colour(70,70,70){ | |||
checkbox bounds( 10, 23, 70, 13), text("On/Off") channel("PitchOnOff"), FontColour("White"), colour("lightblue") value(0) | |||
rslider bounds( 5, 40, 70, 70), colour(200,200,250,220), text("Min"), channel("pitchmin"), range(-96.00, 96, -6) | |||
rslider bounds( 5,120, 70, 70), colour(200,200,250,220), text("Max"), channel("pitchmax"), range(-96.00, 96, 12) | |||
checkbox bounds( 5,200, 70, 15), text("Quantize") channel("pchquant"), FontColour("White"), colour("lime") value(0) | |||
rslider bounds( 5,220, 70, 70), colour(200,200,250,220), text("Granularity"), channel("dlt"), range(0.001, 5, 0.2, 0.375, 0.0001) | |||
} | |||
; WAVESET | |||
groupbox bounds(400, 0, 80, 470), text("WAVESET"), plant("waveset"), FontColour(silver),colour(45,45,45){ | |||
checkbox bounds( 10, 23, 70, 13), text("On/Off") channel("WsetOnOff"), FontColour("White"), colour("lightblue") value(0) | |||
rslider bounds( 5, 40, 70, 70), colour(200,200,250,220), text("Chance"), channel("wsetchance"), range(0, 1.00, 0.5) | |||
rslider bounds( 5,120, 70, 70), colour(200,200,250,220), text("Min"), channel("wsetmin"), range(1, 200, 1, 1,1) | |||
rslider bounds( 5,200, 70, 70), colour(200,200,250,220), text("Max"), channel("wsetmax"), range(1, 200,10, 1,1) | |||
} | |||
; FREQUENCY SHIFTER | |||
groupbox bounds(480, 0, 82, 470), text("F.SHIFT"), plant("frequencyshifter"), FontColour(silver),colour(55,55,55){ | |||
checkbox bounds( 10, 23, 70, 13), text("On/Off") channel("FshiftOnOff"), FontColour("White"), colour("lightblue") value(0) | |||
rslider bounds( 5, 40, 70, 70), colour(200,200,250,220), text("Chance"), channel("fshiftchance"), range(0, 1.00, 0.5) | |||
rslider bounds( 5,120, 70, 70), colour(200,200,250,220), text("Shift"), channel("fshift"), range(-4000, 4000, 0) | |||
rslider bounds( 5,200, 70, 70), colour(200,200,250,220), text("Jitter"), channel("fshiftjit"), range( 0, 4000, 2000) | |||
} | |||
; WAVEGUIDE | |||
groupbox bounds(560, 0,160, 470), text("WAVEGUIDE"), plant("waveguide"), FontColour(silver),colour(35,35,35){ | |||
checkbox bounds( 10, 23, 70, 13), text("On/Off") channel("WguideOnOff"), FontColour("White"), colour("lightblue") value(0) | |||
checkbox bounds( 10, 80, 70, 15), text("Quantize") channel("wgquant"), FontColour("White"), colour("lime") value(0) | |||
rslider bounds( 80, 25, 70, 70), colour(200,200,250,220), text("Chance"), channel("wgchance"), range(0, 1.00, 0.5) | |||
rslider bounds( 5,105, 70, 70), colour(200,200,250,220), text("Freq.Min"), channel("wgfreqmin"), range(0.00,127, 60) | |||
rslider bounds( 80,105, 70, 70), colour(200,200,250,220), text("Freq.Max"), channel("wgfreqmax"), range(0.00,127, 100) | |||
rslider bounds( 5,185, 70, 70), colour(200,200,250,220), text("F.back.Min"), channel("wgFBmin"), range(0, 0.999, 0.9, 2, 0.0001) | |||
rslider bounds( 80,185, 70, 70), colour(200,200,250,220), text("F.back.Max"), channel("wgFBmax"), range(0, 0.999, 0.95, 2, 0.0001) | |||
rslider bounds( 5,265, 70, 70), colour(200,200,250,220), text("Damp.Min"), channel("wgCFmin"), range(4, 14, 8) | |||
rslider bounds( 80,265, 70, 70), colour(200,200,250,220), text("Damp.Max"), channel("wgCFmax"), range(4, 14, 13) | |||
} | |||
; PANNING | |||
groupbox bounds(720, 0, 80, 185), text("PANNING"), plant("panning"), FontColour(silver),colour(65,65,65){ | |||
rslider bounds( 5, 25, 70, 70), colour(200,200,250,220), text("L-R"), channel("pan"), range(0.00, 1, 0.5) | |||
rslider bounds( 5,105, 70, 70), colour(200,200,250,220), text("Spread"), channel("panjit"), range(0.00, 0.5, 0.25) | |||
} | |||
; OUTPUT | |||
groupbox bounds(720,185, 80, 285), text("OUTPUT"), plant("output"), FontColour(silver),colour(50,50,50){ | |||
rslider bounds( 5, 25, 70, 70), colour(200,200,250,220), text("Gain"), channel("gain"), range(0, 50.00, 1, 0.5, 0.001) | |||
rslider bounds( 5,105, 70, 70), colour(200,200,250,220), text("Layers"), channel("layers"), range(1, 20, 1, 1, 1) | |||
} | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-dm0 -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
seed 0 | |||
;Author: Iain McCurdy (2012) | |||
gisq ftgen 0,0,32768,7, 0,1,0, 1,1, 32768-3,1, 1,0 | |||
gisine ftgen 0,0,32768,10,1 | |||
gihanning ftgen 0,0,32768,20,2 | |||
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 | |||
opcode PitchShifterDelaySt,aa,aakkki | |||
ainL,ainR,ktrans,kdlt,kFB,imaxdlt xin | |||
adlt interp kdlt ;INTERPOLATE DELAY TIME CONTROL TO CREATE A-RATE VERSION | |||
ihalfsine ftgen 0, 0, 1025, 9, 0.5, 1, 0 ;HALF SINE WINDOW FUNCTION USED FOR AMPLITUDE ENVELOPING | |||
koctfract = ktrans/12 ;TRANSPOSITION AS FRACTION OF AN OCTAVE | |||
kratio = octave(koctfract) ;RATIO TO PRODUCE PITCH SHIFT | |||
krate = (kratio-1)/kdlt ;SUBTRACT 1/1 SPEED | |||
aphase1 phasor -krate ;MOVING PHASE 1-0 | |||
aphase2 phasor -krate, .5 ;MOVING PHASE 1-0 - PHASE OFFSET BY 180 DEGREES (.5 RADIANS) | |||
agate1 tablei aphase1, ihalfsine, 1, 0, 1 ;WINDOW FUNC =HALF SINE | |||
agate2 tablei aphase2, ihalfsine, 1, 0, 1 ;WINDOW FUNC =HALF SINE | |||
aoutL,aoutR init 0 ;INITIALISE OUTPUT SIGNAL (NEEDED IN ORDER TO CREATE FEEDBACK SIGNAL) | |||
iws = 4 ;WINDOW SIZE FOR INTERPOLATION - INCREASE THIS FOR IMPROVED QUALITY AT SOME CPU COST | |||
aout1L, aout1R vdelayxs ainL+(aoutL*kFB), ainR+(aoutR*kFB), aphase1*adlt, imaxdlt, iws | |||
aout2L, aout2R vdelayxs ainL+(aoutL*kFB), ainR+(aoutR*kFB), aphase2*adlt, imaxdlt, iws | |||
aoutL = ((aout1L * agate1)+(aout2L * agate2))*0.5 | |||
aoutR = ((aout1R * agate1)+(aout2R * agate2))*0.5 | |||
xout aoutL, aoutR ;SUM AND RESCALE PITCH SHIFTER OUTPUTS (LEFT CHANNEL) | |||
endop | |||
opcode StutterFilter,aa,aakkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkii | |||
ain1,ain2,kMetroStart,ktempo,kratejit1,kampjit1,kmaxdur,ksmoothing,kEnvFlt,kshape,kLayerSpread,kEnvStart,kEnvEnd,kFiltOnOff,kcfoct1,kcfjit1,kbw1,kbwjit1,kfltspline1,kFiltType,kpan1,\ | |||
kpanjit1,kPitchOnOff,kpitchmin,kpitchmax,kpchquant,kdlt,kWsetOnOff,kwsetchance,kwsetmin1,kwsetmax1,kFshiftOnOff,kfshiftchance,kfshift1,kfshiftjit1,\ | |||
kWguideOnOff,kwgchance,kwgfreqmin1,kwgfreqmax1,kwgquant,kwgFBmin1,kwgFBmax1,kwgCFmin1,kwgCFmax1,icount,ilayers xin | |||
a1 = ain1 | |||
a2 = ain2 | |||
krate = ktempo/15 ; krate (assuming 4 beats per bar) | |||
/* PORTAMENTO */ | |||
kporttime linseg 0,0.001,0.01 | |||
kbw portk kbw1,kporttime | |||
/* TRIGGER RANDOM VALUES */ | |||
kmetro init 1 | |||
kratejit trandom kmetro, -kratejit1, kratejit1 | |||
kampjit trandom kmetro, 0, kampjit1 | |||
ktrans trandom kmetro, kpitchmin, kpitchmax | |||
kwsetrep trandom kmetro, kwsetmin1+0.999999, kwsetmax1+0.999999 | |||
kwsetrep = int(kwsetrep) | |||
kfshiftjit trandom kmetro, -octcps(kfshiftjit1), octcps(kfshiftjit1) | |||
ksign = (kfshiftjit<0?-1:1) | |||
kfshiftjit = cpsoct(abs(kfshiftjit))*ksign | |||
kwgfreq trandom kmetro, kwgfreqmin1, kwgfreqmax1 | |||
kwgFB trandom kmetro, kwgFBmin1, kwgFBmax1 | |||
kwgCF trandom kmetro, kwgCFmin1, kwgCFmax1 | |||
/* FILTER */ | |||
if kFiltOnOff=0 kgoto SKIP_FILTER | |||
kcfoct portk kcfoct1,kporttime | |||
if kfltspline1==0 then ; if filt.spline switch is at zero... | |||
kcfjit trandom kmetro, 0, kcfjit1 ; ... | |||
kbwjit trandom kmetro, 0, kbwjit1 | |||
kcfoct limit kcfoct+kcfjit,4,14 | |||
kcf = cpsoct(kcfoct) | |||
kbw = kcf*(kbw*octave(kbwjit)) | |||
else ; otherwise (filt.spline is greater than zero)... | |||
kfltspline limit kfltspline1,0.1,10 ; ... | |||
kcfoct randomi kcfoct-kcfjit,kcfoct+kcfjit,kfltspline ; | |||
kcf limit cpsoct(kcfoct),50,sr/3 | |||
kbwjit rspline 0,kbwjit,kfltspline*0.5,kfltspline | |||
kbw = kcf*(kbw*octave(kbwjit)) | |||
endif | |||
if kFiltType=1 then | |||
a1 resonr a1,kcf,kbw,1 | |||
a2 resonr a2,kcf,kbw,1 | |||
elseif kFiltType=2 then | |||
a1 reson a1,kcf,kbw,1 | |||
a2 reson a2,kcf,kbw,1 | |||
elseif kFiltType=3 then | |||
a1 clfilt a1,kcf,0,2 | |||
a2 clfilt a2,kcf,0,2 | |||
elseif kFiltType=4 then | |||
kbw chnget "bw" | |||
kbw limit (kbw-0.01)/(5-0.01),0,0.99 | |||
a1 moogladder a1,kcf,kbw | |||
a2 moogladder a2,kcf,kbw | |||
endif | |||
SKIP_FILTER: | |||
/* METRONOME */ | |||
krate limit krate * octave(kratejit),0,50 | |||
kmetro metro krate*kMetroStart | |||
/* PITCH SHIFTER */ | |||
if kPitchOnOff=0 kgoto SKIP_PITCH | |||
kFB = 0 | |||
imaxdlt = 5 | |||
if kpchquant=1 then | |||
ktrans = int(ktrans) | |||
endif | |||
a1,a2 PitchShifterDelaySt a1,a2,ktrans,kdlt,kFB,imaxdlt | |||
SKIP_PITCH: | |||
/* FREQUENCY SHIFTER */ | |||
if kFshiftOnOff=0 kgoto SKIP_FSHIFT | |||
kdice trandom kmetro,0,1 | |||
if kdice<kfshiftchance then | |||
kfshift = kfshift1+kfshiftjit | |||
if kshape=2 then | |||
kfshift portk kfshift,kporttime | |||
endif | |||
a1 FreqShifter a1,kfshift,gisine | |||
a2 FreqShifter a2,kfshift,gisine | |||
endif | |||
SKIP_FSHIFT: | |||
/* WAVESET */ | |||
if kWsetOnOff=0 kgoto SKIP_WAVESET | |||
if kmetro=1 then | |||
reinit RESET_WAVESET | |||
endif | |||
RESET_WAVESET: | |||
awset1 waveset a1, kwsetrep, 3600 | |||
awset2 waveset a2, kwsetrep, 3600 | |||
rireturn | |||
kdice trandom kmetro,0,1 | |||
kamp init 0 | |||
if kwsetrep>1&&kdice<kwsetchance then | |||
a1 = awset1*0.7 | |||
a2 = awset2*0.7 | |||
endif | |||
SKIP_WAVESET: | |||
/* AMPLITUDE ENVELOPE */ | |||
if kmetro=1 then | |||
reinit RESTART_ENV | |||
endif | |||
RESTART_ENV: | |||
idur limit 1/i(krate),0,i(kmaxdur) | |||
iEnvAmp = (1-i(kampjit))^2 | |||
if i(kshape)=1 then ; square | |||
kamp linseg 0,i(ksmoothing),iEnvAmp, (idur*0.5)-(i(ksmoothing)*2), iEnvAmp, i(ksmoothing), 0 | |||
elseif i(kshape)=2 then ; inverse square | |||
kamp linseg 1,i(ksmoothing),1-iEnvAmp, (idur*0.5)-(2*i(ksmoothing)), 1-iEnvAmp, i(ksmoothing), 1 | |||
elseif i(kshape)=3 then ; hanning window | |||
kamp oscil1i 0, iEnvAmp, idur, gihanning | |||
elseif i(kshape)=4 then ; linear decay | |||
kamp linseg 0,i(ksmoothing),iEnvAmp, (idur*0.5)-i(ksmoothing), 0 | |||
elseif i(kshape)=5 then ; exponential decay | |||
kamp transeg 0,i(ksmoothing),2,iEnvAmp, (idur*0.5)-i(ksmoothing),-2,0 | |||
endif | |||
kamp portk kamp,kporttime *0.01 | |||
aamp interp kamp ; INTERPOLATE K-RATE LFO AND CREATE A-RATE VARIABLE | |||
/* FILTER ENVELOPE */ | |||
if kEnvFlt=1 then | |||
kenv = ((kamp*kEnvStart)*(kEnvStart-kEnvEnd))+kEnvEnd | |||
a1 clfilt a1,cpsoct(4+(kenv*10)),0,2 | |||
a2 clfilt a2,cpsoct(4+(kenv*10)),0,2 | |||
endif | |||
rireturn | |||
/* PANNING */ | |||
kpanjit trandom kmetro, -kpanjit1, kpanjit1 | |||
kpan limit kpan1+kpanjit,0,1 | |||
a1 = a1*aamp*kpan | |||
a2 = a2*aamp*(1-kpan) | |||
/* WGUIDE */ | |||
if kWguideOnOff=0 kgoto SKIP_WAVEGUIDE | |||
kchanceval trandom kmetro, 0, 1 | |||
if kchanceval<kwgchance then | |||
if kwgquant=1 then | |||
kwgfreq = int(kwgfreq) | |||
endif | |||
kwgfreq portk cpsmidinn(kwgfreq),kporttime*0.01 | |||
awgfreq interp kwgfreq | |||
a1 wguide1 a1, awgfreq,cpsoct(kwgCF),kwgFB | |||
a2 wguide1 a2, awgfreq,cpsoct(kwgCF),kwgFB | |||
a1 dcblock2 a1 | |||
a2 dcblock2 a2 | |||
endif | |||
SKIP_WAVEGUIDE: | |||
kDelTim = ((icount-1) * ((1/krate)/ilayers))*(kLayerSpread*2) | |||
;kDelTim portk kDelTim, kporttime*8 | |||
if kDelTim>0 then | |||
aDelTim interp kDelTim | |||
a1, a2 vdelayxs a1, a2, aDelTim, 10, 4 | |||
endif | |||
amix1 = 0 | |||
amix2 = 0 | |||
if icount<ilayers then | |||
amix1,amix2 StutterFilter ain1,ain2,kMetroStart,ktempo,kratejit1,kampjit1,kmaxdur,ksmoothing,kEnvFlt,kshape,kLayerSpread,kEnvStart,kEnvEnd,kFiltOnOff,kcfoct1,kcfjit1,kbw1,kbwjit1,kfltspline1,kFiltType,kpan1,\ | |||
kpanjit1,kPitchOnOff,kpitchmin,kpitchmax,kpchquant,kdlt,kWsetOnOff,kwsetchance,kwsetmin1,kwsetmax1,kFshiftOnOff,kfshiftchance,kfshift1,kfshiftjit1,\ | |||
kWguideOnOff,kwgchance,kwgfreqmin1,kwgfreqmax1,kwgquant,kwgFBmin1,kwgFBmax1,kwgCFmin1,kwgCFmax1,icount+1,ilayers | |||
endif | |||
xout a1+amix1,a2+amix2 | |||
endop | |||
instr 1 | |||
klayers chnget "layers" ; | |||
kTestTone chnget "TestTone" | |||
/* METRONOME */ | |||
kMetroStart chnget "MetroStart" ; read in widgets | |||
ktempo chnget "tempo" ; | |||
kratejit chnget "ratejit" ; | |||
/* AMPLITUDE ENVELOPE */ | |||
kampjit chnget "ampjit" ; | |||
kmaxdur chnget "maxdur" ; | |||
ksmoothing chnget "smoothing" ; | |||
kEnvFlt chnget "EnvFlt" ; | |||
kshape chnget "shape" ; | |||
kshape init 1 ; ensure not zero at i-time | |||
kLayerSpread chnget "LayerSpread" ; | |||
/* FILTER ENVELOPE */ | |||
kEnvStart chnget "EnvStart" ; | |||
kEnvEnd chnget "EnvEnd" ; | |||
/* FILTER */ | |||
kFiltOnOff chnget "FiltOnOff" ; | |||
kcfoct chnget "cfoct" ; | |||
kcfjit chnget "cfjit" ; | |||
kbw chnget "bw" ; | |||
kbwjit chnget "bwjit" ; | |||
kfltspline chnget "fltspline" ; | |||
kFiltType chnget "FiltType" ; | |||
kFiltType init 1 ; ensure not zero at i-time | |||
/* PANNING */ | |||
kpan chnget "pan" | |||
kpanjit chnget "panjit" | |||
/* PITCH SHIFTER */ | |||
kPitchOnOff chnget "PitchOnOff" | |||
kpitchmin chnget "pitchmin" | |||
kpitchmax chnget "pitchmax" | |||
kpchquant chnget "pchquant" | |||
kdlt chnget "dlt" | |||
/* WAVESET */ | |||
kWsetOnOff chnget "WsetOnOff" | |||
kwsetchance chnget "wsetchance" | |||
kwsetmin chnget "wsetmin" | |||
kwsetmax chnget "wsetmax" | |||
/* FREQUENCY SHIFTER */ | |||
kFshiftOnOff chnget "FshiftOnOff" | |||
kfshiftchance chnget "fshiftchance" | |||
kfshift chnget "fshift" | |||
kfshiftjit chnget "fshiftjit" | |||
/* WAVEGUIDE */ | |||
kWguideOnOff chnget "WguideOnOff" | |||
kwgchance chnget "wgchance" | |||
kwgfreqmin chnget "wgfreqmin" | |||
kwgfreqmax chnget "wgfreqmax" | |||
kwgquant chnget "wgquant" | |||
kwgFBmin chnget "wgFBmin" | |||
kwgFBmax chnget "wgFBmax" | |||
kwgCFmin chnget "wgCFmin" | |||
kwgCFmax chnget "wgCFmax" | |||
/* OUTPUT */ | |||
kgain chnget "gain" | |||
/* SOUND INPUT */ | |||
if kTestTone=1 then | |||
a1 vco2 1,100 | |||
a2 = a1 | |||
else | |||
a1,a2 ins | |||
a1,a2 diskin2 "Songpan.wav",1,0,1 | |||
endif | |||
ktrig changed klayers | |||
if ktrig==1 then | |||
reinit RESTART_LAYERS | |||
endif | |||
RESTART_LAYERS: | |||
iGainScale = i(klayers)^0.3 | |||
print iGainScale | |||
a1,a2 StutterFilter a1,a2,kMetroStart,ktempo,kratejit,kampjit,kmaxdur,ksmoothing,kEnvFlt,kshape,kLayerSpread,kEnvStart,kEnvEnd,kFiltOnOff,kcfoct,kcfjit,kbw,kbwjit,kfltspline,kFiltType,kpan,\ | |||
kpanjit,kPitchOnOff,kpitchmin,kpitchmax,kpchquant,kdlt,kWsetOnOff,kwsetchance,kwsetmin,kwsetmax,kFshiftOnOff,kfshiftchance,kfshift,kfshiftjit,\ | |||
kWguideOnOff,kwgchance,kwgfreqmin,kwgfreqmax,kwgquant,kwgFBmin,kwgFBmax,kwgCFmin,kwgCFmax,1,i(klayers) | |||
rireturn | |||
outs (a1*kgain)/iGainScale, (a2*kgain)/iGainScale ; scale amplitude according to the number of layers present | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [60*60*24*7] ; scan for changes to number of layers control | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,108 @@ | |||
Units for the delay are assumed to be demi-semiquavers. | |||
Knob for Rhy.Mult. will be replaced with a combobox once comboboxes work in plugins within hosts. | |||
Width control only applicable when ping-pong delay selected. | |||
If 'external' is selected as clock source tempo is taken from the host's BPM. | |||
<Cabbage> | |||
form caption("Tempo Delay") size(565, 90), pluginID("TDel") | |||
image pos(0, 0), size(565, 90), colour("LightBlue"), shape("rounded"), outline("white"), line(4) | |||
rslider bounds(10, 11, 70, 70), text("Tempo"), fontcolour("black"), channel("tempo"), range(40, 500, 90, 1, 1), colour(100,100,255),trackercolour(100,100,150) | |||
rslider bounds(75, 11, 70, 70), text("Rhy.Mult."), fontcolour("black"), channel("RhyMlt"), range(1, 16, 4, 1, 1), colour(100,100,255),trackercolour(100,100,150) | |||
rslider bounds(140, 11, 70, 70), text("Damping"), fontcolour("black"), channel("damp"), range(20,20000, 20000,0.5), colour(100,100,255),trackercolour(100,100,150) | |||
rslider bounds(205, 11, 70, 70), text("Feedback"), fontcolour("black"), channel("fback"), range(0, 1.00, 0.8), colour(100,100,255),trackercolour(100,100,150) | |||
rslider bounds(270, 11, 70, 70), text("Width"), fontcolour("black"), channel("width"), range(0, 1.00, 1), colour(100,100,255),trackercolour(100,100,150) | |||
button bounds(340, 10, 80, 20), text("Internal","External"), channel("ClockSource"), value(0), fontcolour("lime") | |||
label bounds(345, 30, 80, 12), text("Clock Source"), FontColour("black") | |||
button bounds(340, 50, 80, 20), text("Simple","Ping-pong"), channel("DelType"), value(1), fontcolour("lime") | |||
label bounds(348, 70, 80, 12), text("Delay Type"), FontColour("black") | |||
rslider bounds(420, 11, 70, 70), text("Mix"), fontcolour("black"), channel("mix"), range(0, 1.00, 0.5), colour(100,100,255),trackercolour(100,100,150) | |||
rslider bounds(485, 11, 70, 70), text("Level"), fontcolour("black"), channel("level"), range(0, 1.00, 1), colour(100,100,255),trackercolour(100,100,150) | |||
} | |||
hostbpm channel("bpm") | |||
</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 | |||
kfback chnget "fback" ;read in widgets | |||
kdamp chnget "damp" ; | |||
kmix chnget "mix" ; | |||
klevel chnget "level" ; | |||
kbpm chnget "bpm" ; | |||
kRhyMlt chnget "RhyMlt" ; | |||
kClockSource chnget "ClockSource" ; | |||
kDelType chnget "DelType" ; | |||
kwidth chnget "width" ; | |||
if kClockSource==0 then ;if internal clock source has been chosen... | |||
ktempo chnget "tempo" ;tempo taken from GUI knob control | |||
else | |||
ktempo chnget "bpm" ;tempo taken from host BPM | |||
ktempo limit ktempo,40,500 ;limit range of possible tempo values. i.e. a tempo of zero would result in a delay time of infinity. | |||
endif | |||
ktime = (60*kRhyMlt)/(ktempo*8) ;derive delay time. 8 in the denominator indicates that kRhyMult will be in demisemiquaver divisions | |||
atime interp ktime ;interpolate k-rate delay time to create an a-rate version which will give smoother results when tempo is modulated | |||
ainL,ainR ins ;read stereo inputs | |||
if kDelType==0 then ;if 'simple' delay type is chosen... | |||
abuf delayr 5 | |||
atapL deltap3 atime | |||
atapL tone atapL,kdamp | |||
delayw ainL+(atapL*kfback) | |||
abuf delayr 5 | |||
atapR deltap3 atime | |||
atapR tone atapR,kdamp | |||
delayw ainR+(atapR*kfback) | |||
else ;otherwise 'ping-pong' delay type must have been chosen | |||
;offset delay (no feedback) | |||
abuf delayr 5 | |||
afirst deltap3 atime | |||
afirst tone afirst,kdamp | |||
delayw ainL | |||
;left channel delay (note that 'atime' is doubled) | |||
abuf delayr 10 ; | |||
atapL deltap3 atime*2 | |||
atapL tone atapL,kdamp | |||
delayw afirst+(atapL*kfback) | |||
;right channel delay (note that 'atime' is doubled) | |||
abuf delayr 10 | |||
atapR deltap3 atime*2 | |||
atapR tone atapR,kdamp | |||
delayw ainR+(atapR*kfback) | |||
;create width control. note that if width is zero the result is the same as 'simple' mode | |||
atapL = afirst+atapL+(atapR*(1-kwidth)) | |||
atapR = atapR+(atapL*(1-kwidth)) | |||
endif | |||
amixL ntrpol ainL, atapL, kmix ;CREATE A DRY/WET MIX BETWEEN THE DRY AND THE EFFECT SIGNAL | |||
amixR ntrpol ainR, atapR, kmix ;CREATE A DRY/WET MIX BETWEEN THE DRY AND THE EFFECT SIGNAL | |||
outs amixL * klevel, amixR * klevel | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [3600*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,83 @@ | |||
<Cabbage> | |||
form caption("clfilt - Multi-Mode Filter") size(600, 90), pluginID("clfl") | |||
image bounds(0, 0, 600, 90), colour( 40,40,100), shape("rounded"), outline("white"), line(4) | |||
rslider bounds( 10, 11, 70, 70), text("Freq."), colour( 40,40,100), fontcolour("white"), channel("cf"), range(20, 20000, 2000, 0.333), trackercolour("white") | |||
rslider bounds( 75, 11, 70, 70), text("N.Poles"), colour( 40,40,100), fontcolour("white"), channel("npol"), range(2,80,24,1,2), trackercolour("white") | |||
rslider bounds(140, 11, 70, 70), text("Ripple"), colour( 40,40,100), fontcolour("white"), channel("pbr"), range(0.1,50,14), trackercolour("white") | |||
rslider bounds(205, 11, 70, 70), text("Attenuation"), colour( 40,40,100), fontcolour("white"), channel("sba"), range(-120,-1,-60), trackercolour("white") | |||
combobox channel("type"), bounds(275, 12, 120, 20), value(1), text("Lowpass","Highpass") | |||
label bounds(320, 32,110, 12), text("Type"), fontcolour("white") | |||
combobox channel("kind"), bounds(275, 46, 120, 20), value(2), text("Butterworth","Chebychev type I","Chebychev type II") | |||
label bounds(313, 66,120, 12), text("Method"), fontcolour("white") | |||
rslider bounds(400, 11, 70, 70), text("Mix"), colour( 40,40,100), fontcolour("white"), channel("mix"), range(0,1.00,1), trackercolour("white") | |||
rslider bounds(465, 11, 70, 70), text("Level"), colour( 40,40,100), fontcolour("white"), channel("level"), range(0,1.00,0.3), trackercolour("white") | |||
checkbox channel("test"), pos(540, 35), text("TEST"), colour("yellow"), fontcolour("white"), size(100, 15), value(0) | |||
} | |||
</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 (2013) | |||
instr 1 ; widgets input | |||
gkcf chnget "cf" ; | |||
gknpol chnget "npol" ; | |||
gknpol init 2 | |||
gkpbr chnget "pbr" | |||
gksba chnget "sba" | |||
gktype chnget "type" | |||
gktype = gktype - 1 | |||
gktype init 0 | |||
gkkind chnget "kind" | |||
gkkind = gkkind - 1 | |||
gkkind init 0 | |||
gkmix chnget "mix" ; | |||
gklevel chnget "level" ; | |||
gktest chnget "test" | |||
endin | |||
instr 2 ; clfilt - multimode filter | |||
kporttime linseg 0,0.001,0.02 | |||
kcf portk gkcf,kporttime | |||
kmix portk gkmix,kporttime | |||
klevel portk gklevel,kporttime | |||
if gktest=0 then | |||
aL,aR ins | |||
else | |||
aL pinkish 0.5 | |||
aR = aL | |||
endif | |||
ktrig changed gktype, gknpol, gkkind, gkpbr, gksba | |||
if ktrig==1 then | |||
reinit UPDATE | |||
endif | |||
UPDATE: | |||
aFiltL clfilt aL, kcf, i(gktype), i(gknpol), i(gkkind), i(gkpbr), i(gksba) | |||
aFiltR clfilt aR, kcf, i(gktype), i(gknpol), i(gkkind), i(gkpbr), i(gksba) | |||
rireturn | |||
aL ntrpol aL,aFiltL,kmix | |||
aR ntrpol aR,aFiltR,kmix | |||
outs aL*klevel,aR*klevel | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [3600*24*7] | |||
i 2 0.01 [3600*24*7] | |||
</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), trackercolour(lightblue) | |||
rslider bounds( 75, 11, 70, 70), text("Argument"), channel("arg"), range(0, 1.00, 0.5) , colour(0,10,20), fontcolour(silver), trackercolour(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), trackercolour(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), trackercolour(255,255,25) | |||
rslider bounds( 75, 11, 70, 70), text("Centre"), channel("center"), range(-1.00, 1.00, 0),fontcolour("white"), colour(20, 70,120), trackercolour(255,255,25) | |||
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), trackercolour(255,255,25) | |||
} | |||
</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,94 @@ | |||
<Cabbage> | |||
form caption("pvshift Frequency Shifter") size(510, 90), pluginID("shft") | |||
image bounds( 15, 9, 60, 60), colour(30,30,30,100), shape("ellipse"), line(0) | |||
image bounds( 85, 9, 60, 60), colour(30,30,30,100), shape("ellipse"), line(0) | |||
image bounds(155, 9, 60, 60), colour(30,30,30,100), shape("ellipse"), line(0) | |||
image bounds(225, 9, 60, 60), colour(30,30,30,100), shape("ellipse"), line(0) | |||
image bounds(295, 9, 60, 60), colour(30,30,30,100), shape("ellipse"), line(0) | |||
image bounds(365, 9, 60, 60), colour(30,30,30,100), shape("ellipse"), line(0) | |||
image bounds(435, 9, 60, 60), colour(30,30,30,100), shape("ellipse"), line(0) | |||
image bounds(-60,-10,630,110), colour(150,255,100,200), outline("silver"), line(6), shape("ellipse") | |||
rslider bounds( 10, 10, 70, 70), text("Coarse"), channel("coarse"), range(-4000, 4000, 0, 1), fontcolour("black"), colour("orange"), trackercolour("yellow") | |||
rslider bounds( 80, 10, 70, 70), text("Multiplier"), channel("fine"), range(-1, 1, 1, 1, 0.0001), fontcolour("black"), colour("orange"), trackercolour("yellow") | |||
rslider bounds(150, 10, 70, 70), text("Lowest"), channel("lowest"), range( 20, 20000, 20, 0.5), fontcolour("black"), colour("orange"), trackercolour("yellow") | |||
rslider bounds(220, 10, 70, 70), text("Feedback"), channel("FB"), range(0, 1.00, 0), fontcolour("black"), colour("orange"), trackercolour("yellow") | |||
rslider bounds(290, 10, 70, 70), text("FFT Size"), channel("att_table"), range(1, 8, 5, 1,1), fontcolour("black"), colour("orange"), trackercolour("yellow") | |||
rslider bounds(360, 10, 70, 70), text("Mix"), channel("mix"), range(0, 1.00, 1), fontcolour("black"), colour("orange"), trackercolour("yellow") | |||
rslider bounds(430, 10, 70, 70), text("Level"), channel("lev"), range(0, 1.00, 0.5, 0.5), fontcolour("black"), colour("orange"), trackercolour("yellow") | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 ;MAXIMUM AMPLITUDE | |||
;Iain McCurdy | |||
;http://iainmccurdy.org/csound.html | |||
;Frequency shifting effect using pvshift opcode. | |||
/* FFT attribute tables */ | |||
giFFTattributes1 ftgen 0, 0, 4, -2, 64, 32, 64, 1 | |||
giFFTattributes2 ftgen 0, 0, 4, -2, 128, 64, 128, 1 | |||
giFFTattributes3 ftgen 0, 0, 4, -2, 256, 128, 256, 1 | |||
giFFTattributes4 ftgen 0, 0, 4, -2, 512, 128, 512, 1 | |||
giFFTattributes5 ftgen 0, 0, 4, -2, 1024, 256, 1024, 1 | |||
giFFTattributes6 ftgen 0, 0, 4, -2, 2048, 512, 2048, 1 | |||
giFFTattributes7 ftgen 0, 0, 4, -2, 4096,1024, 4096, 1 | |||
giFFTattributes8 ftgen 0, 0, 4, -2, 8192,2048, 8192, 1 | |||
opcode pvshift_module,a,akkkkkiiii | |||
ain,kshift,klowest,kfeedback,kmix,klev,iFFTsize,ioverlap,iwinsize,iwintype xin | |||
f_FB pvsinit iFFTsize,ioverlap,iwinsize,iwintype, 0 ;INITIALISE FEEDBACK FSIG | |||
f_anal pvsanal ain, iFFTsize, ioverlap, iwinsize, iwintype ;ANALYSE AUDIO INPUT SIGNAL AND OUTPUT AN FSIG | |||
f_mix pvsmix f_anal, f_FB ;MIX AUDIO INPUT WITH FEEDBACK SIGNAL | |||
f_shift pvshift f_mix, kshift, klowest ;SHIFT FREQUENCIES | |||
f_FB pvsgain f_shift, kfeedback ;CREATE FEEDBACK F-SIGNAL FOR NEXT PASS | |||
aout pvsynth f_shift ;RESYNTHESIZE THE f-SIGNAL AS AN AUDIO SIGNAL | |||
amix ntrpol ain, aout, kmix ;CREATE DRY/WET MIX | |||
xout amix*klev | |||
endop | |||
instr 1 | |||
ainL,ainR ins | |||
;ainL,ainR diskin2 "SynthPad.wav",1,0,1 | |||
kcoarse chnget "coarse" ; coarse freq. shift | |||
kfine chnget "fine" ; fine freq. control (multipler) | |||
kporttime linseg 0,0.001,0.2 | |||
kshift lineto kcoarse*kfine, kporttime ; ultimate freq. shift is sum of coarse and fine controls | |||
klowest chnget "lowest" ; lowest shifted frequency | |||
kFB chnget "FB" ; feedback amount | |||
kmix chnget "mix" | |||
klev chnget "lev" | |||
/* SET FFT ATTRIBUTES */ | |||
katt_table chnget "att_table" ; FFT atribute table | |||
katt_table init 5 | |||
ktrig changed katt_table | |||
if ktrig==1 then | |||
reinit update | |||
endif | |||
update: | |||
iFFTsize table 0, giFFTattributes1 + i(katt_table) - 1 | |||
ioverlap table 1, giFFTattributes1 + i(katt_table) - 1 | |||
iwinsize table 2, giFFTattributes1 + i(katt_table) - 1 | |||
iwintype table 3, giFFTattributes1 + i(katt_table) - 1 | |||
/*-------------------*/ | |||
aoutL pvshift_module ainL,kshift,klowest,kFB,kmix,klev,iFFTsize,ioverlap,iwinsize,iwintype ; call UDO for each channel | |||
aoutR pvshift_module ainR,kshift,klowest,kFB,kmix,klev,iFFTsize,ioverlap,iwinsize,iwintype | |||
outs aoutR,aoutR | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [60*60*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,94 @@ | |||
<Cabbage> | |||
form caption("pvsAdsyn") size(580, 90), pluginID("adsy") | |||
image pos(0, 0), size(580, 90), colour(200,100,50,150), shape("rounded"), outline("white"), line(5) | |||
rslider bounds(10, 11, 70, 70), text("Freq.Mod."), channel("fmod"), range(0.25, 4, 1), fontcolour("white"), colour(200,100,50,250), trackercolour(tan) | |||
rslider bounds(80, 11, 70, 70), text("Num.Osc.s"), channel("noscs"), range(1, 1024, 256,1,1), fontcolour("white"), colour(200,100,50,250), trackercolour(tan) | |||
rslider bounds(150, 11, 70, 70), text("Bin Offset"), channel("binoffset"), range(0, 256, 1,1,1), fontcolour("white"), colour(200,100,50,250), trackercolour(tan) | |||
rslider bounds(220, 11, 70, 70), text("Bin Incr."), channel("binincr"), range(1, 32, 1,1,1), fontcolour("white"), colour(200,100,50,250), trackercolour(tan) | |||
rslider bounds(290, 11, 70, 70), text("FFT Size"), channel("att_table"), range(1, 8, 5, 1,1), fontcolour("white"), colour(200,100,50,250), trackercolour(tan) | |||
rslider bounds(360, 11, 70, 70), text("Feedback"), channel("feedback"), range(0, 0.99, 0), fontcolour("white"), colour(200,100,50,250), trackercolour(tan) | |||
rslider bounds(430, 11, 70, 70), text("Mix"), channel("mix"), range(0, 1.00, 1), fontcolour("white"), colour(200,100,50,250), trackercolour(tan) | |||
rslider bounds(500, 11, 70, 70), text("Level"), channel("lev"), range(0, 5.00, 0.5, 0.5), fontcolour("white"), colour(200,100,50,250), trackercolour(tan) | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 ;MAXIMUM AMPLITUDE | |||
;Author: Iain McCurdy (2012) | |||
;http://iainmccurdy.org/csound.html | |||
/* FFT attribute tables */ | |||
giFFTattributes1 ftgen 0, 0, 4, -2, 64, 32, 64, 1 | |||
giFFTattributes2 ftgen 0, 0, 4, -2, 128, 64, 128, 1 | |||
giFFTattributes3 ftgen 0, 0, 4, -2, 256, 128, 256, 1 | |||
giFFTattributes4 ftgen 0, 0, 4, -2, 512, 128, 512, 1 | |||
giFFTattributes5 ftgen 0, 0, 4, -2, 1024, 256, 1024, 1 | |||
giFFTattributes6 ftgen 0, 0, 4, -2, 2048, 512, 2048, 1 | |||
giFFTattributes7 ftgen 0, 0, 4, -2, 4096,1024, 4096, 1 | |||
giFFTattributes8 ftgen 0, 0, 4, -2, 8192,2048, 8192, 1 | |||
opcode pvsadsyn_module,a,akkkkkkiiii | |||
ain,kfmod,knoscs,kbinoffset,kbinincr,kfeedback,kmix,iFFTsize,ioverlap,iwinsize,iwintype xin | |||
aresyn init 0 | |||
f_anal pvsanal ain+(aresyn*kfeedback), iFFTsize, ioverlap, iwinsize, iwintype ;ANALYSE AUDIO INPUT SIGNAL AND OUTPUT AN FSIG | |||
knossc init 256 | |||
ktrig changed knoscs,kbinoffset,kbinincr | |||
if ktrig==1 then | |||
reinit UPDATE | |||
endif | |||
UPDATE: | |||
inoscs init i(knoscs) | |||
ibinoffset init i(kbinoffset) | |||
ibinincr init i(kbinincr) | |||
inoscs limit inoscs, 1, (((iFFTsize*0.5)+1)-ibinoffset)/ibinincr | |||
aresyn pvsadsyn f_anal, inoscs, kfmod , i(kbinoffset), i(kbinincr) ;RESYNTHESIZE FROM THE fsig USING pvsadsyn | |||
rireturn | |||
amix ntrpol ain, aresyn, kmix ;CREATE DRY/WET MIX | |||
xout amix | |||
endop | |||
instr 1 | |||
; audio input | |||
ainL,ainR ins | |||
;ainL,ainR diskin "SynthPad.wav",1,0,1 ;USE FOR TESTING | |||
kmix chnget "mix" | |||
kfmod chnget "fmod" | |||
knoscs chnget "noscs" | |||
kbinoffset chnget "binoffset" | |||
kbinincr chnget "binincr" | |||
klev chnget "lev" | |||
kfeedback chnget "feedback" | |||
/* SET FFT ATTRIBUTES */ | |||
katt_table chnget "att_table" ; FFT atribute table | |||
katt_table init 5 | |||
ktrig changed katt_table | |||
if ktrig==1 then | |||
reinit update | |||
endif | |||
update: | |||
iFFTsize table 0, giFFTattributes1 + i(katt_table) - 1 | |||
ioverlap table 1, giFFTattributes1 + i(katt_table) - 1 | |||
iwinsize table 2, giFFTattributes1 + i(katt_table) - 1 | |||
iwintype table 3, giFFTattributes1 + i(katt_table) - 1 | |||
/*-------------------*/ | |||
aoutL pvsadsyn_module ainL,kfmod,knoscs,kbinoffset,kbinincr,kfeedback,kmix,iFFTsize,ioverlap,iwinsize,iwintype | |||
aoutR pvsadsyn_module ainR,kfmod,knoscs,kbinoffset,kbinincr,kfeedback,kmix,iFFTsize,ioverlap,iwinsize,iwintype | |||
outs aoutR*klev,aoutR*klev | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [60*60*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,93 @@ | |||
; pvsBandp | |||
; seems to crash a bit on Windows... | |||
<Cabbage> | |||
form caption("pvs Bandpass Filter"), size(390, 310) colour(255,165,79,150), pluginID("bndp") | |||
vslider bounds( 10, 0, 60,200), text("Low Cut"), channel("lowcut"), range(20, 20000, 500,0.5), colour("black"), FontColour("black"), trackercolour("yellow") | |||
vslider bounds( 70, 0, 60,200), text("Low Full"), channel("lowfull"), range(20, 20000, 550,0.5), colour("black"), trackercolour("yellow") | |||
vslider bounds(130, 0, 60,200), text("High Full"), channel("highfull"), range(20, 20000,1900,0.5), colour("black"), trackercolour("yellow") | |||
vslider bounds(190, 0, 60,200), text("High Cut"), channel("highcut"), range(20, 20000, 2000,0.5), colour("black"), trackercolour("yellow") | |||
vslider bounds(250, 0, 60,200), text("Curve"), channel("type"), range(-5.00, 5.00, 0), colour("black"), trackercolour("yellow") | |||
rslider bounds(310, 30, 70, 70), text("FFT Size"), channel("att_table"), range(1,10, 5, 1,1), colour("black"), trackercolour("yellow") | |||
rslider bounds(310,110, 70, 70), text("Feedback"), channel("feedback"), range(0,0.99, 0), colour("black"), trackercolour("yellow") | |||
line bounds( 0, 210, 390,100), colour("Grey") | |||
hslider bounds( 5,205, 380, 60), text("Mix"), channel("mix"), fontcolour("black"), range(0, 1.00, 1), colour("black"), trackercolour("yellow") | |||
hslider bounds( 5,250, 380, 60), text("Level"), channel("lev"), fontcolour("black"), range(0, 10.00, 0.5, 0.5), colour("black"), trackercolour("yellow") | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 ;MAXIMUM AMPLITUDE | |||
;Author: Iain McCurdy (2013) | |||
;http://iainmccurdy.org/csound.html | |||
/* FFT attribute tables */ | |||
giFFTattributes1 ftgen 0, 0, 4, -2, 64, 32, 64, 1 | |||
giFFTattributes2 ftgen 0, 0, 4, -2, 128, 64, 128, 1 | |||
giFFTattributes3 ftgen 0, 0, 4, -2, 256, 128, 256, 1 | |||
giFFTattributes4 ftgen 0, 0, 4, -2, 512, 128, 512, 1 | |||
giFFTattributes5 ftgen 0, 0, 4, -2, 1024, 128, 1024, 1 | |||
giFFTattributes6 ftgen 0, 0, 4, -2, 2048, 256, 2048, 1 | |||
giFFTattributes7 ftgen 0, 0, 4, -2, 2048,1024, 2048, 1 | |||
giFFTattributes8 ftgen 0, 0, 4, -2, 4096,1024, 4096, 1 | |||
giFFTattributes9 ftgen 0, 0, 4, -2, 8192,2048, 8192, 1 | |||
giFFTattributes10 ftgen 0, 0, 4, -2,16384,4096,16384, 1 | |||
opcode pvsbandp_module,a,akkkkkkkkiiii | |||
ain,klowcut,klowfull,khighfull,khighcut,ktype,kfeedback,kmix,klev,iFFTsize,ioverlap,iwinsize,iwintype xin | |||
f_FB pvsinit iFFTsize,ioverlap,iwinsize,iwintype, 0 ;INITIALISE FEEDBACK FSIG | |||
f_anal pvsanal ain, iFFTsize, ioverlap, iwinsize, iwintype ;ANALYSE AUDIO INPUT SIGNAL AND OUTPUT AN FSIG | |||
f_mix pvsmix f_anal, f_FB ;MIX AUDIO INPUT WITH FEEDBACK SIGNAL | |||
f_bandp pvsbandp f_mix, klowcut, klowfull, khighfull, khighcut, ktype | |||
f_FB pvsgain f_bandp, kfeedback ;CREATE FEEDBACK F-SIGNAL FOR NEXT PASS | |||
aout pvsynth f_bandp ;RESYNTHESIZE THE f-SIGNAL AS AN AUDIO SIGNAL | |||
ain delay ain,iwinsize/sr | |||
amix ntrpol ain, aout, kmix ;CREATE DRY/WET MIX | |||
xout amix*klev | |||
endop | |||
instr 1 | |||
kmix chnget "mix" | |||
klev chnget "lev" | |||
klowcut chnget "lowcut" | |||
klowfull chnget "lowfull" | |||
khighfull chnget "highfull" | |||
khighcut chnget "highcut" | |||
ktype chnget "type" | |||
kfeedback chnget "feedback" | |||
ainL,ainR ins | |||
;ainL,ainR diskin "808loop.wav",1,0,1 ;USE FOR TESTING | |||
katt_table chnget "att_table" ; FFT atribute table | |||
katt_table init 5 | |||
ktrig changed katt_table | |||
if ktrig==1 then | |||
reinit update | |||
endif | |||
update: | |||
iFFTsize table 0, giFFTattributes1 + i(katt_table) - 1 | |||
ioverlap table 1, giFFTattributes1 + i(katt_table) - 1 | |||
iwinsize table 2, giFFTattributes1 + i(katt_table) - 1 | |||
iwintype table 3, giFFTattributes1 + i(katt_table) - 1 | |||
aoutL pvsbandp_module ainL,klowcut,klowfull,khighfull,khighcut,ktype,kfeedback,kmix,klev,iFFTsize,ioverlap,iwinsize,iwintype | |||
aoutR pvsbandp_module ainR,klowcut,klowfull,khighfull,khighcut,ktype,kfeedback,kmix,klev,iFFTsize,ioverlap,iwinsize,iwintype | |||
outs aoutL, aoutR | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [60*60*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,95 @@ | |||
; pvsBandr | |||
; seems to crash a bit on Windows... | |||
<Cabbage> | |||
form caption("pvs Bandreject Filter"), size(390, 310) colour( 55,165,79,150), pluginID("bndp") | |||
vslider bounds( 10, 0, 60,200), text("Low Cut"), channel("lowcut"), range(20, 20000, 100,0.5), colour("black"), FontColour("black"), trackercolour("yellow") | |||
vslider bounds( 70, 0, 60,200), text("Low Full"), channel("lowfull"), range(20, 20000, 150,0.5), colour("black"), trackercolour("yellow") | |||
vslider bounds(130, 0, 60,200), text("High Full"), channel("highfull"), range(20, 20000,2800,0.5), colour("black"), trackercolour("yellow") | |||
vslider bounds(190, 0, 60,200), text("High Cut"), channel("highcut"), range(20, 20000, 2900,0.5), colour("black"), trackercolour("yellow") | |||
vslider bounds(250, 0, 60,200), text("Curve"), channel("type"), range(-5.00, 5.00, 0), colour("black"), trackercolour("yellow") | |||
rslider bounds(310, 30, 70, 70), text("FFT Size"), channel("att_table"),range(1,10, 5, 1,1), colour("black"), trackercolour("yellow") | |||
rslider bounds(310,110, 70, 70), text("Feedback"), channel("feedback"), range(0,0.99, 0), colour("black"), trackercolour("yellow") | |||
line bounds( 0, 210, 390,100), colour("Grey") | |||
hslider bounds( 5,205, 380, 60), text("Mix"), channel("mix"), fontcolour("black"), range(0, 1.00, 1), colour("black"), trackercolour("yellow") | |||
hslider bounds( 5,250, 380, 60), text("Level"), channel("lev"), fontcolour("black"), range(0, 10.00, 0.5, 0.5), colour("black"), trackercolour("yellow") | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 ;MAXIMUM AMPLITUDE | |||
;Author: Iain McCurdy (2013) | |||
;http://iainmccurdy.org/csound.html | |||
/* FFT attribute tables */ | |||
giFFTattributes1 ftgen 0, 0, 4, -2, 64, 32, 64, 1 | |||
giFFTattributes2 ftgen 0, 0, 4, -2, 128, 64, 128, 1 | |||
giFFTattributes3 ftgen 0, 0, 4, -2, 256, 128, 256, 1 | |||
giFFTattributes4 ftgen 0, 0, 4, -2, 512, 128, 512, 1 | |||
giFFTattributes5 ftgen 0, 0, 4, -2, 1024, 128, 1024, 1 | |||
giFFTattributes6 ftgen 0, 0, 4, -2, 2048, 256, 2048, 1 | |||
giFFTattributes7 ftgen 0, 0, 4, -2, 2048,1024, 2048, 1 | |||
giFFTattributes8 ftgen 0, 0, 4, -2, 4096,1024, 4096, 1 | |||
giFFTattributes9 ftgen 0, 0, 4, -2, 8192,2048, 8192, 1 | |||
giFFTattributes10 ftgen 0, 0, 4, -2,16384,4096,16384, 1 | |||
opcode pvsbandr_module,a,akkkkkkkkiiii | |||
ain,klowcut,klowfull,khighfull,khighcut,ktype,kfeedback,kmix,klev,iFFTsize,ioverlap,iwinsize,iwintype xin | |||
f_FB pvsinit iFFTsize,ioverlap,iwinsize,iwintype, 0 ;INITIALISE FEEDBACK FSIG | |||
f_anal pvsanal ain, iFFTsize, ioverlap, iwinsize, iwintype ;ANALYSE AUDIO INPUT SIGNAL AND OUTPUT AN FSIG | |||
f_mix pvsmix f_anal, f_FB ;MIX AUDIO INPUT WITH FEEDBACK SIGNAL | |||
f_bandr pvsbandr f_mix, klowcut, klowfull, khighfull, khighcut, ktype | |||
f_FB pvsgain f_bandr, kfeedback ;CREATE FEEDBACK F-SIGNAL FOR NEXT PASS | |||
aout pvsynth f_bandr ;RESYNTHESIZE THE f-SIGNAL AS AN AUDIO SIGNAL | |||
ain delay ain,iwinsize/sr | |||
amix ntrpol ain, aout, kmix ;CREATE DRY/WET MIX | |||
xout amix*klev | |||
endop | |||
instr 1 | |||
kmix chnget "mix" | |||
klev chnget "lev" | |||
klowcut chnget "lowcut" | |||
klowfull chnget "lowfull" | |||
khighfull chnget "highfull" | |||
khighcut chnget "highcut" | |||
ktype chnget "type" | |||
kfeedback chnget "feedback" | |||
ainL,ainR ins | |||
;ainL,ainR diskin "808loop.wav",1,0,1 ;USE FOR TESTING | |||
katt_table chnget "att_table" ; FFT atribute table | |||
katt_table init 5 | |||
ktrig changed katt_table | |||
if ktrig==1 then | |||
reinit update | |||
endif | |||
update: | |||
iFFTsize table 0, giFFTattributes1 + i(katt_table) - 1 | |||
ioverlap table 1, giFFTattributes1 + i(katt_table) - 1 | |||
iwinsize table 2, giFFTattributes1 + i(katt_table) - 1 | |||
iwintype table 3, giFFTattributes1 + i(katt_table) - 1 | |||
aoutL pvsbandr_module ainL,klowcut,klowfull,khighfull,khighcut,ktype,kfeedback,kmix,klev,iFFTsize,ioverlap,iwinsize,iwintype | |||
aoutR pvsbandr_module ainR,klowcut,klowfull,khighfull,khighcut,ktype,kfeedback,kmix,klev,iFFTsize,ioverlap,iwinsize,iwintype | |||
outs aoutL, aoutR | |||
;klev chnget "lev" | |||
; outs ainL*klev,ainR*klev | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [60*60*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,171 @@ | |||
<Cabbage> | |||
form caption("FFT Effects") size(450, 640), pluginID("pvfx") | |||
; PVSFREEZE | |||
groupbox bounds(0, 0, 450, 100), colour( 0,200,100,100) text("Freeze"), fontcolour("white"), plant("pvsfreeze"){ | |||
checkbox bounds(35, 30, 30, 30), channel("freeze_onoff"), fontcolour("black"), colour("red"), shape("rounded") | |||
label bounds( 30, 68, 60, 12), text("On/Off"), FontColour("white") | |||
checkbox bounds(100, 30, 180, 25), channel("freezb"), text("Freeze Both"), fontcolour("white"), shape("rounded"), colour("red") | |||
checkbox bounds(215, 30, 180, 25), channel("freeza"), text("Freeze Amplitudes"), fontcolour("white"), shape("rounded"), colour("yellow") | |||
checkbox bounds(215, 65, 180, 25), channel("freezf"), text("Freeze Frequencies"), fontcolour("white"), shape("rounded"), colour("orange") | |||
rslider bounds(370, 25, 70, 70), text("Mix"), channel("freeze_mix"), fontcolour("white"), range(0, 1.00, 1), colour( 0,200,100,150) | |||
} | |||
; PVSCALE | |||
groupbox bounds(0,100, 225, 100), colour(250,250, 0,200) text("Freq. Scale"), fontcolour("white"), plant("pvscale"){ | |||
checkbox bounds(25, 30, 30, 30), channel("pvscale_onoff"), fontcolour("black"), colour("red"), shape("rounded") | |||
label bounds( 20, 68, 60, 12), text("On/Off"), FontColour("white") | |||
rslider bounds( 70, 25, 70, 70), text("Ratio"), channel("pvscale_scal"), fontcolour("white"), range(0.25, 4.00, 1, 0.5, 0.01), colour(250,250, 0,150) | |||
rslider bounds(140, 25, 70, 70), text("Mix"), channel("pvscale_mix"), fontcolour("white"), range(0, 1.00, 1), colour(250,250, 0,150) | |||
} | |||
; PVSHIFT | |||
groupbox bounds(225,100, 225, 100), colour( 0,250,250,200) text("Freq. Shift"), fontcolour("white"), plant("pvshift"){ | |||
checkbox bounds(25, 30, 30, 30), channel("pvshift_onoff"), fontcolour("black"), colour("red"), shape("rounded") | |||
label bounds( 20, 68, 60, 12), text("On/Off"), FontColour("white") | |||
rslider bounds( 70, 25, 70, 70), text("Freq."), channel("pvshift_freq"), fontcolour("white"), range(-4000, 4000, 0), colour( 0,250,250,150) | |||
rslider bounds(140, 25, 70, 70), text("Mix"), channel("pvshift_mix"), fontcolour("white"), range(0, 1.00, 1), colour( 0,250,250,150) | |||
} | |||
; PVSBLUR | |||
groupbox bounds(0,200, 225, 100), colour( 50,250, 0,200) text("Blur"), fontcolour("white"), plant("pvsblur"){ | |||
checkbox bounds(25, 30, 30, 30), channel("pvsblur_onoff"), fontcolour("black"), colour("red"), shape("rounded") | |||
label bounds( 20, 68, 60, 12), text("On/Off"), FontColour("white") | |||
rslider bounds( 70, 25, 70, 70), text("Ratio"), channel("pvsblur_scal"), fontcolour("white"), range(0.25, 4.00, 1, 0.5, 0.01), colour( 50,250, 0,150) | |||
rslider bounds(140, 25, 70, 70), text("Mix"), channel("pvsblur_mix"), fontcolour("white"), range(0, 1.00, 1), colour( 50,250, 0,150) | |||
} | |||
; PVSMOOTH | |||
groupbox bounds(225,200, 225, 100), colour(100,250,100,200) text("Smooth"), fontcolour("white"), plant("pvsmooth"){ | |||
checkbox bounds(25, 30, 30, 30), channel("pvsmooth_onoff"), fontcolour("black"), colour("red"), shape("rounded") | |||
label bounds( 20, 68, 60, 12), text("On/Off"), FontColour("white") | |||
rslider bounds( 70, 25, 70, 70), text("Freq."), channel("pvsmooth_freq"), fontcolour("white"), range(-4000, 4000, 0), colour(100,250,100,160) | |||
rslider bounds(140, 25, 70, 70), text("Mix"), channel("pvsmooth_mix"), fontcolour("white"), range(0, 1.00, 1), colour(100,250,100,150) | |||
} | |||
; PVSWARP | |||
; PVSBANDP / PVSBANDR | |||
; PVSADSYN | |||
groupbox bounds(0, 300, 450, 100), colour(150, 40, 40,250) text("Additive Resynthesizer"), fontcolour("white"), plant("pvsadsyn"){ | |||
checkbox bounds(35, 30, 30, 30), channel("pvsadsyn_onoff"), fontcolour("black"), colour("red"), shape("rounded") | |||
label bounds( 30, 68, 60, 12), text("On/Off"), FontColour("white") | |||
rslider bounds( 90, 25, 70, 70), text("Freq.Mod."), channel("pvsadsyn_fmod"), range(0.25, 4, 1), fontcolour("white"), colour(110, 0, 0,200) | |||
rslider bounds(160, 25, 70, 70), text("Num.Osc.s"), channel("pvsadsyn_noscs"), range(1, 1024, 256,1,1), fontcolour("white"), colour(110, 0, 0,200) | |||
rslider bounds(230, 25, 70, 70), text("Bin Offset"), channel("pvsadsyn_binoffset"), range(0, 256, 1,1,1), fontcolour("white"), colour(110, 0, 0,200) | |||
rslider bounds(300, 25, 70, 70), text("Bin Incr."), channel("pvsadsyn_binincr"), range(1, 32, 1,1,1), fontcolour("white"), colour(110, 0, 0,200) | |||
rslider bounds(370, 25, 70, 70), text("Mix"), channel("pvsadsyn_mix"), range(0, 1, 1), fontcolour("white"), colour(110, 0, 0,200) | |||
} | |||
; OUTPUT | |||
groupbox bounds(0, 400, 450, 100), colour( 0,250,250,100) text("Output"), fontcolour("white"), plant("output"){ | |||
rslider bounds( 10, 25, 70, 70), text("Level"), channel("level"), range(0, 1.00, 0), fontcolour("white"), colour( 0,250,250,150) | |||
} | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 ;MAXIMUM AMPLITUDE | |||
;Author: Iain McCurdy (2013) | |||
;http://iainmccurdy.org/csound.html | |||
instr 1 | |||
/* AUDIO INPUT */ | |||
aL,aR ins | |||
;aL,aR diskin2 "SynthPad.wav",1,0,1 | |||
/* FFT PARAMETERS */ | |||
iFFTsize = 1024 | |||
ioverlap = 256 | |||
iwinsize = 1024 | |||
iwintype = 1 | |||
/* ANALYSE AUDIO SIGNAL */ | |||
f_sigL pvsanal aL, iFFTsize, ioverlap, iwinsize, iwintype ;ANALYSE AUDIO INPUT SIGNAL AND OUTPUT AN FSIG | |||
f_sigR pvsanal aR, iFFTsize, ioverlap, iwinsize, iwintype | |||
/* PVSFREEZE */ | |||
kfreeze_onoff chnget "freeze_onoff" | |||
kfreeze_mix chnget "freeze_mix" | |||
kfreeza chnget "freeza" | |||
kfreezf chnget "freezf" | |||
kfreezb chnget "freezb" | |||
if(kfreeze_onoff==1) then | |||
; triggering of 'Freeze All' mode | |||
kon = 1 | |||
koff = 0 | |||
ktrigon trigger kfreezb,0.5,0 | |||
ktrigoff trigger kfreezb,0.5,1 | |||
if(ktrigon==1) then | |||
chnset kon,"freeza" | |||
chnset kon,"freezf" | |||
elseif(ktrigoff==1) then | |||
chnset koff,"freeza" | |||
chnset koff,"freezf" | |||
endif | |||
f_freezeL pvsfreeze f_sigL, kfreeza, kfreezf | |||
f_freezeR pvsfreeze f_sigR, kfreeza, kfreezf | |||
f_drymixL pvsgain f_sigL, 1-kfreeze_mix ;WET/DRY MIX | |||
f_drymixR pvsgain f_sigR, 1-kfreeze_mix ; | |||
f_wetmixL pvsgain f_freezeL, kfreeze_mix ; | |||
f_wetmixR pvsgain f_freezeR, kfreeze_mix ; | |||
f_sigL pvsmix f_drymixL, f_wetmixL ; | |||
f_sigR pvsmix f_drymixR, f_wetmixR ; | |||
endif | |||
/* PVSADSYN */ | |||
kpvsadsyn_onoff chnget "pvsadsyn_onoff" ;READ IN WIDGETS | |||
if(kpvsadsyn_onoff==1) then | |||
kpvsadsyn_mix chnget "pvsadsyn_mix" ;READ IN WIDGETS | |||
kpvsadsyn_fmod chnget "pvsadsyn_fmod" | |||
kpvsadsyn_noscs chnget "pvsadsyn_noscs" | |||
kpvsadsyn_binoffset chnget "pvsadsyn_binoffset" | |||
kpvsadsyn_binincr chnget "pvsadsyn_binincr" | |||
kpvsadsyn_lev chnget "pvsadsyn_lev" | |||
knossc init 256 | |||
ktrig changed kpvsadsyn_noscs,kpvsadsyn_binoffset,kpvsadsyn_binincr ;GENERATE TRIGGER FOR I-RATE PARAMETERS | |||
if ktrig==1 then | |||
reinit UPDATE | |||
endif | |||
UPDATE: | |||
inoscs init i(kpvsadsyn_noscs) | |||
ibinoffset init i(kpvsadsyn_binoffset) | |||
ibinincr init i(kpvsadsyn_binincr) | |||
inoscs limit inoscs, 1, (((iFFTsize*0.5)+1)-ibinoffset)/ibinincr ;LIMIT NUMBER OF OSCILLATORS USED TO PREVENT CRASHES | |||
aresynL pvsadsyn f_sigL, inoscs, kpvsadsyn_fmod , ibinoffset, ibinincr ;RESYNTHESIZE FROM THE fsig USING pvsadsyn | |||
aresynR pvsadsyn f_sigR, inoscs, kpvsadsyn_fmod , ibinoffset, ibinincr | |||
rireturn | |||
aresynL ntrpol aL, aresynL, kpvsadsyn_mix ;CREATE DRY/WET MIX | |||
aresynR ntrpol aR, aresynR, kpvsadsyn_mix | |||
else | |||
/* PVSYNTH */ | |||
aresynL pvsynth f_sigL ;RESYNTHESIZE THE f-SIGNAL AS AN AUDIO SIGNAL | |||
aresynR pvsynth f_sigR ;RESYNTHESIZE THE f-SIGNAL AS AN AUDIO SIGNAL | |||
endif | |||
/* AUDIO OUTPUT */ | |||
klevel chnget "level" ;READ IN WIDGETS | |||
outs aresynL*klevel, aresynR*klevel | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [60*60*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,131 @@ | |||
; pvsFreeze.csd | |||
; Freeze either amplitude stream or frequency stream (or both) of a streaming FFT analysis | |||
; Changing FFT size can modify the sound quality of the frozen sound | |||
; 'Auto' can be used to automatically trigger a new freeze frame (both amplitude and frequency) if the amplitude of the sound crosses a threshold | |||
; 'Delay' specifies the time delay at which the sound will actually be frozen after the threshold triggering. This can be employed to capture the sustain portion of a sound (and not the attack). | |||
; 'Threshold' specifies the threshold level at which triggering will occur. In a noisy environment, raise 'Threshold' | |||
<Cabbage> | |||
form caption("pvsfreeze"), size(670, 80) colour( 0,140,40,170), pluginID("frez") | |||
image bounds( 0, 0,270, 80), colour( 0,200,100,100), shape("rounded"), outline("white"), line(4) | |||
checkbox bounds( 15, 10, 180, 25), channel("freezb"), text("Freeze Both"), fontcolour("white"), shape("rounded"), colour("red") | |||
checkbox bounds(120, 10, 180, 25), channel("freeza"), text("Freeze Amplitudes"), fontcolour("white"), shape("rounded"), colour("yellow") | |||
checkbox bounds(120, 45, 180, 25), channel("freezf"), text("Freeze Frequencies"), fontcolour("white"), shape("rounded"), colour("orange") | |||
image bounds(270, 0,200, 80), colour( 0,200,100,100), shape("rounded"), outline("white"), line(4) | |||
rslider bounds(280, 10, 60, 60), text("FFT Size"), channel("att_table"), range(1, 8, 5, 1,1), fontcolour("white"), colour( 0,100, 50,255), trackercolour("white") | |||
rslider bounds(340, 10, 60, 60), text("Mix"), channel("mix"), range(0, 1.00, 1), fontcolour("white"), colour( 0,100, 50,255), trackercolour("white") | |||
rslider bounds(400, 10, 60, 60), text("Level"), channel("lev"), range(0, 1.00, 0.5, 0.5), fontcolour("white"), colour( 0,100, 50,255), trackercolour("white") | |||
image bounds(470, 0,200, 80), colour( 0,200,100,100), shape("rounded"), outline("white"), line(4) | |||
checkbox bounds(480, 10, 180, 25), channel("auto"), text("Auto"), fontcolour("white"), shape("rounded"), colour("red") | |||
rslider bounds(540, 10, 60, 60), text("Delay"), channel("delay"), fontcolour("white"), range(0.0001, 0.5, 0.1, 1,0.001), colour( 0,100, 50,255), trackercolour("white") | |||
rslider bounds(600, 10, 60, 60), text("Threshold"), channel("thresh"), fontcolour("white"), range(0.001, 0.5, 0.1,1,0.001), colour( 0,100, 50,255), trackercolour("white") | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 64 | |||
nchnls = 2 | |||
0dbfs = 1 ;MAXIMUM AMPLITUDE | |||
;Author: Iain McCurdy (2013) | |||
;http://iainmccurdy.org/csound.html | |||
/* FFT attribute tables */ | |||
giFFTattributes1 ftgen 0, 0, 4, -2, 64, 32, 64, 1 | |||
giFFTattributes2 ftgen 0, 0, 4, -2, 128, 64, 128, 1 | |||
giFFTattributes3 ftgen 0, 0, 4, -2, 256, 128, 256, 1 | |||
giFFTattributes4 ftgen 0, 0, 4, -2, 512, 128, 512, 1 | |||
giFFTattributes5 ftgen 0, 0, 4, -2, 1024, 256, 1024, 1 | |||
giFFTattributes6 ftgen 0, 0, 4, -2, 2048, 512, 2048, 1 | |||
giFFTattributes7 ftgen 0, 0, 4, -2, 4096,1024, 4096, 1 | |||
giFFTattributes8 ftgen 0, 0, 4, -2, 8192,2048, 8192, 1 | |||
opcode pvsfreeze_module,a,akkkkiiii | |||
ain,kfreeza,kfreezf,kmix,klev,iFFTsize,ioverlap,iwinsize,iwintype xin | |||
f_anal pvsanal ain, iFFTsize, ioverlap, iwinsize, iwintype ;ANALYSE AUDIO INPUT SIGNAL AND OUTPUT AN FSIG | |||
f_freeze pvsfreeze f_anal, kfreeza, kfreezf | |||
aout pvsynth f_freeze ;RESYNTHESIZE THE f-SIGNAL AS AN AUDIO SIGNAL | |||
amix ntrpol ain, aout, kmix ;CREATE DRY/WET MIX | |||
xout amix*klev | |||
endop | |||
instr 1 | |||
kmix chnget "mix" ; read in widgets | |||
klev chnget "lev" | |||
kfreeza chnget "freeza" | |||
kfreezf chnget "freeza" | |||
kfreezb chnget "freezb" | |||
; triggering of 'Freeze All' mode | |||
kon = 1 | |||
koff = 0 | |||
ktrigon trigger kfreezb,0.5,0 | |||
ktrigoff trigger kfreezb,0.5,1 | |||
if(ktrigon==1) then | |||
chnset kon,"freeza" | |||
chnset kon,"freezf" | |||
elseif(ktrigoff==1) then | |||
chnset koff,"freeza" | |||
chnset koff,"freezf" | |||
endif | |||
; audio input | |||
ainL,ainR ins | |||
;ainL,ainR diskin "808loop.wav",1,0,1 ;USE FOR TESTING | |||
; auto freeze triggering | |||
kauto chnget "auto" ; read in widgets | |||
kthresh chnget "thresh" | |||
kdelay chnget "delay" | |||
if kauto==1 then ; if 'Auto' is on | |||
krms rms ainL+ainR ; scan RMS of audio signal | |||
ktrig trigger krms,kthresh,0 ; if signal crosses threshold upwards | |||
ktrigdel vdel_k ktrig,kdelay,0.5 ; delayed version of the trigger | |||
if ktrig==1 then ; if initial threshold crossing occurs... | |||
chnset koff,"freeza" ; turn freezing off | |||
chnset koff,"freezf" | |||
endif | |||
if ktrigdel==1 then ; if delayed trigger is received... | |||
chnset kon,"freeza" ; turn freezing on | |||
chnset kon,"freezf" | |||
endif | |||
endif | |||
kofftrig trigger kauto,0.5,1 ; when 'Auto' is turned off generate a trigger | |||
if kofftrig==1 then ; if 'Auto' is turned off... | |||
chnset koff,"freeza" ; turn freezing off | |||
chnset koff,"freezf" | |||
endif | |||
/* SET FFT ATTRIBUTES */ | |||
katt_table chnget "att_table" ; FFT atribute table | |||
katt_table init 5 | |||
ktrig changed katt_table | |||
if ktrig==1 then | |||
reinit update | |||
endif | |||
update: | |||
iFFTsize table 0, giFFTattributes1 + i(katt_table) - 1 | |||
ioverlap table 1, giFFTattributes1 + i(katt_table) - 1 | |||
iwinsize table 2, giFFTattributes1 + i(katt_table) - 1 | |||
iwintype table 3, giFFTattributes1 + i(katt_table) - 1 | |||
/*-------------------*/ | |||
aoutL pvsfreeze_module ainL,kfreeza,kfreezf,kmix,klev,iFFTsize,ioverlap,iwinsize,iwintype | |||
aoutR pvsfreeze_module ainR,kfreeza,kfreezf,kmix,klev,iFFTsize,ioverlap,iwinsize,iwintype | |||
outs aoutR,aoutR | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [60*60*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,90 @@ | |||
<Cabbage> | |||
form caption("pvsWarp") size(440, 90), pluginID("warp") | |||
image pos(0, 0), size(440, 90), colour( 50, 50,75,220), shape("rounded"), outline("white"), line(4) | |||
rslider bounds( 10, 11, 70, 70), text("Scale"), channel("scal"), range(0.1, 4, 1, 0.5, 0.001), colour("LightSlateGrey"), fontcolour("white"), trackercolour("white") | |||
rslider bounds( 80, 11, 70, 70), text("Shift"), channel("shift"), range(-5000, 5000, 0), colour("LightSlateGrey"), fontcolour("white"), trackercolour("white") | |||
rslider bounds(150, 11, 70, 70), text("Feedback"), channel("FB"), range(0, 0.99, 0), colour("LightSlateGrey"), fontcolour("white"), trackercolour("white") | |||
rslider bounds(220, 10, 70, 70), text("FFT Size"), channel("att_table"), range(1, 8, 5, 1,1), colour("LightSlateGrey"), fontcolour("white"), trackercolour("white") | |||
rslider bounds(290, 11, 70, 70), text("Mix"), channel("mix"), range(0, 1.00, 1), colour("LightSlateGrey"), fontcolour("white"), trackercolour("white") | |||
rslider bounds(360, 11, 70, 70), text("Level"), channel("lev"), range(0, 1.00, 0.5), colour("LightSlateGrey"), fontcolour("white"), trackercolour("white") | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 ;MAXIMUM AMPLITUDE | |||
;Author: Iain McCurdy (2012) | |||
;http://iainmccurdy.org/csound.html | |||
/* FFT attribute tables */ | |||
giFFTattributes1 ftgen 0, 0, 4, -2, 64, 32, 64, 1 | |||
giFFTattributes2 ftgen 0, 0, 4, -2, 128, 64, 128, 1 | |||
giFFTattributes3 ftgen 0, 0, 4, -2, 256, 128, 256, 1 | |||
giFFTattributes4 ftgen 0, 0, 4, -2, 512, 128, 512, 1 | |||
giFFTattributes5 ftgen 0, 0, 4, -2, 1024, 256, 1024, 1 | |||
giFFTattributes6 ftgen 0, 0, 4, -2, 2048, 512, 2048, 1 | |||
giFFTattributes7 ftgen 0, 0, 4, -2, 4096,1024, 4096, 1 | |||
giFFTattributes8 ftgen 0, 0, 4, -2, 8192,2048, 8192, 1 | |||
opcode pvswarp_module,a,akkkkiiii | |||
ain,kscal,kshift,kfeedback,kmix,iFFTsize,ioverlap,iwinsize,iwintype xin | |||
aout init 0 | |||
;f_FB pvsinit iFFTsize,ioverlap,iwinsize,iwintype, 0 ;INITIALISE FEEDBACK FSIG | |||
f_anal pvsanal ain+(aout*kfeedback), iFFTsize, ioverlap, iwinsize, iwintype ;ANALYSE AUDIO INPUT SIGNAL AND OUTPUT AN FSIG | |||
;f_mix pvsmix f_anal, f_FB ;MIX AUDIO INPUT WITH FEEDBACK SIGNAL | |||
f_warp pvswarp f_anal, kscal, kshift ;WARP SPECTRAL ENVELOPE VALUES OF AN F-SIGNAL USING BOTH SCALING AND SHIFTING | |||
;f_FB pvsgain f_warp, kfeedback ;CREATE FEEDBACK F-SIGNAL FOR NEXT PASS | |||
aout pvsynth f_warp ;RESYNTHESIZE THE f-SIGNAL AS AN AUDIO SIGNAL | |||
if(kfeedback>0) then | |||
aout clip aout,0,0dbfs | |||
endif | |||
amix ntrpol ain, aout, kmix ;CREATE DRY/WET MIX | |||
xout amix | |||
endop | |||
instr 1 | |||
ainL,ainR ins | |||
;ainL,ainR diskin "SynthPad.wav",1,0,1 ;USE FOR TESTING | |||
kscal chnget "scal" | |||
kshift chnget "shift" | |||
kfeedback chnget "FB" | |||
kmix chnget "mix" | |||
klev chnget "lev" | |||
ainL = ainL*klev | |||
ainR = ainR*klev | |||
/* SET FFT ATTRIBUTES */ | |||
katt_table chnget "att_table" ; FFT atribute table | |||
katt_table init 5 | |||
ktrig changed katt_table | |||
if ktrig==1 then | |||
reinit update | |||
endif | |||
update: | |||
iFFTsize table 0, giFFTattributes1 + i(katt_table) - 1 | |||
ioverlap table 1, giFFTattributes1 + i(katt_table) - 1 | |||
iwinsize table 2, giFFTattributes1 + i(katt_table) - 1 | |||
iwintype table 3, giFFTattributes1 + i(katt_table) - 1 | |||
/*-------------------*/ | |||
aoutL pvswarp_module ainL,kscal,kshift,kfeedback,kmix,iFFTsize,ioverlap,iwinsize,iwintype | |||
aoutR pvswarp_module ainR,kscal,kshift,kfeedback,kmix,iFFTsize,ioverlap,iwinsize,iwintype | |||
outs aoutR,aoutR | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [60*60*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) | |||
image bounds( 0, 0,810, 90), colour("black"), shape("rounded"), outline(255,100,0), line(2) | |||
button bounds( 10, 20, 80, 50), text("Live","Noise"), channel("input"), value(0), fontcolour(yellow) | |||
rslider bounds( 90, 10, 70, 70), text("BF."), fontcolour("white"), channel("bf"), range(20, 20000, 909, 0.5), colour(255,100,0,255), trackercolour(255,250,100) | |||
rslider bounds(160, 10, 70, 70), text("BW."), fontcolour("white"), channel("bw"), range(0.01, 1000, 13, 0.5), colour(255,100,0,255), trackercolour(255,250,100) | |||
rslider bounds(230, 10, 70, 70), text("Num."), fontcolour("white"), channel("num"), range(1, 80, 10, 1,1), colour(255,100,0,255), trackercolour(255,250,100) | |||
rslider bounds(300, 10, 70, 70), text("Sep.oct."), fontcolour("white"), channel("sep"), range(-11, 11, 2), colour(255,100,0,255), trackercolour(255,250,100) | |||
rslider bounds(370, 10, 70, 70), text("Sep.semi."), fontcolour("white"), channel("sep2"), range(-48, 48, 24,1,1), colour(255,100,0,255), trackercolour(255,250,100) | |||
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(255,100,0,255), trackercolour(255,250,100) | |||
} | |||
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,173 @@ | |||
; wguide1.csd | |||
; written by Iain McCurdy 2013 | |||
; Encapsulation of the 'wguide1' opcode, used for filtering and synthesis. | |||
; frequency of the wave guide can be determined either in hertz of as a note number | |||
; Activating the 'Keyboard Input' switch will allow frequency control from the keyboard (internal or external) and polyphony. | |||
; In this mode, 'Frequency' and 'Note Num.' controls will be disabled. | |||
; Source input sound can be either 'live audio input', or synthetic gravel, dust or air. | |||
<Cabbage> | |||
form caption("wguide1") size(415,210), pluginID("WGu1") | |||
image bounds(0, 0, 415,125), colour(125, 95, 55), shape("sharp"), outline(225,195,155), line(2) | |||
label bounds(227, 4,180, 22), text("W A V E G U I D E"), fontcolour(silver) | |||
image bounds(228, 8,175, 1), colour(200,170,130), shape("sharp"), outline(silver), line(1) | |||
image bounds(231, 22,172, 1), colour(200,170,130), shape("sharp"), outline(silver), line(1) | |||
checkbox bounds( 20, 10,120, 17), text("Keyboard Input"), channel("input") fontcolour("white") colour(yellow) value(0) | |||
label bounds(153, 5, 40, 11), text("Source"), fontcolour("white") | |||
combobox bounds(140, 16, 62, 16), channel("source"), value(1), text("Live","Gravel","Dust","Air") | |||
rslider bounds( 10, 41, 70, 70), text("Frequency"), channel("freq"), trackercolour(225,195,155), range(8.2, 12542, 160, 0.25), colour( 85, 55,15), fontcolour(white) | |||
rslider bounds( 75, 41, 70, 70), text("Note Num."), channel("notnum"), trackercolour(225,195,155), range(0, 127, 51, 1,1), colour( 85, 55,15), fontcolour(white) | |||
rslider bounds(140, 41, 70, 70), text("Cutoff"), channel("cutoff"), trackercolour(225,195,155), range(20,20000,8000,0.25), colour( 85, 55,15), fontcolour(white) | |||
rslider bounds(205, 41, 70, 70), text("Feedback"), channel("feedback"), trackercolour(225,195,155), range(-0.99999, 0.99999, 0.8), colour( 85, 55,15), fontcolour(white) | |||
rslider bounds(270, 41, 70, 70), text("Mix"), channel("mix"), trackercolour(225,195,155), range(0, 1.00, 1), colour( 85, 55,15), fontcolour(white) | |||
rslider bounds(335, 41, 70, 70), text("Level"), channel("level"), trackercolour(225,195,155), range(0, 1.00, 0.7), colour( 85, 55,15), fontcolour(white) | |||
keyboard bounds( 0,125, 415, 85) | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
;-d -n | |||
-dm0 -n -+rtmidi=null -M0 | |||
</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 | |||
massign 0,2 | |||
;Author: Iain McCurdy (2012) | |||
instr 1 | |||
gkinput chnget "input" | |||
event_i "i",2,0,-1 | |||
ktrig trigger gkinput,0.5,2 | |||
if ktrig=1 then | |||
if gkinput=0 then | |||
event "i",2,0,-1 | |||
else | |||
turnoff2 2,0,0 | |||
endif | |||
endif | |||
/* SOURCE SOUND */ | |||
ksource chnget "source" | |||
if ksource=1 then | |||
gasigL, gasigR ins | |||
elseif ksource=2 then | |||
gasigL gausstrig 0.5, 100, 8, 0 | |||
gasigR gausstrig 0.5, 100, 8, 0 | |||
elseif ksource=3 then | |||
kdens random 475,525 | |||
gasigL dust2 0.5, kdens | |||
kdens random 525,475 | |||
gasigR dust2 0.5, kdens | |||
elseif ksource=4 then | |||
gasigL pinkish 0.2 | |||
gasigR pinkish 0.2 | |||
endif | |||
kactive active 2 | |||
printk2 kactive | |||
endin | |||
instr 2 | |||
gkfreq chnget "freq" ;READ WIDGETS... | |||
gknotnum chnget "notnum" ; | |||
ktrig1 changed gkfreq | |||
ktrig2 changed gknotnum | |||
/* MIDI AND GUI INTEROPERABILITY */ | |||
iMIDIflag = 0 ;IF MIDI ACTIVATED = 1, NON-MIDI = 0 | |||
mididefault 1, iMIDIflag ;IF NOTE IS MIDI ACTIVATED REPLACE iMIDIflag WITH '1' | |||
if iMIDIflag==1 then ;IF THIS IS A MIDI ACTIVATED NOTE... | |||
inum notnum | |||
p1 = p1 + (rnd(1000)*0.0001) | |||
if gkinput=0 then | |||
turnoff | |||
endif | |||
icps cpsmidi ;READ MIDI PITCH VALUES - THIS VALUE CAN BE MAPPED TO GRAIN DENSITY AND/OR PITCH DEPENDING ON THE SETTING OF THE MIDI MAPPING SWITCHES | |||
gkfreq = icps | |||
else ;OTHERWISE WHEN NON-MIDI | |||
if ktrig1=1 then ;DUAL FREQUENCY AND NOTE NUMBER CONTROLS | |||
koct = octcps(gkfreq) | |||
chnset (koct-3)*12,"notnum" | |||
elseif ktrig2=1 then | |||
chnset cpsmidinn(gknotnum),"freq" | |||
endif | |||
endif ;END OF THIS CONDITIONAL BRANCH | |||
gkcutoff chnget "cutoff" ; | |||
gkfeedback chnget "feedback" ; | |||
gkmix chnget "mix" ; | |||
gklevel chnget "level" ; | |||
kporttime linseg 0,0.01,0.03 ;CREATE A VARIABLE THAT WILL BE USED FOR PORTAMENTO TIME | |||
gkfreq portk gkfreq,kporttime | |||
afreq interp gkfreq | |||
aenv linsegr 0,0.05,1,0.05,0 | |||
aresL wguide1 gasigL*aenv, afreq, gkcutoff, gkfeedback | |||
aresR wguide1 gasigR*aenv, afreq, gkcutoff, gkfeedback | |||
aresL dcblock aresL | |||
aresR dcblock aresR | |||
gkmix portk gkmix,kporttime | |||
amixL ntrpol gasigL*aenv, aresL, gkmix | |||
amixR ntrpol gasigR*aenv, aresR, gkmix | |||
gklevel portk gklevel,kporttime | |||
kenv linsegr 1,15,0 | |||
amixL = amixL * gklevel * kenv | |||
amixR = amixR * gklevel * kenv | |||
ktime timeinsts | |||
krms rms amixL,3 | |||
if krms<0.00001&&ktime>0.2&&iMIDIflag==1 then | |||
turnoff2 p1,4,0 | |||
endif | |||
outs amixL, amixR ;WGUIDE1 OUTPUTS ARE SENT OUT | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [3600*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> | |||
@@ -0,0 +1,90 @@ | |||
<Cabbage> | |||
form caption("wguide2") size(545, 90) | |||
image pos(0, 0), size(545, 90), colour(25,0,25), shape("rounded"), outline("white"), line(4) | |||
rslider bounds(10, 11, 70, 70), text("Freq. 1"), channel("freq1"), range(20, 8000, 160, 0.25), colour(150,110,110), trackercolour(white) | |||
rslider bounds(75, 11, 70, 70), text("Freq. 2"), channel("freq2"), range(20, 8000, 160, 0.25), colour(150,110,110), trackercolour(white) | |||
rslider bounds(140, 11, 70, 70), text("Cutoff 1"), channel("cutoff1"), range(20,20000,8000,0.25), colour(150,110,110), trackercolour(white) | |||
rslider bounds(205, 11, 70, 70), text("Cutoff 1"), channel("cutoff2"), range(20,20000,8000,0.25), colour(150,110,110), trackercolour(white) | |||
rslider bounds(270, 11, 70, 70), text("F.back 1"), channel("feedback1"), range(-0.999, 0.999, 0.2), colour(150,110,110), trackercolour(white) | |||
rslider bounds(335, 11, 70, 70), text("F.back 2"), channel("feedback2"), range(-0.999, 0.999, 0.2), colour(150,110,110), trackercolour(white) | |||
rslider bounds(400, 11, 70, 70), text("Mix"), channel("mix"), range(0, 1.00, 0.7), colour(150,110,110), trackercolour(white) | |||
rslider bounds(465, 11, 70, 70), text("Level"), channel("level"), range(0, 1.00, 0.7), colour(150,110,110), trackercolour(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 | |||
kporttime linseg 0,0.001,0.05 | |||
gkfreq1 chnget "freq1" ;READ WIDGETS... | |||
gkfreq1 portk gkfreq1,kporttime | |||
afreq1 interp gkfreq1 | |||
gkfreq2 chnget "freq2" ;READ WIDGETS... | |||
gkfreq2 portk gkfreq2,kporttime | |||
afreq2 interp gkfreq2 | |||
gkcutoff1 chnget "cutoff1" ; | |||
gkcutoff2 chnget "cutoff2" ; | |||
gkfeedback1 chnget "feedback1" ; | |||
gkfeedback2 chnget "feedback2" ; | |||
gkmix chnget "mix" ; | |||
gklevel chnget "level" ; | |||
;asigL, asigR diskin2 "Seashore.wav",1,0,1 ;USE SOUND FILE FOR TESTING | |||
asigL, asigR ins | |||
kporttime linseg 0,0.01,0.03 ;CREATE A VARIABLE THAT WILL BE USED FOR PORTAMENTO TIME | |||
aresL wguide2 asigL, afreq1, afreq2, gkcutoff1, gkcutoff2, gkfeedback1, gkfeedback2 | |||
aresR wguide2 asigR, afreq1, afreq2, gkcutoff1, gkcutoff2, gkfeedback1, gkfeedback2 | |||
aresL dcblock2 aresL ;BLOCK DC OFFSET | |||
aresR dcblock2 aresR ;BLOCK DC OFFSET | |||
amixL ntrpol asigL,aresL,gkmix | |||
amixR ntrpol asigR,aresR,gkmix | |||
outs amixL*gklevel, amixR*gklevel ;WGUIDE1 OUTPUTS ARE SENT OUT | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [3600*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> | |||
@@ -0,0 +1,177 @@ | |||
Physical model of a plucked string with a pickup point. Model is created from first principles in order to implement some improvements over the existing Csound opcodes for plucked strings. | |||
A bandpass filter is employed within the delay buffer used to implement the pluck which facilitates filtering to specific harmonics. Conventional damping effects are still possible when cutoff frequency ratio = 1. | |||
<Cabbage> | |||
form caption("Bass Guitar"), size(550, 250), pluginID("basg") | |||
image bounds( 0, 0,550,220), colour("DarkGreen"), shape("rounded"), outline("white"), line(4) | |||
groupbox bounds(5, 5, 540,120), colour( 150,255,150,10){ | |||
rslider bounds( 10, 25,60,60), text("Sustain"), colour("Olive"), FontColour("LightGreen"), channel("feedback"), range(0.9,1, 0.999, 2, 0.001) | |||
rslider bounds( 70, 25,60,60), text("Filt. Ratio"), colour("Olive"), FontColour("LightGreen"), channel("FiltRatio"), range(0.5, 32, 1, 0.5) | |||
rslider bounds(130, 25,60,60), text("B.width"), colour("Olive"), FontColour("LightGreen"), channel("bw"), range(1, 32, 16) | |||
rslider bounds(190, 25,60,60), text("Att"), colour("Olive"), FontColour("LightGreen"), channel("att"), range(0, 3, 1,0.5) | |||
checkbox bounds(260, 35, 30, 30), text("Legato") channel("legato"),FontColour("LightGreen"), colour("yellow") value(1) | |||
label bounds(255, 72, 40, 12), text("Legato"), FontColour("LightGreen") | |||
rslider bounds(300, 25,60,60), text("Leg.Speed"), colour("Olive"), FontColour("LightGreen"), channel("LegSpeed"), range(0.01,1,0.05,0.5) | |||
rslider bounds(360, 25,60,60), text("Vib.Depth"), colour("Olive"), FontColour("LightGreen"), channel("VibDep"), range(0, 1, 0.25, 0.75, 0.001) | |||
rslider bounds(420, 25,60,60), text("Vib.Rate"), colour("Olive"), FontColour("LightGreen"), channel("VibRte"), range(0.5, 20, 3, 0.5) | |||
rslider bounds(480, 25,60,60), text("Level"), colour("Olive"), FontColour("LightGreen"), channel("level"), range(0, 1, 0.7) | |||
hslider bounds(15,85,525,40), text("Pickup Position"), colour("Olive"), FontColour("LightGreen"), channel("PickupPos"), range(0.01, 0.99, 0.1) | |||
} | |||
keyboard bounds(10, 130, 530,80) | |||
image bounds(5, 225, 420, 20), colour(75, 85, 90, 50), plant("credit"){ | |||
label bounds(0.03, 0.1, .6, .7), text("Author: Iain McCurdy |2012|"), colour("white"), FontColour("LightGreen") | |||
} | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-dm0 -n -+rtmidi=null -M0 | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 64 | |||
nchnls = 2 | |||
0dbfs = 1 ;MAXIMUM AMPLITUDE | |||
massign 0,2 | |||
gkNoteTrig init 0 | |||
giwave ftgen 0,0,4097,11,20,1,0.5 ;waveform used by excitation (pluck) signal | |||
gisine ftgen 0,0,4097,10,1 ;sine wave (used by lfos) | |||
gkactive init 0 ; Will contain number of active instances of instr 3 when legato mode is chosen. NB. notes in release stage will not be regarded as active. | |||
;UDOs | |||
;UDO for plucked electric string - using a UDO facilitates the use of ksmps=1 to improve sound quality | |||
opcode PluckedElectricString,a,aakkkak | |||
asig,acps,kcutoff,kbw,kfeedback,aPickupPos,kporttime xin | |||
setksmps 1 | |||
;smooth krate variables according to the local ksmps and kr | |||
kcutoff portk kcutoff,kporttime | |||
kbw portk kbw,kporttime | |||
acutoff interp kcutoff | |||
kcutoff downsamp acutoff | |||
abw interp kbw | |||
kbw downsamp abw | |||
kbw limit kcutoff*kbw,0.001,10000 ;limit bandwidth values to prevent explosion | |||
aDelTim limit 1/acps,0,1 ;derive required delay time from cycles per second value (reciprocal) and limit range | |||
afb init 0 ;audio feedback signal used by delay buffer | |||
atap1 vdelay asig+afb,aDelTim*aPickupPos*1000,1000 ;tap 1. Nut | |||
atap2 vdelay -atap1,aDelTim*(1-aPickupPos)*1000,1000 ;tap 2, Tailpiece | |||
atap2 butbp atap2,kcutoff,kbw ;bandpass filter (nb. within delay buffer) | |||
afb = atap2*-kfeedback ;create feedback signal to add to input for next iteration | |||
xout atap1+atap2 ;return audio to caller instrument. NB. audio at pickup is a mixture (with positive and negative interference) of wave reflected from the bridge and the nut (the two points of fixture of the string) | |||
endop | |||
;UDO for lowpass filter attack enveloping - using a UDO permits setting ksmps=1 in order to improve sound quality | |||
opcode butlpsr,a,aii | |||
setksmps 1 | |||
asig,icps,idur xin | |||
kcfenv expseg icps,idur,15000,1,15000 | |||
asig butlp asig,kcfenv | |||
xout asig | |||
endop | |||
instr 1 ;read in widgets - this instrument runs constantly during performance | |||
gkfeedback chnget "feedback" | |||
gkFiltRatio chnget "FiltRatio" | |||
gkbw chnget "bw" | |||
gkatt chnget "att" | |||
gklegato chnget "legato" | |||
gkLegSpeed chnget "LegSpeed" | |||
gkVibDep chnget "VibDep" | |||
gkVibRte chnget "VibRte" | |||
gklevel chnget "level" | |||
gkPickupPos chnget "PickupPos" | |||
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(gklegato)==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 sound 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 = i(gkactive) ;number of active notes of instr 3 (note in release are disregarded) | |||
if iactive==0 then ;...if no notes are active | |||
event_i "i",p1+1,0,-1 ;...start a new held note | |||
endif | |||
endif | |||
endin | |||
instr 3 | |||
kporttime linseg 0,0.001,1 ;portamento time function rises quickly from zero to a held value | |||
kporttime = kporttime*gkLegSpeed ;scale portamento time function with value from GUI knob widget | |||
if i(gklegato)==1 then ;if we are in legato mode... | |||
krel release ;sense when note has been released | |||
gkactive = 1-krel ;if note is in release, gkactive=0, otherwise =1 | |||
kcps portk gkcps,kporttime ;apply portamento smooth to changes in note pitch (this will only have an effect in 'legato' mode) | |||
acps interp kcps ;create a a-rate version of pitch (cycles per second) | |||
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) | |||
acps = p4 ;pitch equal to the original note pitch | |||
endif | |||
aptr line 0,1/i(gkcps),1 ;pointer that will be used to read excitation signal waveform function table | |||
asig tablei aptr,giwave,1,0,0 ;create excitation (pluck) signal | |||
asig butlp asig,cpsoct(4+(givel*8)) ;lowpass filter excitation signal according to midi note velocity of this note | |||
asig buthp asig,i(gkcps) ;highpass filter excitation signal (this could possibly be made adjustable using a GUI widget) | |||
kcutoff limit gkcps*gkFiltRatio,20,20000 ;cutoff of frequency of the bandpass filter will be relative to the pitch of the note. Limit it to prevent out of range values that would cause filter expolosion. | |||
;In legato mode modulations are reinitialised | |||
if gkNoteTrig==1&&gklegato==1 then | |||
reinit RESTART_ENVELOPE | |||
endif | |||
RESTART_ENVELOPE: | |||
krise linseg 0,0.3,0,1.5,1 ;build-up envelope - modulations do not begin immediately | |||
rireturn | |||
arise interp krise ;interpolation prevents discontinuities (clicks) when oscili lfos are reinitialised | |||
avib oscili 0.8*arise*gkVibDep,gkVibRte,gisine ;vibrato | |||
acps = acps*semitone(avib) | |||
atrm oscili 0.8*arise*gkVibDep,gkVibRte,gisine,0 ;tremolo | |||
gkPickupPos portk gkPickupPos,kporttime ;smooth changes made to pickup position slider | |||
aPickupPos interp gkPickupPos ;interpolate k-rate pickup position variable to create an a-rate version | |||
ares PluckedElectricString asig, acps, kcutoff, gkbw, gkfeedback, aPickupPos,kporttime ;call UDO - using a UDO facilitates the use of a different ksmps value (ksmps=1 and kr=sr) to optimise sound quality | |||
aenv linsegr 0.7,0.05,0 ;amplitude envelope | |||
if i(gkatt)>0 then ;if attack time is anything greater than zero call the lowpass filter envelope | |||
ares butlpsr ares,i(gkcps),i(gkatt) ;a UDO is used again to allow the use of ksmps=1 | |||
endif | |||
ares = ares*aenv*(1+atrm)*gklevel ;scale amplitude of audio signal with envelope, tremolo and level knob widget | |||
outs ares,ares | |||
gkNoteTrig = 0 ;reset new-note trigger (in case it was '1') | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [60*60*24*7] ;instrument that reads in widget data | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,198 @@ | |||
<Cabbage> | |||
form caption("Fm Bell synthesizer"), size(760, 330), pluginID("bel1") | |||
xypad bounds(0, 0, 250, 210), channel("chanx", "chany"), text("Modulation"), rangex(1,30,6.72), rangey(0,1,0.43) | |||
groupbox bounds(260, 0, 240, 100), text("ADSR"), plant("adsr"){ | |||
rslider bounds(.0, .3, .6, .6), text("A"), colour("orange"), channel("att"), range(0.01,3, .5) | |||
rslider bounds(.25, .3, .6, .6), text("D"), colour("orange"), channel("dec"), range(0,1, .5) | |||
rslider bounds(.5, .3, .6, .6), text("S"), colour("orange"), channel("sus"), range(0,1,.8) | |||
rslider bounds(.75, .3, .6, .6), text("R"), colour("orange"), channel("rel"), range(0.01,3, .2) | |||
} | |||
groupbox bounds(260, 105, 240, 100), text("Tune"), plant("tune"){ | |||
rslider bounds(.0, .3, .6, .6), text("Semi"), colour("OrangeRed "), channel("semi"), range(-24,12,0) | |||
rslider bounds(.25, .3, .6, .6), text("Detune"), colour("OrangeRed "), channel("detune"), range(-1,1,0) | |||
rslider bounds(.5, .3, .6, .6), text("Cutoff"), colour("OrangeRed "), channel("cutoff"), range(200,12000,3000) | |||
rslider bounds(.75, .3, .6, .6), text("Spread"), colour("OrangeRed "), channel("spread"), range(0,1,.5) | |||
} | |||
groupbox bounds(510,0, 240, 100), text("LFO/Stereo chorus"), plant("mod"){ | |||
rslider bounds(.0, .3, .6, .6)), text("Lfo amp"), colour("OrangeRed "), channel("lfoamp"), range(0,5, 0) | |||
rslider bounds(.25, .3, .6, .6), text("Lfo rate"), colour("OrangeRed "), channel("lforate"), range(0,10, 0) | |||
rslider bounds(.5, .3, .6, .6), text("depth"), colour("OrangeRed "), channel("chdepth"), range(0,10,0) | |||
rslider bounds(.75, .3, .6, .6), text("rate"), colour("OrangeRed "), channel("chrate"), range(0,10,0) | |||
} | |||
groupbox bounds(510,105, 240, 100), text("Reverb"), plant("rev"){ | |||
rslider bounds(0, .3, .6, .6), text("level"), colour("dodgerblue"), channel("level"), range(0,1,0) | |||
rslider bounds(0.25, .3, .6, .6), text("size"), colour("dodgerblue"), channel("size"), range(.1,.99,.5) | |||
checkbox bounds(.55, .40, .60, .30),channel("onoff"), text("On/Off"), value(0) | |||
} | |||
keyboard bounds(0, 220, 750, 70) | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n -+rtmidi=null -M0 -b1024 | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
;Author: Giorgio Zucco (2012) | |||
;turnon 10 ;chorus | |||
;turnon 12 ;reverb | |||
ga1 init 0 | |||
ga2 init 0 | |||
garev1 init 0 | |||
garev2 init 0 | |||
;******************************************* | |||
opcode StChorus,aa,aakkkk | |||
asigr,asigl,kdepth,kdepthl,krate,kratel xin ;legge i parametri in entrata | |||
;ar,al StChorus asigr,asigl,kdepth,kdepthl,krate,kratel | |||
k1ch randi kdepth/2,krate,1 | |||
ar1 vdelay3 asigr,kdepth/2+k1ch,10 | |||
k2ch randi kdepth/2,krate*0.9,.2 | |||
ar2 vdelay3 asigr,kdepth/2+k2ch,10 | |||
k3ch randi kdepth/2,krate*1.1,.2 | |||
ar3 vdelay3 asigr,kdepth/2+k3ch,10 | |||
k4ch randi kdepth/2,krate*1.3,.1 | |||
ar4 vdelay3 asigr,kdepth/2+k4ch,10 | |||
k1chl randi kdepthl/2,kratel,1 | |||
ar1l vdelay3 asigl,kdepthl/2+k1chl,10 | |||
k2chl randi kdepthl/2,kratel*0.9,.2 | |||
ar2l vdelay3 asigl,kdepthl/2+k2chl,10 | |||
k3chl randi kdepthl/2,kratel*1.1,.2 | |||
ar3l vdelay3 asigl,kdepthl/2+k3chl,10 | |||
k4chl randi kdepthl/2,kratel*1.3,.1 | |||
ar4l vdelay3 asigl,kdepthl/2+k4chl,10 | |||
aL = (ar1+ar2+ar3+ar4)/2 | |||
aR = (ar1l+ar2l+ar3l+ar4l)/2 | |||
xout aL,aR ; write output | |||
endop | |||
;*********************************************** | |||
instr 1 | |||
iatt chnget "att" | |||
idec chnget "dec" | |||
isus chnget "sus" | |||
irel chnget "rel" | |||
kdet chnget "detune" | |||
ksemi chnget "semi" | |||
kcut chnget "cutoff" | |||
kspread chnget "spread" | |||
klfoamp chnget "lfoamp" | |||
klforate chnget "lforate" | |||
kindex chnget "fmamp" | |||
kfmrate chnget "fmrate" | |||
kcutoff chnget "cutoff" | |||
kreso chnget "resonance" | |||
kc1 chnget "chanx" | |||
kc2 chnget "chany" | |||
;midi | |||
imidinn notnum | |||
iamp ampmidi 1 | |||
kbend pchbend 0,2 ;pitch bend | |||
kfreq1 = cpsmidinn(imidinn+kbend+int(ksemi)) ;controllo midi | |||
kfreq2 = cpsmidinn(imidinn+kbend+int(ksemi)+kdet) | |||
ifn1 = 1 | |||
ifn2 = 1 | |||
ifn3 = 1 | |||
ifn4 = 1 | |||
ivfn = 1 | |||
asig1 fmbell iamp, kfreq1,kc1+1,kc2,klfoamp,klforate,ifn1,ifn2,ifn3,ifn4,ivfn | |||
asig2 fmbell iamp, kfreq2,kc1+1,kc2,klfoamp,klforate,ifn1,ifn2,ifn3,ifn4,ivfn | |||
afl1 clfilt asig1,kcutoff,0,4 | |||
afl2 clfilt asig2,kcutoff,0,4 | |||
;master | |||
al = ((afl1 * kspread) + (afl2 * (1 - kspread))) *.2 | |||
ar = ((afl1 * (1-kspread)) + (afl2 * kspread)) *.2 | |||
aoutL clip al,0,0dbfs | |||
aoutR clip ar,0,0dbfs | |||
kadsr mxadsr iatt,idec,isus,irel | |||
outs (aoutL*kadsr),(aoutR*kadsr) | |||
vincr ga1,(aoutL*kadsr) | |||
vincr ga2,(aoutR*kadsr) | |||
vincr garev1,(aoutL*kadsr) | |||
vincr garev2,(aoutR*kadsr) | |||
endin | |||
;stereo chorus | |||
instr 10 | |||
k1 chnget "chdepth" | |||
k2 chnget "chrate" | |||
kfxdepth portk k1,.01 | |||
kfxrate portk k2,.01 | |||
acho1,acho2 StChorus ga1,ga2,kfxdepth,kfxdepth*.8,kfxrate,kfxrate*.8 | |||
outs acho1,acho2 | |||
clear ga1,ga2 | |||
endin | |||
instr 12 ;reverb | |||
ktrig chnget "onoff" | |||
klevel chnget "level" | |||
ksize chnget "size" | |||
if ktrig = 1 then | |||
al,ar reverbsc garev1,garev2,ksize,16000,sr,0 | |||
adc1 dcblock2 al | |||
adc2 dcblock2 ar | |||
kpan1 randomi 0,1,4 | |||
kpan2 randomi 0,1,8 | |||
aout1,aout2 pan2 adc1,kpan1 | |||
aout3,aout4 pan2 adc2,1-kpan2 | |||
asum1 = (aout1+aout2)*klevel | |||
asum2 = (aout3+aout4)*klevel | |||
else | |||
asum1 = 0 | |||
asum2 = 0 | |||
endif | |||
outs asum1,asum2 | |||
clear garev1,garev2 | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
; sine wave. | |||
f 1 0 32768 10 1 | |||
i1 0 36000 | |||
i10 0 36000 | |||
i12 0 36000 | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,269 @@ | |||
;BreakBeatCutter.csd | |||
;Iain McCurdy, 2013. | |||
; Break Beat Cut Up using the bbcut opcode with additional processing | |||
;==BBCUT========================================================================================================================== | |||
'Sub-division' determines the note duration used as the base unit in cut-ups. | |||
For example a value of 8 represents quavers (eighth notes), 16 represents semiquavers (sixteenth notes) and so on. | |||
'Bar Length' represents the number of beats per bar. For example, a value of 4 represents a 4/4 bar and so on. | |||
'Phrase' defines the number of bars that will elapse before the cutting up pattern restarts from the beginning. | |||
'Stutter' is a separate cut-up process which occasionally will take a very short fragment of the input audio and repeat | |||
it many times. | |||
'Stutter Speed' defines the duration of each stutter in relation to 'Sub-division'. | |||
If subdivision is 8 (quavers / eighth notes) and 'Stutter Speed' is 2 then each stutter will be a semiquaver / sixteenth note. | |||
'Stutter Chance' defines the frequency of stutter moments. | |||
The range for this parameter is 0 to 1. Zero means stuttering will be very unlikely, 1 means it will be very likely. | |||
'Repeats' defines the number of repeats that will be employed in normal cut-up events. | |||
When processing non-rhythmical, unmetered material it may be be more interesting to employ non-whole numbers for parameters such as 'Sub-division', 'Phrase' and 'Stutter Speed'. | |||
;======================================================================================================================== | |||
;==FILTER================================================================================================================ | |||
Additionally in this example a randomly moving band-pass filter has been implemented. | |||
'Filter Mix' crossfades between the unfiltered bbcut signal and the filtered bbcut signal. | |||
'Cutoff Freq.' consists of two small sliders which determine the range from which random cutoff values are derived. | |||
'Interpolate<=>S&H' fades continuously between an interpolated random function and a sample and hold type random function. | |||
'Filter Div.' controls the frequency subdivision with which new random cutoff frequency values are generated - a value of '1' means that new values are generated once every bar. | |||
;======================================================================================================================== | |||
;==WGUIDE================================================================================================================ | |||
A waveguide effect can randomly and rhythmically cut into the audio stream | |||
'Chance' defines the probability of this happening. 0=never 1=always | |||
The range of frequencies the effect will choose from is defined by the user as note values. | |||
Frequencies are quatised to adhere to equal temperament. | |||
;======================================================================================================================== | |||
;==SQUARE MOD. (Square wave ring modulation)============================================================================= | |||
This effect can similarly randomly and rhythmically cut into the audio stream using the 'chance' control | |||
The range of frequencies the modulator waveform can move between is defined as 'oct' values. | |||
;======================================================================================================================== | |||
;==F.SHIFT (Frequency Shifter)=========================================================================================== | |||
Similar to the above except using a frequency shifter effect. | |||
;======================================================================================================================== | |||
<Cabbage> | |||
form size(440,485), caption("Break Beat Cutter"), pluginID("bbct") | |||
groupbox bounds( 0, 0,440,145), text("CUTTER"), plant("cutter"), FontColour(silver),colour(40,40,40){ | |||
rslider bounds( 10, 25, 70, 70), colour("Tan"), tracker("Tan"), fontcolour("silver"), text("Sub-div."), channel("subdiv"), range(1, 512, 8, 1, 1) | |||
rslider bounds( 80, 25, 70, 70), colour("Tan"), tracker("Tan"), fontcolour("silver"), text("Bar Length"), channel("barlen"), range(1, 16, 2, 1, 1) | |||
rslider bounds(150, 25, 70, 70), colour("Tan"), tracker("Tan"), fontcolour("silver"), text("Phrase"), channel("phrase"), range(1, 512, 8, 1, 1) | |||
rslider bounds(220, 25, 70, 70), colour("Tan"), tracker("Tan"), fontcolour("silver"), text("Repeats"), channel("repeats"), range(1, 32, 2, 1, 1) | |||
rslider bounds(290, 25, 70, 70), colour("Tan"), tracker("Tan"), fontcolour("silver"), text("Stut. Speed"), channel("stutspd"), range(1, 32, 4, 1, 1) | |||
rslider bounds(360, 25, 70, 70), colour("Tan"), tracker("Tan"), fontcolour("silver"), text("Stut. Chance"), channel("stutchnc"), range(0, 1.00, 0.5) | |||
hslider bounds( 5, 95,425, 40), colour("Tan"), tracker("Tan"), fontcolour("silver"), textBox(1) channel("BPM"), range(10, 500, 110,1,1) | |||
label bounds(198,127, 25, 11), text("BPM"), FontColour("silver") | |||
} | |||
groupbox bounds( 0,145,440,100), text("FILTER"), plant("filter"), FontColour(silver),colour(40,40,40){ | |||
rslider bounds( 10, 25, 70, 70), colour(200,100,50,255), tracker(200,100,50,255), fontcolour("silver"), text("Mix"), channel("FltMix"), range(0, 1.00, 0.6) | |||
rslider bounds( 80, 25, 70, 70), colour(200,100,50,255), tracker(200,100,50,255), fontcolour("silver"), text("Division"), channel("fltdiv"), range(1, 16, 1,1,1) | |||
rslider bounds(150, 25, 70, 70), colour(200,100,50,255), tracker(200,100,50,255), fontcolour("silver"), text("Bandwidth"), channel("bw"), range(0.1, 10, 1, 0.5, 0.001) | |||
hslider bounds(220, 25,140, 35), colour(200,100,50,255), tracker(200,100,50,255), fontcolour("silver"), channel("cfmin"), range(50, 10000, 50 ,0.5,0.1) | |||
hslider bounds(220, 50,140, 35), colour(200,100,50,255), tracker(200,100,50,255), fontcolour("silver"), channel("cfmax"), range(50, 10000, 10000,0.5,0.1) | |||
label bounds(254, 77, 80, 12), text("Cutoff Freq."), FontColour("white") | |||
rslider bounds(360, 25, 70, 70), colour(200,100,50,255), tracker(200,100,50,255), fontcolour("silver"), text("Int./S&H"), channel("i_h"), range(0, 1, 0) | |||
} | |||
groupbox bounds( 0,245,220,100), text("WAVE GUIDE"), plant("waveguide"), FontColour(silver),colour(40,40,40){ | |||
rslider bounds( 10, 25, 70, 70), colour(150,150,50,255), tracker(150,150,50,255), fontcolour("silver"), text("Chance"), channel("WguideChnc"), range(0, 1.00, 0.2) | |||
hslider bounds( 80, 25,140, 35), colour(150,150,50,255), tracker(150,150,50,255), fontcolour("silver"), channel("wguidemin"), range(22, 100, 50,1,1) | |||
hslider bounds( 80, 50,140, 35), colour(150,150,50,255), tracker(150,150,50,255), fontcolour("silver"), channel("wguidemax"), range(22, 100, 70,1,1) | |||
label bounds(108, 77, 85, 12), text("Pitch Range"), FontColour("white") | |||
} | |||
groupbox bounds(220,245,220,100), text("SQUARE MOD."), plant("sqmod"), FontColour(silver),colour(40,40,40){ | |||
rslider bounds( 10, 25, 70, 70), colour(200,150,200,255), tracker(200,150,200,255), fontcolour("silver"), text("Chance"), channel("SqModChnc"), range(0, 1.00, 0.2) | |||
hslider bounds( 80, 25,140, 35), colour(200,150,200,255), tracker(200,150,200,255), fontcolour("silver"), channel("sqmodmin"), range(1, 14.0, 6) | |||
hslider bounds( 80, 50,140, 35), colour(200,150,200,255), tracker(200,150,200,255), fontcolour("silver"), channel("sqmodmax"), range(1, 14.0, 12) | |||
label bounds(108, 77, 85, 12), text("Freq.Range"), FontColour("white") | |||
} | |||
groupbox bounds(0,345,220,100), text("FREQUENCY SHIFT"), plant("fshift"), FontColour(silver),colour(40,40,40){ | |||
rslider bounds( 10, 25, 70, 70), colour(250,110,250,255), tracker(250,110,250,255), fontcolour("silver"), text("Chance"), channel("FshiftChnc"), range(0, 1.00, 0.2) | |||
hslider bounds( 80, 25,140, 35), colour(250,110,250,255), tracker(250,110,250,255), fontcolour("silver"), channel("fshiftmin"), range(-4000, 4000,-1000) | |||
hslider bounds( 80, 50,140, 35), colour(250,110,250,255), tracker(250,110,250,255), fontcolour("silver"), channel("fshiftmax"), range(-4000, 4000, 1000) | |||
label bounds(108, 77, 85, 12), text("Freq.Range"), FontColour("white") | |||
} | |||
groupbox bounds(220,345,220,100), text("OUTPUT"), plant("output"), FontColour(silver),colour(40,40,40){ | |||
rslider bounds( 10, 25, 70, 70), colour("Tan"), tracker("Tan"), fontcolour("silver"), text("Gain"), channel("gain"), range(0, 1, 0.75) | |||
rslider bounds( 80, 25, 70, 70), colour("Tan"), tracker("Tan"), fontcolour("silver"), text("Dry/Wet"), channel("DryWet"), range(0, 1, 0.6) | |||
rslider bounds(150, 25, 70, 70), colour("Tan"), tracker("Tan"), fontcolour("silver"), text("Layers"), channel("layers"), range(1, 20, 1,1,1) | |||
} | |||
label bounds( 5,470, 200, 12), text("Author: Iain McCurdy |2013|"), FontColour("grey") | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-n -d | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 64 | |||
nchnls = 2 | |||
0dbfs=1 | |||
seed 0 | |||
gisine ftgen 0,0,131072,10,1 | |||
opcode BBCutIteration,aa,aaiiiiiiiii | |||
aL,aR,iBPS, isubdiv, ibarlen, iphrase, irepeats, istutspd, istutchnc, icount, ilayers xin | |||
abbcutL bbcutm aL, iBPS, isubdiv, ibarlen, iphrase, irepeats, istutspd, istutchnc | |||
abbcutR bbcutm aR, iBPS, isubdiv, ibarlen, iphrase, irepeats, istutspd, istutchnc | |||
amixL = 0 | |||
amixR = 0 | |||
if icount<ilayers then | |||
amixL,amixR BBCutIteration aL,aR, iBPS, isubdiv, ibarlen, iphrase, irepeats, istutspd, istutchnc, icount+1, ilayers | |||
endif | |||
xout abbcutL+amixL,abbcutR+amixL | |||
endop | |||
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 ; read widgets | |||
gksubdiv chnget "subdiv" | |||
gkbarlen chnget "barlen" | |||
gkphrase chnget "phrase" | |||
gkrepeats chnget "repeats" | |||
gkstutspd chnget "stutspd" | |||
gkstutchnc chnget "stutchnc" | |||
gkBPM chnget "BPM" | |||
gkfltdiv chnget "fltdiv" | |||
gkDryWet chnget "DryWet" | |||
gkFltMix chnget "FltMix" | |||
gkbw chnget "bw" | |||
gkcfmin chnget "cfmin" | |||
gkcfmax chnget "cfmax" | |||
gki_h chnget "i_h" | |||
gklayers chnget "layers" | |||
gkgain chnget "gain" | |||
konoff chnget "onoff" | |||
endin | |||
instr 2 | |||
aL,aR ins | |||
;aL diskin "loop.wav",1,0,1 | |||
;aR = aL | |||
kSwitch changed gkBPM, gkrepeats, gkphrase, gkstutspd, gkstutchnc, gkbarlen, gksubdiv, gkfltdiv, gklayers ;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 UPDATE ;BEGIN A REINITIALISATION PASS FROM LABEL 'UPDATE' | |||
endif | |||
UPDATE: | |||
kmetro metro i(gkBPM)/60 | |||
;OUTPUT OPCODE INPUT | BPM | SUBDIVISION | BAR_LENGTH | PHRASE_LENGTH | NUM.OF_REPEATS | STUTTER_SPEED | STUTTER_CHANCE | |||
abbcutL,abbcutR BBCutIteration aL,aR, i(gkBPM)/60, i(gksubdiv), i(gkbarlen), i(gkphrase), i(gkrepeats), i(gkstutspd), i(gkstutchnc), 1, i(gklayers) | |||
;FILTER================================================================================================================================================================= | |||
kfreq = (gkfltdiv) ;FREQUENCY WITH WHICH NEW FILTER CUTOFF VALUES ARE GENERATED ;LEFT CHANNE | |||
rireturn ;RETURN FROM REINITIALISATION PASS TO PERFORMANCE TIME PASSES | |||
kcf1h randomh gkcfmin, gkcfmax, kfreq ;SAMPLE AND HOLD RANDOM FREQUENCY VALUES ;LEFT CHANNEL | |||
kcf1i lineto kcf1h, 1/kfreq ;INTERPOLATE VALUES ;LEFT CHANNEL | |||
kcf1 ntrpol kcf1i, kcf1h, gki_h ;CROSSFADE BETWEEN INTERPOLATING AND SAMPLE AND HOLD TYPE RANDOM VALUES ;LEFT CHANNEL | |||
abbFltL resonz abbcutL, kcf1, kcf1*gkbw, 2 ;BAND-PASS FILTER ;LEFT CHANNEL | |||
abbMixL ntrpol abbcutL, abbFltL, gkFltMix ;CROSSFADE BETWEEN UNFILTERED AND FILTER AUDIO SIGNAL ;LEFT CHANNEL | |||
kcf2h randomh gkcfmin, gkcfmax, kfreq ;SAMPLE AND HOLD RANDOM FREQUENCY VALUES ;RIGHT CHANNEL | |||
kcf2i lineto kcf2h, 1/kfreq ;INTERPOLATE VALUES ;RIGHT CHANNEL | |||
kcf2 ntrpol kcf2i, kcf2h, gki_h ;CROSSFADE BETWEEN INTERPOLATING AND SAMPLE AND HOLD TYPE RANDOM VALUES ;RIGHT CHANNEL | |||
abbFltR resonz abbcutR, kcf2, kcf2*gkbw, 2 ;BAND-PASS FILTER ;RIGHT CHANNEL | |||
abbMixR ntrpol abbcutR, abbFltR, gkFltMix ;CROSSFADE BETWEEN UNFILTERED AND FILTER AUDIO SIGNAL ;RIGHT CHANNEL | |||
;======================================================================================================================================================================= | |||
;WGUIDE1================================================================================================================================================================ | |||
kchance chnget "WguideChnc" | |||
kdice trandom kmetro,0,1 | |||
if kdice<kchance then | |||
kwguidemin chnget "wguidemin" | |||
kwguidemax chnget "wguidemax" | |||
knum randomh kwguidemin,kwguidemax,gkBPM/60 | |||
afrq interp cpsmidinn(int(knum)) | |||
kfb randomi 0.8,0.99,gkBPM/(60*4) | |||
kcf randomi 800,4000,gkBPM/60 | |||
abbMixL wguide1 abbMixL*0.7,afrq,kcf,kfb | |||
abbMixR wguide1 abbMixR*0.7,afrq,kcf,kfb | |||
endif | |||
;======================================================================================================================================================================= | |||
;SQUARE MOD============================================================================================================================================================== | |||
kchance chnget "SqModChnc" | |||
ksqmodmin chnget "sqmodmin" | |||
ksqmodmax chnget "sqmodmax" | |||
kDiceRoll trandom kmetro,0,1 | |||
if kDiceRoll<kchance then | |||
kratei randomi ksqmodmin,ksqmodmax,gkBPM/60 | |||
krateh randomh ksqmodmin,ksqmodmax,gkBPM/60 | |||
kcross randomi 0,1,gkBPM | |||
kcross = kcross>0.5?1:0 | |||
krate ntrpol kratei,krateh,kcross | |||
amod lfo 1,cpsoct(krate),2 | |||
abbMixL = abbMixL*amod | |||
abbMixR = abbMixR*amod | |||
endif | |||
;======================================================================================================================================================================= | |||
;FSHIFT================================================================================================================================================================= | |||
kchance chnget "FshiftChnc" | |||
kdice trandom kmetro,0,1 | |||
if kdice<kchance then | |||
kfshiftmin chnget "fshiftmin" | |||
kfshiftmax chnget "fshiftmax" | |||
; kfsfrq randomh kfshiftmin,kfshiftmax,gkBPM/60 | |||
kfsfrqi randomi kfshiftmin,kfshiftmax,gkBPM/60 | |||
kfsfrqh randomh kfshiftmin,kfshiftmax,gkBPM/60 | |||
kcross randomi 0,1,gkBPM/2 | |||
kcross = kcross>0.5?1:0 | |||
kfsfrq ntrpol kfsfrqi,kfsfrqh,kcross | |||
abbMixL FreqShifter abbMixL,kfsfrq,gisine | |||
abbMixR FreqShifter abbMixR,kfsfrq,gisine | |||
endif | |||
;======================================================================================================================================================================= | |||
amixL sum aL*(1-gkDryWet), abbMixL*gkDryWet ;SUM AND MIX DRY SIGNAL AND BBCUT SIGNAL (LEFT CHANNEL) | |||
amixR sum aR*(1-gkDryWet), abbMixR*gkDryWet ;SUM AND MIX DRY SIGNAL AND BBCUT SIGNAL (RIGHT CHANNEL) | |||
outs amixL*gkgain, amixR*gkgain ;SEND AUDIO TO OUTPUTS | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i1 0 36000 | |||
i2 0 36000 | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,95 @@ | |||
<Cabbage> | |||
form caption("Buzz synthesizer") size(562, 340), colour("black"),pluginID("buz1") | |||
rslider bounds(15, 10, 100, 100) channel("detune"), range(-1,1,0), caption("Detune"), colour("SteelBlue "), midictrl(1, 1) | |||
rslider bounds(120, 10, 100, 100) channel("semi"), range(-24,12,-24), caption("Coarse"), colour("SteelBlue ") | |||
rslider bounds(225, 10, 100, 100) channel("cutoff"), range(60,2000,400), caption("Cutoff"), colour("SteelBlue ") | |||
rslider bounds(330, 10, 100, 100) channel("harm"), range(1,20,1), caption("Harmonic"), colour("SteelBlue ") | |||
rslider bounds(435, 10, 100, 100) channel("spread"), range(0, 1, .5), caption("Stereo image"), colour("SteelBlue ") | |||
groupbox bounds(15, 120, 240, 100), text("ADSR amplitude"), plant("ADSR"){ | |||
rslider bounds(.0, .3, .6, .6), text("A"), colour("orange"), channel("att"), range(0.01,3, .5) | |||
rslider bounds(.25, .3, .6, .6), text("D"), colour("orange"), channel("dec"), range(0,1, .5) | |||
rslider bounds(.5, .3, .6, .6), text("S"), colour("orange"), channel("sus"), range(0,1,.8) | |||
rslider bounds(.75, .3, .6, .6), text("R"), colour("orange"), channel("rel"), range(0.01,3, .2) | |||
} | |||
groupbox bounds(270, 120, 130, 100), text("LFO"), plant("lfo"){ | |||
rslider bounds(.04, .3, .6, .6), text("Lfo Amp"), colour("SteelBlue "), channel("lfoamp"), range(0,100, 0) | |||
rslider bounds(.5, .3, .6, .6), text("Lfo Rate"), colour("SteelBlue "), channel("lforate"), range(0,20, 0) | |||
} | |||
groupbox bounds(410, 120, 130, 100), text("LFO filter"), plant("lfofilter"){ | |||
rslider bounds(.04, .3, .6, .6), text("Lfo Amp"), colour("SteelBlue "), channel("lfoamp2"), range(0,1000, 0) | |||
rslider bounds(.5, .3, .6, .6), text("Lfo Rate"), colour("SteelBlue "), channel("lforate2"), range(0,10, 0) | |||
} | |||
keyboard pos(10,240), size(540,60) | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n -+rtmidi=null -M0 -b1024 -m0d | |||
</CsOptions> | |||
<CsInstruments> | |||
; Initialize the global variables. | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
;Author: Giorgio Zucco (2012) | |||
instr 1 | |||
;channel | |||
kdetune chnget "detune" | |||
ksemi chnget "semi" | |||
kcut chnget "cutoff" | |||
kharm chnget "harm" | |||
kspread chnget "spread" | |||
iatt chnget "att" | |||
idec chnget "dec" | |||
isus chnget "sus" | |||
irel chnget "rel" | |||
klfoamp chnget "lfoamp" | |||
klforate chnget "lforate" | |||
klfoamp2 chnget "lfoamp2" ;lfo x filter | |||
klforate2 chnget "lforate2" | |||
;midi | |||
imidinn notnum | |||
iamp ampmidi 1 | |||
kbend pchbend 0,2 ;pitch bend | |||
kfreq1 = cpsmidinn(imidinn+kbend+int(ksemi)) | |||
kfreq2 = cpsmidinn(imidinn+kbend+int(ksemi)+kdetune) | |||
;lfo | |||
klfo poscil klfoamp,klforate,1 | |||
asig1 buzz iamp,(kfreq1+klfo),int(kharm),1 | |||
asig2 buzz iamp,(kfreq2+klfo),int(kharm),1 | |||
;filter | |||
klfofilter lfo klfoamp2,klforate2,3 | |||
aout1 fofilter asig1,kcut+klfofilter,0.007,0.04 | |||
aout2 fofilter asig2,kcut+klfofilter,0.007,0.04 | |||
aout1x balance aout1,asig1 | |||
aout2x balance aout2,asig2 | |||
;master | |||
aL clip aout1x,0,0dbfs | |||
aR clip aout2x,0,0dbfs | |||
aoutL = ((aL * kspread) + (aR * (1 - kspread))) *.5 | |||
aoutR = ((aL * (1-kspread)) + (aR * kspread)) *.5 | |||
kadsr mxadsr iatt,idec,isus,irel | |||
outs aoutL*kadsr,aoutR*kadsr | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
f1 0 16384 10 1 | |||
f2 0 1024 10 1 | |||
i1 0 36000 | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,374 @@ | |||
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("polyphonic","monophonic"), 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"), trackercolour("white") | |||
rslider bounds(445, 10, 60, 60), text("Vowel"), channel("vowel"), range(0, 1.00, 0), colour("green"), trackercolour("white"),midCtrl(1, 2) | |||
rslider bounds(505, 10, 60, 60), text("Level"), channel("lev"), range(0, 1.00, 0.6), colour("green"), trackercolour("white") | |||
rslider bounds(265, 80, 60, 60), text("Vib.Dep."), channel("vibdep"), range(0, 2.00, 0.35), colour("tomato"), trackercolour("white"),midCtrl(1, 1) | |||
rslider bounds(325, 80, 60, 60), text("Trem.Dep."), channel("trmdep"), range(0, 1.00, 0.2), colour("tomato"), trackercolour("white"),midCtrl(1, 1) | |||
rslider bounds(385, 80, 60, 60), text("Mod.Rate"), channel("modrte"), range(0.10,20, 5, 0.5), colour("tomato"), trackercolour("white") | |||
rslider bounds(445, 80, 60, 60), text("Mod.Delay"), channel("moddel"), range(0, 2.00, 0.3, 0.5),colour("tomato"), trackercolour("white") | |||
rslider bounds(505, 80, 60, 60), text("Mod.Rise"), channel("modris"), range(0, 4.00, 2, 0.5), colour("tomato"), trackercolour("white") | |||
rslider bounds(265,150, 60, 60), text("N.Voices"), channel("nvoices"), range(1, 50, 6, 1, 1), colour("yellow"), trackercolour("white") | |||
rslider bounds(325,150, 60, 60), text("Dtn.Dep."), channel("DtnDep"), range(0, 4.00, 1,0.5),colour("yellow"), trackercolour("white") | |||
rslider bounds(385,150, 60, 60), text("Dtn.Rate"), channel("DtnRte"), range(0.01,40, 0.2,0.25),colour("yellow"), trackercolour("white") | |||
rslider bounds(445,150, 60, 60), text("Rvb.Mix"), channel("RvbMix"), range(0, 1.00, 0.15), colour("steelblue"),trackercolour("white") | |||
rslider bounds(505,150, 60, 60), text("Rvb.Size"), channel("RvbSize"), range(0.5, 1.00, 0.82,2),colour("steelblue"),trackercolour("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 | |||
gkactive init 0 ; Will contain number of active instances of instr 3 when legato mode is chosen. NB. notes in release stage will not be regarded as active. | |||
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 = i(gkactive) ;number of active notes of instr 3 (note in release are disregarded) | |||
if iactive==0 then ;...if no notes are active | |||
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... | |||
krel release ;sense when note has been released | |||
gkactive = 1-krel ;if note is in release, gkactive=0, otherwise =1 | |||
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,528 @@ | |||
<Cabbage> | |||
form caption("John Chowning collection") size(562, 340), colour("black"),pluginID("cho1") | |||
rslider bounds(15, 10, 100, 100) channel("spread"), range(0,1,.5), caption("Spread"), colour("GreenYellow "), midictrl(1, 1) | |||
rslider bounds(120, 10, 100, 100) channel("semi"), range(-24,12,-12), caption("Coarse"), colour("GreenYellow ") | |||
rslider bounds(225, 10, 100, 100) channel("detune"), range(-2,2,0), caption("Detune"), colour("GreenYellow ") | |||
rslider bounds(330, 10, 100, 100) channel("vibamp"), range(0,20,0), caption("Vib Amp"), colour("GreenYellow ") | |||
rslider bounds(435, 10, 100, 100) channel("vibrate"), range(0,20,0), caption("Vib rate"), colour("GreenYellow ") | |||
groupbox bounds(15, 120, 240, 100), text("ADSR amplitude"), plant("ADSR"){ | |||
rslider bounds(.0, .3, .6, .6), text("A"), colour("orange"), channel("att"), range(0.01,3, .5) | |||
rslider bounds(.25, .3, .6, .6), text("D"), colour("orange"), channel("dec"), range(0,1, .5) | |||
rslider bounds(.5, .3, .6, .6), text("S"), colour("orange"), channel("sus"), range(0,1,.8) | |||
rslider bounds(.75, .3, .6, .6), text("R"), colour("orange"), channel("rel"), range(0.01,3, .2) | |||
} | |||
combobox bounds(280,120, 160, 20), channel("select"), value(1), text("clar","glass", "loop","perc","piano","rebell","soprano","string","trumpet","vibr") | |||
rslider bounds(280,150, 60, 60), text("Rev level"), colour("GreenYellow "), channel("level"), range(0,1,.8) | |||
rslider bounds(350, 150, 60, 60), text("Rev size"), colour("GreenYellow "), channel("size"), range(.1,.99,.7) | |||
checkbox bounds(420, 160, 160, 30),channel("onoff"), text("Reverb On/Off"), value(0) | |||
keyboard pos(10, 240), size(540, 60) | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n -+rtmidi=null -M0 -b1024 | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
;Author: Giorgio Zucco (2012) | |||
ga1 init 0 | |||
ga2 init 0 | |||
;Chowning opcodes | |||
;******************************************** | |||
opcode CHOWNClar,a,kk | |||
gitemp1 ftgen 0,0, 8192, -12, 8 | |||
gitemp2 ftgen 0,0, 8192, 9, 1, 1, 0 | |||
gitemp3 ftgen 0,0, 8192, 9, 1, 1, 90 | |||
kamp,knote xin | |||
;setksmps 10 | |||
;inote cpsmidib | |||
;iveloc ampmidi 1 | |||
kgate linenr kamp,0,1,.01 | |||
kenv linseg 0,0.1,1,2-0.3,1,0.2,0 | |||
kramp linseg 0,2/2,4,2/2,0 | |||
k1 = kramp * (.8 - 1/.8)/2 | |||
k2a = kramp * (.8 + 1/.8)/2 | |||
k2b = 200 * k2a | |||
k3a table k1*2,gitemp1,0,0,0 | |||
k3b = k3a * (-1/2) | |||
a1 poscil k2b,knote*2,gitemp3 | |||
a2 poscil k1,knote*2,gitemp3 | |||
a3 = kenv* exp(a2+k3b) | |||
asig poscil a3,knote+a1,gitemp2 | |||
xout asig*kgate | |||
endop | |||
;************************************************** | |||
opcode CHOWNglass,a,kki | |||
kamp,knote,ifunc xin | |||
kgate linenr kamp, 0, .2, .01 | |||
imfreq = 1.4 * 200 | |||
immax = 10 * imfreq | |||
kmenv linseg 1, 5/6, 0, 5 - (5/6), 0 | |||
koenv expseg 0.8, 5/6, 1, 5 - (5/6) , .01 | |||
amod poscil kmenv * immax, 1.414*knote, ifunc | |||
aout poscil koenv * 1, knote + amod, ifunc | |||
xout aout*kgate | |||
endop | |||
;************************************************** | |||
opcode CHOWNLoop,a,kki | |||
gitemp1 ftgen 0, 0, 513, 5, .7, 16, .8,48, 1 , 64, .8, 128,.2, 256, .001 | |||
gitemp2 ftgen 0, 0, 513, 7, 0 , 12, 1, 52, 0, 460, 0 | |||
kamp,kfreq,ifunc xin | |||
kgate linenr kamp, 0, .2, .01 | |||
i1 = 1/.2 | |||
idev1 = 0 * 110 | |||
idev2 = (25-0) * 110 | |||
ampcar poscil 1, i1, gitemp1 | |||
ampmod poscil idev2, i1,gitemp2 | |||
amod poscil ampmod+idev1, kfreq*1,ifunc | |||
asig poscil ampcar, kfreq+amod,ifunc | |||
xout asig*kgate | |||
endop | |||
;************************************************** | |||
opcode CHOWNPerc,a,kki | |||
kamp,kcps,ifunc xin | |||
keg expseg .001, .01, 1, .1, .8, 999, .001 | |||
keg linenr keg * kamp, .01, .333, .05 | |||
kmeg expseg .001, .01,12000/1000, .25, .2, 999, .001 | |||
a1 foscili keg, kcps, 1, 1.4, kmeg, 1 | |||
xout a1 | |||
endop | |||
;************************************************** | |||
opcode CHOWNPiano,a,kki | |||
kamp,kcps,ifunc xin | |||
;gitemp100 ftgen 0,0 ,128 ,7, 0, 128 , 1 | |||
kndx expon 1, .3, .01 | |||
a1 foscili kamp, kcps, 1, 12, kndx, ifunc | |||
a2 foscili kamp, kcps + .1, 1, 12, kndx, ifunc | |||
a3 foscili kamp, kcps - .1, 1, 12, kndx, ifunc | |||
aosc = a1 + a2 + a3 | |||
kenv mxadsr .01, .1, .8, .1 | |||
aosc = aosc * .5 | |||
aout = aosc*kenv | |||
xout aout | |||
endop | |||
;************************************************** | |||
opcode CHOWNrebell,a,kki | |||
gifc2 ftgen 0,0.0 ,512 ,7 ,1 ,512 ,1 | |||
gifc3 ftgen 0,0.0, 512, 7 ,.5 ,512, .5 | |||
gifc4 ftgen 0,0.0 ,513 ,7 ,1 ,512, 0, 1, 0 | |||
gifc5 ftgen 0,0.0, 513 ,7 ,0 ,512, 1, 1, 1 | |||
gifc6 ftgen 0,0.0 ,513, 7, 1, 256, 0, 256, 1 ,1, 1 | |||
kamp,knote,ifunc xin | |||
kgate linenr kamp,0,1.5,.01 | |||
kpitch1 = knote | |||
kpitch2 = kpitch1 * 1.001 | |||
kpitch3 = kpitch1 * 0.998 | |||
imodbase = (19 <= 5 ? 19 : 5) | |||
imodmax = (19 <= 5 ? 5 : 19) | |||
indxbase = (1 <= 2 ? 1 : 2) | |||
indxmax = (1 <= 2 ? 2 : 1) | |||
kmodchg oscil1i 0.00,imodmax - imodbase,p3,gifc4 | |||
kmod = imodbase + kmodchg | |||
kndxchg oscil1i 0.00,indxmax - indxbase,5,gifc5 | |||
kndx = indxbase + kndxchg | |||
afm1 foscili 1*.45,kpitch1,1,kmod,kndx,ifunc | |||
afm2 foscili 1*.35,kpitch2,1,kmod,kndx,ifunc | |||
afm3 foscili 1*.32,kpitch3,1,kmod,kndx,ifunc | |||
afmttl = afm1+afm2+afm3 | |||
aosc1 poscil 1 *.45,kpitch1,ifunc | |||
aosc2 poscil 1 *.35,kpitch2,ifunc | |||
aosc3 poscil 1 *.32,kpitch3,ifunc | |||
aoscttl = aosc1+aosc2+aosc3 | |||
afm = afmttl - aoscttl; | |||
icfbase = (3000 <= 12000 ? 3000 : 12000) | |||
icfmax = (3000 <= 12000 ? 12000 : 3000) | |||
kcfchg oscil1i 0.00,(icfmax - icfbase),5,gifc6 | |||
kcf = icfbase + kcfchg | |||
ibwbase = (100 <= 400 ? 100 : 400) | |||
ibwmax = (100 <= 400 ? 400 : 100) | |||
kbwchg oscil1i 0.00,ibwmax - ibwbase,5,gifc6 | |||
kbw = ibwbase + kbwchg | |||
aflt1 reson afm,kcf,kbw,1 | |||
aflt2 reson afm,kcf*.9, kbw*1.11,1 | |||
abal balance aflt1+aflt2,afm | |||
asig envlpx abal,.2, gifc5, gifc5*.39, gifc5, 1 | |||
xout asig*kgate | |||
endop | |||
;************************************************** | |||
opcode CHOWNSoprano,a,kki | |||
kveloc,knote,ifunc xin | |||
kgate linenr kveloc,0,2,.01 | |||
k7 = knote | |||
k2 = 7000 | |||
k2 = (k2/k7)+.5 | |||
k2 = int(k2) | |||
k3 = .04 | |||
k4 = .25 | |||
k5 = 5*.4 | |||
k6 = 5 | |||
k8 = k5/k4 | |||
k9 = exp(1.5*log(7000/32767)) | |||
k10 = .00311*log(k7) | |||
k11 = sqrt(7000/32767) | |||
k12 = (1-k3)*k11 | |||
k13 = k4*k7 | |||
k14 = k9*k3 | |||
a1 linen k12,.1,3,.08 | |||
a2 poscil k13,k7,ifunc | |||
a8 = k7+a2 | |||
a4 linenr k10,.6,3,.1 | |||
a4 poscil a4,k6,ifunc | |||
a5 randi k10,16 | |||
a6 linseg -.03,.07,.03,.03,0,3-.1,0 | |||
a6 = a4+a5+a6+1. | |||
a1 poscil a1,(a8+a2)*a6,ifunc | |||
a7 = (a2*k8)+k2 | |||
a3 linseg 0,.07,.1,.03,1.,3-.18,1,.02,.1,.06,0 | |||
a3 = a3*(k9*k3) | |||
a3 poscil a3,a7*a6,ifunc | |||
aout = (a1+a3)*kgate | |||
xout aout | |||
endop | |||
;************************************************** | |||
opcode CHOWNString,a,kki | |||
kamp,knote,ifunc xin | |||
;setksmps 10 | |||
iveloc ampmidi 1 | |||
kgate linenr 1, 0, .2, .01 | |||
ifc = cpspch(5.00) | |||
ifm1 = ifc | |||
ifm2 = ifc*3 | |||
ifm3 = ifc*4 | |||
indx1 = 7.5/log(ifc) ;RANGE FROM CA 2 TO 1 | |||
indx2 = 15/sqrt(ifc) ;RANGE FROM CA 2.6 TO .5 | |||
indx3 = 1.25/sqrt(ifc) ;RANGE FROM CA .2 TO .038 | |||
kvib init 0 | |||
timout 0,.75,transient | |||
kvbctl linen 1,.5,2-.75,.1 | |||
krnd randi .0075,15 ;RANDOM DEVIATION IN VIB WIDTH | |||
kvib poscil kvbctl*.03+krnd,5.5*kvbctl,ifunc | |||
transient: | |||
timout .2,2,continue | |||
ktrans linseg 1,.2,0,1,0 ;TRANSIENT ENVELOPE | |||
anoise randi ktrans,.2*ifc ;NOISE... | |||
attack poscil anoise,knote,ifunc | |||
continue: | |||
amod1 poscil ifm1*(indx1+ktrans),knote,ifunc | |||
amod2 poscil ifm2*(indx2+ktrans),knote*3,ifunc | |||
amod3 poscil ifm3*(indx3+ktrans),knote*4,ifunc | |||
asig poscil kamp,(amod1+amod2+amod3)*(1+kvib),ifunc | |||
asig linen asig+attack,.2,2,.2 | |||
xout asig *kgate | |||
endop | |||
;************************************************** | |||
opcode CHOWNTrumpet,a,kki | |||
gitemp2 ftgen 0,0,129,9,.35,1,0 | |||
gitemp3 ftgen 0,0,129,9,.4,1,0 | |||
gitemp4 ftgen 0,0,129,9,.25,1,0 | |||
gitemp5 ftgen 0,0,129,9,.3875,1.4142,0 | |||
kamp,knote,ifunc xin | |||
;setksmps 10 | |||
kgate linenr kamp/2, 0, .2, .01 | |||
irandev = .007 | |||
ifreqrand = 125 | |||
ivibatt = .6 | |||
ivibdec = .2 | |||
ivibwth = .007 | |||
ivibrate = 7 | |||
iportdev = .03 | |||
iportatt = .06 | |||
iportdec = .01 | |||
iampfac = .833 | |||
iafrmfac = 1-iampfac | |||
imax = 2.66 | |||
iratio = 1.8/imax | |||
ifundatt = .03 | |||
ifunddec = .15 | |||
ifrmatt = .03 | |||
ifrmdec = .3 | |||
imodatt = .03 | |||
imoddec = .01 | |||
kphs linen ivibwth, ivibatt, 1, ivibdec | |||
kvfac table kphs, gitemp4, ifunc | |||
kvibgate = kvfac*ivibwth | |||
kport envlpx iportdev, iportatt, 1, iportdec, gitemp5, 1, .01 | |||
krand randi irandev, ifreqrand, -1 | |||
kosc poscil kvibgate, ivibrate, ifunc | |||
kvib = (krand+1)*(kosc+1)*(kport+1) | |||
kgatemod envlpx imax*knote, imodatt, 1, imoddec, gitemp3, 1.2, .01, .2 | |||
kgatefd envlpx iampfac, ifundatt, 1, ifunddec, gitemp2, 1, .01 | |||
kgatefrm envlpx iafrmfac, ifrmatt, 1, ifrmdec, gitemp2, 1, .01 | |||
amod poscil kgatemod, knote*kvib, ifunc | |||
afund poscil kgatefd, knote*kvib+amod, ifunc | |||
afrm poscil kgatefrm, (int(1500/knote+.5)*knote)*kvib+amod*iratio, ifunc | |||
xout (afund+afrm)*kgate | |||
endop | |||
;************************************************** | |||
opcode CHOWNVibr,a,kki | |||
kamp,kifc,ifunc xin | |||
gitemp100 ftgen 0,0 ,128 ,7, 0, 128 , 1 | |||
kifm1 = kifc | |||
kifm2 = kifc*3 | |||
kifm3 = kifc*4 | |||
kindx1 = 7.5/log(kifc) ;RANGE FROM CA 2 TO 1 | |||
kindx2 = 15/sqrt(kifc) ;RANGE FROM CA 2.6 TO .5 | |||
kindx3 = 1.25/sqrt(kifc) ;RANGE FROM CA .2 TO .038 | |||
kvib init 0 | |||
timout 0,0.75,transient ;DELAYS VIBRATO FOR P8 SECONDS | |||
kvbctl linen 1,.5,10,.1 ;VIBRATO CONTROL ENVELOPE | |||
krnd randi .0075,15 ;RANDOM DEVIATION IN VIB WIDTH | |||
kvib poscil kvbctl*.03+krnd,5.5*kvbctl,ifunc ;VIBRATO GENERATOR | |||
transient: | |||
timout .2,10,continue ;EXECUTE FOR .2 SECS ONLY | |||
ktrans linseg 1,.2,0,1,0 ;TRANSIENT ENVELOPE | |||
anoise randi ktrans,.2*kifc ;NOISE... | |||
attack poscil anoise,2000,ifunc ;...CENTERED AROUND 2KHZ | |||
continue: | |||
amod1 poscil kifm1*(kindx1+ktrans),kifm1,ifunc | |||
amod2 poscil kifm2*(kindx2+ktrans),kifm2,ifunc | |||
amod3 poscil kifm3*(kindx3+ktrans),kifm3,ifunc | |||
asig poscil kamp,(kifc+amod1+amod2+amod3)*(1+kvib),ifunc | |||
asig linen asig+attack,.26,10,.2 | |||
imax ampmidi 1, gitemp100 | |||
kgate linenr imax, 0, 1, .01 | |||
aout = asig * kgate | |||
xout aout | |||
endop | |||
;************************************************** | |||
instr 1 | |||
;kselect init 1 | |||
;channel | |||
;kmodfreq chnget "mod" | |||
ksemi1 chnget "semi" | |||
kdetune chnget "detune" | |||
kspread chnget "spread" | |||
iatt chnget "att" | |||
idec chnget "dec" | |||
isus chnget "sus" | |||
irel chnget "rel" | |||
klfoamp chnget "vibamp" | |||
klforate chnget "vibrate" | |||
kselect chnget "select" | |||
;midi | |||
imidinn notnum | |||
iamp ampmidi 1 | |||
kbend pchbend 0,2 ;pitch bend | |||
;lfo | |||
klfo lfo klfoamp,klforate,2 | |||
kfreq1 = cpsmidinn(imidinn+kbend+int(ksemi1)) ;controllo midi | |||
kfreq2 = cpsmidinn(imidinn+kbend+kdetune+int(ksemi1)) | |||
;CHOWNClar,CHOWNglass,CHOWNLoop,CHOWNPerc,CHOWNPiano,CHOWNrebell,CHOWNSoprano,CHOWNString,CHOWNTrumpet,CHOWNVibr | |||
if kselect = 1 then | |||
acho1 CHOWNClar iamp,kfreq1+klfo,1 | |||
acho2 CHOWNClar iamp,kfreq2+klfo,1 | |||
elseif kselect = 2 then | |||
acho1 CHOWNglass iamp,kfreq1+klfo,1 | |||
acho2 CHOWNglass iamp,kfreq2+klfo,1 | |||
elseif kselect = 3 then | |||
acho1 CHOWNLoop iamp,kfreq1+klfo,1 | |||
acho2 CHOWNLoop iamp,kfreq2+klfo,1 | |||
elseif kselect = 4 then | |||
acho1 CHOWNPerc iamp,kfreq1+klfo,1 | |||
acho2 CHOWNPerc iamp,kfreq2+klfo,1 | |||
elseif kselect = 5 then | |||
acho1 CHOWNPiano iamp,kfreq1+klfo,1 | |||
acho2 CHOWNPiano iamp,kfreq2+klfo,1 | |||
elseif kselect = 6 then | |||
acho1 CHOWNrebell iamp,kfreq1+klfo,1 | |||
acho2 CHOWNrebell iamp,kfreq2+klfo,1 | |||
elseif kselect = 7 then | |||
acho1 CHOWNSoprano iamp,kfreq1,1 | |||
acho2 CHOWNSoprano iamp,kfreq2,1 | |||
elseif kselect = 8 then | |||
acho1 CHOWNString iamp,kfreq1+klfo,1 | |||
acho2 CHOWNString iamp,kfreq2+klfo,1 | |||
elseif kselect = 9 then | |||
acho1 CHOWNTrumpet iamp,kfreq1+klfo,1 | |||
acho2 CHOWNTrumpet iamp,kfreq2+klfo,1 | |||
elseif kselect = 10 then | |||
acho1 CHOWNVibr iamp,kfreq1,1 | |||
acho2 CHOWNVibr iamp,kfreq2,1 | |||
endif | |||
ktrig changed kselect | |||
if ktrig = 1 then | |||
reinit play | |||
endif | |||
play: | |||
;master | |||
aL clip acho1,0,0dbfs | |||
aR clip acho2,0,0dbfs | |||
aoutL = ((aL * kspread) + (aR * (1 - kspread))) *.5 | |||
aoutR = ((aL * (1-kspread)) + (aR * kspread)) *.5 | |||
kadsr mxadsr iatt,idec,isus,irel | |||
outs (aoutL)*kadsr,(aoutR)*kadsr | |||
vincr ga1,aoutL*kadsr | |||
vincr ga2,aoutR*kadsr | |||
endin | |||
instr 10 ;reverb | |||
ktrig chnget "onoff" | |||
klevel chnget "level" | |||
ksize chnget "size" | |||
if ktrig = 1 then | |||
al,ar reverbsc ga1,ga2,ksize,16000,sr,0 | |||
asum1 dcblock2 al | |||
asum2 dcblock2 ar | |||
else | |||
asum1 = 0 | |||
asum2 = 0 | |||
endif | |||
outs asum1*klevel,asum2*klevel | |||
clear ga1,ga2 | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
f1 0 16384 10 1 | |||
;f0 3600 | |||
i1 0 36000 | |||
i10 0 36000 | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,60 @@ | |||
GaussianDust.csd | |||
Iain McCurdy [2013] | |||
<Cabbage> | |||
form caption("Gaussian Dust"), size(325, 350), pluginID("gaus") | |||
image bounds(0, 0, 325, 350), colour("DarkSlateGrey"), shape("rounded"), outline("white"), line(4) | |||
checkbox bounds( 15, 10, 80, 15), text("On/Off"), channel("onoff"), value(1), fontcolour("white") | |||
combobox bounds( 10, 40, 70, 20), channel("mode"), value(2), text("Held", "Reinit") | |||
rslider bounds(90, 10, 60, 60), text("Amplitude"), channel("amp"), range(0, 1, 0.5, 0.5, 0.001), fontcolour("white") | |||
rslider bounds(150, 10, 60, 60), text("Freq."), channel("freq"), range(0.1, 10000, 10, 0.25, 0.01), fontcolour("white") | |||
rslider bounds(205, 10, 60, 60), text("Deviation"), channel("dev"), range(0, 10, 1), fontcolour("white") | |||
rslider bounds(260, 10, 60, 60), text("Spread"), channel("spread"), range(0, 1, 1), fontcolour("white") | |||
xypad bounds( 40, 78, 245, 260), text("Freq./Deviation"), channel("freq", "dev"), rangex(0.1, 10000, 10), rangey(0, 10.00, 0) | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-dm0 -n -+rtmidi=null -M0 | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 64 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
instr 1 | |||
konoff chnget "onoff" ;read in on/off switch widget value | |||
if konoff==0 goto SKIP ;if on/off switch is off jump to skip label | |||
kamp chnget "amp" | |||
kfreq chnget "freq" | |||
kdev chnget "dev" | |||
kporttime linseg 0,0.01,0.1 | |||
kdev portk kdev,kporttime | |||
kmode chnget "mode" | |||
kmode = kmode - 1 | |||
kspread chnget "spread" | |||
ktrig changed kmode ;IF gkmode COUNTER IS CHANGED GENERATE A MOMENTARY '1' IMPULSE | |||
if ktrig==1 then ;THEREFORE IF gkmode HAS BEEN CHANGED... | |||
reinit UPDATE ;BEGIN A REINITIALISATION PASS AT LABEL 'UPDATE' | |||
endif ;END OF CONDITIONAL BRANCH | |||
UPDATE: ;LABEL 'UPDATE'. REINITIALISATION BEGINS FROM HERE. | |||
asig gausstrig kamp, kfreq, kdev, i(kmode) ;GENERATE GAUSSIAM TRIGGERS | |||
kpan random 0.5-(kspread*0.5), 0.5+(kspread*0.5) | |||
asigL,asigR pan2 asig,kpan | |||
rireturn ;RETURN FROM REINITIALISATION PASS | |||
outs asigL,asigR ;SEND AUDIO SIGNAL TO OUTPUT | |||
SKIP: ;A label. Skip to here is on/off switch is off | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [60*60*24*7] ;instrument plays for a week | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,124 @@ | |||
<Cabbage> | |||
form caption("Granular synthesizer") size(428, 220), colour("black"), pluginID("gra1") | |||
rslider bounds(0, 0, 80, 80) channel("random"), range(1, 2000, 200), caption("Random freq"), colour("white"), midictrl(1, 1) | |||
rslider bounds(85, 0, 80, 80) channel("size"), range(0.005,.2, .02), caption("Grain size"), colour("white"), midictrl(1, 2) | |||
rslider bounds(170, 0, 80, 80) channel("density"), range(1, 10, 1), caption("Density"), colour("white"), midictrl(1, 3) | |||
rslider bounds(255, 0, 80, 80) channel("reverb"), range(0, 1, 0), caption("Reverb"), colour("white"), midictrl(1, 4) | |||
rslider bounds(340, 0, 80, 80) channel("freq"), range(0,30, 0), caption("Flanger"), colour("white"), midictrl(1, 5) | |||
combobox bounds(50, 90, 160, 20), channel("func1"), value(14), colour("darkgrey"), text("wt1","wt2","wt3","wt4","wt5","wt6","wt7","wt8","wt9","wt10","wt11","wt12","wt13","wt14") | |||
combobox bounds(220, 90, 160, 20), channel("func2"), value(5), colour("darkgrey"), text("wt1","wt2","wt3","wt4","wt5","wt6","wt7","wt8","wt9","wt10","wt11","wt12","wt13","wt14") | |||
keyboard pos(0, 130), size(420, 50) | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n -+rtmidi=NULL -M0 --midi-key-cps=5 --midi-velocity-amp=4 | |||
;-n -d -+rtmidi=NULL -M0 | |||
</CsOptions> | |||
<CsInstruments> | |||
;Author: Giorgio Zucco (2012) | |||
sr = 44100 | |||
ksmps = 64 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
gasig1 init 0 | |||
gasig2 init 0 | |||
giadd ftgen 14,0,8193,9,1,1,0,1.02,.28,0,.98,.14,0,4,.22,0,7,.39,0 ;bell | |||
gihanning ftgen 200,0,8192,-20,2 ;Hanning | |||
gibarlett ftgen 300,0,8192,-20,3 ;Bartlett (Triangle) | |||
instr 1 | |||
gkfn1 chnget "func1";grain waveform | |||
gkfn2 chnget "func2";grain waveform | |||
;grain | |||
kcps = p5*.5 ;grain freq | |||
kfmd chnget "random";variazione random in Hz. | |||
kgdur chnget "size" ;durata dei grani in secondi | |||
iovrlp chnget "density" ;numero di grani sovrapposti | |||
kfreq chnget "freq" | |||
iwfn1 = 200 ;inviluppo a1 | |||
iwfn2 = 300 ;inviluppo a2 | |||
;adsr | |||
iatt = 0.2 | |||
idec = 1 | |||
isus = 1 | |||
irel = .5 | |||
a1 grain2 kcps,kfmd,kgdur,iovrlp,gkfn1,iwfn1 | |||
a2 grain2 kcps*2,kfmd,kgdur,iovrlp,gkfn2,iwfn2 | |||
adel1 randh .009,kfreq | |||
adel2 randh .009,kfreq | |||
klfo poscil .01,.1,4 ;Lfo | |||
afl1 flanger a1,adel1+klfo,.9 | |||
afl2 flanger a2,adel2+klfo,.9 | |||
kadsr mxadsr iatt,idec,isus,irel | |||
;aleft clip (a1+afl1)*.1,2,.8 | |||
;aright clip (a2+afl2)*.1,2,.8 | |||
;al1 = (a1+afl1) | |||
;ar1 = (a2+afl2) | |||
;aleft clip al1*.1,2,.8 | |||
;aright clip ar1*.1,2,.8 | |||
; Or using function syntax | |||
aleft = clip ((a1+afl1)*.1,2,.8) | |||
aright = clip ((a2+afl2)*.1,2,.8) | |||
outs (aleft)*kadsr,(aright)*kadsr | |||
vincr gasig1,(aleft)*kadsr | |||
vincr gasig2,(aright)*kadsr | |||
endin | |||
instr 3 | |||
klevel chnget "reverb" | |||
al,ar reverbsc gasig1*.5,gasig2*.5,.85,16000,sr,0 | |||
kpan1 randomi 0,1,4 | |||
kpan2 randomi 0,1,8 | |||
aout1,aout2 pan2 al,kpan1 | |||
aout3,aout4 pan2 ar,1-kpan2 | |||
outs (aout1+aout2)*klevel,(aout3+aout4)*klevel | |||
clear gasig1,gasig2 | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
f1 0 1024 10 1 | |||
f2 0 4096 10 1 0 .111 0 .04 0 .02 0 .012 ;Triangular1 | |||
f3 0 4096 10 1 0 .111 0 .04 0 .02 0 .012 0 .009 0 .007;Triangular 2 | |||
f5 0 4096 10 1 0 0.3 0 0.2 0 0.14 0 0.1 0 0.09 0 0.07 0 0.06 0 0.05 ;square | |||
f4 0 4096 10 1 0 .333333 0 .2 0 .142857 0 .111111 0 .090909 0 .076923 ; Square | |||
f6 0 4096 10 1 1 1 1 .7 .5 .3 .1 ;pulse | |||
f7 0 4096 10 1 0 0 1;sine+4 | |||
f8 0 4096 10 1 0 0 0 1;sine+5 | |||
f9 0 4096 10 1 0 0 0 0 1;sine+6 | |||
f10 0 4096 10 1 0 0 0 0 0 1;sine+7 | |||
f11 0 4096 10 1 0 0 0 0 0 0 1;sine+8 | |||
f12 0 4096 10 1 0 0 0 0 0 0 0 1;sine+9 | |||
f13 0 4096 10 1 0 0 0 0 0 0 0 0 1;sine+10 | |||
f0 36000 | |||
i3 0 36000 | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,488 @@ | |||
GuitarChords | |||
------------ | |||
Mute buttons dictate the behaviour of a string when it is open and un-fretted, they have no effect on fretted notes. | |||
<Cabbage> | |||
form size(620, 260), caption("Guitar Chords"), pluginID("guit") | |||
label bounds( 56, 0, 80, 9), text("Mute"), FontColour("white") | |||
combobox bounds( 3, 10, 50, 15), channel("TuneHighE"), value(64), text("G9","F#9","F9","E9","D#9","D9","C#9","C9","B8","A#8","A8","G#8","G8","F#8","F8","E8","D#8","D8","C#8","C8","B7","A#7","A7","G#7","G7","F#7","F7","E7","D#7","D7","C#7","C7","B6","A#6","A6","G#6","G6","F#6","F6","E6","D#6","D6","C#6","C6","B5","A#5","A5","G#5","G5","F#5","F5","E5","D#5","D5","C#5","C5","B4","A#4","A4","G#4","G4","F#4","F4","E4","D#4","D4","C#4","C4","B3","A#3","A3","G#3","G3","F#3","F3","E3","D#3","D3","C#3","C3","B2","A#2","A2","G#2","G2","F#2","F2","E2","D#2","D2","C#2","C2","B1","A#1","A1","G#1","G1","F#1","F1","E1","D#1","D1","C#1","C1","B0","A#0","A0","G#0","G0","F#0","F0","E0","D#0","D0","C#0","C0","B-1","A#-1","A-1","G#-1","G-1","F#-1","F-1","E-1","D#-1","D-1","C#-1","C-1") | |||
checkbox bounds( 59, 10, 15, 15), channel("HighE0"), colour("255, 20, 20") | |||
checkbox bounds(101, 10, 15, 15), channel("HighE1"), colour("250,250, 0") | |||
checkbox bounds(153, 10, 15, 15), channel("HighE2"), colour("250,250, 0") | |||
checkbox bounds(202, 10, 15, 15), channel("HighE3"), colour("250,250, 0") | |||
checkbox bounds(249, 10, 15, 15), channel("HighE4"), colour("250,250, 0") | |||
checkbox bounds(295, 10, 15, 15), channel("HighE5"), colour("250,250, 0") | |||
checkbox bounds(339, 10, 15, 15), channel("HighE6"), colour("250,250, 0") | |||
checkbox bounds(381, 10, 15, 15), channel("HighE7"), colour("250,250, 0") | |||
checkbox bounds(420, 10, 15, 15), channel("HighE8"), colour("250,250, 0") | |||
checkbox bounds(460, 10, 15, 15), channel("HighE9"), colour("250,250, 0") | |||
checkbox bounds(495, 10, 15, 15), channel("HighE10"), colour("250,250, 0") | |||
checkbox bounds(529, 10, 15, 15), channel("HighE11"), colour("250,250, 0") | |||
checkbox bounds(561, 10, 15, 15), channel("HighE12"), colour("250,250, 0") | |||
checkbox bounds(591, 10, 15, 15), channel("HighE13"), colour("250,250, 0") | |||
combobox bounds( 3, 30, 50, 15), channel("TuneB"), value(69), text("G9","F#9","F9","E9","D#9","D9","C#9","C9","B8","A#8","A8","G#8","G8","F#8","F8","E8","D#8","D8","C#8","C8","B7","A#7","A7","G#7","G7","F#7","F7","E7","D#7","D7","C#7","C7","B6","A#6","A6","G#6","G6","F#6","F6","E6","D#6","D6","C#6","C6","B5","A#5","A5","G#5","G5","F#5","F5","E5","D#5","D5","C#5","C5","B4","A#4","A4","G#4","G4","F#4","F4","E4","D#4","D4","C#4","C4","B3","A#3","A3","G#3","G3","F#3","F3","E3","D#3","D3","C#3","C3","B2","A#2","A2","G#2","G2","F#2","F2","E2","D#2","D2","C#2","C2","B1","A#1","A1","G#1","G1","F#1","F1","E1","D#1","D1","C#1","C1","B0","A#0","A0","G#0","G0","F#0","F0","E0","D#0","D0","C#0","C0","B-1","A#-1","A-1","G#-1","G-1","F#-1","F-1","E-1","D#-1","D-1","C#-1","C-1") | |||
checkbox bounds( 59, 30, 15, 15), channel("B0"), colour("255, 20, 20") | |||
checkbox bounds(101, 30, 15, 15), channel("B1"), colour("250,250, 0"), value(1) | |||
checkbox bounds(153, 30, 15, 15), channel("B2"), colour("250,250, 0") | |||
checkbox bounds(202, 30, 15, 15), channel("B3"), colour("250,250, 0") | |||
checkbox bounds(249, 30, 15, 15), channel("B4"), colour("250,250, 0") | |||
checkbox bounds(295, 30, 15, 15), channel("B5"), colour("250,250, 0") | |||
checkbox bounds(339, 30, 15, 15), channel("B6"), colour("250,250, 0") | |||
checkbox bounds(381, 30, 15, 15), channel("B7"), colour("250,250, 0") | |||
checkbox bounds(420, 30, 15, 15), channel("B8"), colour("250,250, 0") | |||
checkbox bounds(460, 30, 15, 15), channel("B9"), colour("250,250, 0") | |||
checkbox bounds(495, 30, 15, 15), channel("B10"), colour("250,250, 0") | |||
checkbox bounds(529, 30, 15, 15), channel("B11"), colour("250,250, 0") | |||
checkbox bounds(561, 30, 15, 15), channel("B12"), colour("250,250, 0") | |||
checkbox bounds(591, 30, 15, 15), channel("B13"), colour("250,250, 0") | |||
combobox bounds( 3, 50, 50, 15), channel("TuneG"), value(73), text("G9","F#9","F9","E9","D#9","D9","C#9","C9","B8","A#8","A8","G#8","G8","F#8","F8","E8","D#8","D8","C#8","C8","B7","A#7","A7","G#7","G7","F#7","F7","E7","D#7","D7","C#7","C7","B6","A#6","A6","G#6","G6","F#6","F6","E6","D#6","D6","C#6","C6","B5","A#5","A5","G#5","G5","F#5","F5","E5","D#5","D5","C#5","C5","B4","A#4","A4","G#4","G4","F#4","F4","E4","D#4","D4","C#4","C4","B3","A#3","A3","G#3","G3","F#3","F3","E3","D#3","D3","C#3","C3","B2","A#2","A2","G#2","G2","F#2","F2","E2","D#2","D2","C#2","C2","B1","A#1","A1","G#1","G1","F#1","F1","E1","D#1","D1","C#1","C1","B0","A#0","A0","G#0","G0","F#0","F0","E0","D#0","D0","C#0","C0","B-1","A#-1","A-1","G#-1","G-1","F#-1","F-1","E-1","D#-1","D-1","C#-1","C-1") | |||
checkbox bounds( 59, 50, 15, 15), channel("G0"), colour("255, 20, 20") | |||
checkbox bounds(101, 50, 15, 15), channel("G1"), colour("250,250, 0") | |||
checkbox bounds(153, 50, 15, 15), channel("G2"), colour("250,250, 0") | |||
checkbox bounds(202, 50, 15, 15), channel("G3"), colour("250,250, 0") | |||
checkbox bounds(249, 50, 15, 15), channel("G4"), colour("250,250, 0") | |||
checkbox bounds(295, 50, 15, 15), channel("G5"), colour("250,250, 0") | |||
checkbox bounds(339, 50, 15, 15), channel("G6"), colour("250,250, 0") | |||
checkbox bounds(381, 50, 15, 15), channel("G7"), colour("250,250, 0") | |||
checkbox bounds(420, 50, 15, 15), channel("G8"), colour("250,250, 0") | |||
checkbox bounds(460, 50, 15, 15), channel("G9"), colour("250,250, 0") | |||
checkbox bounds(495, 50, 15, 15), channel("G10"), colour("250,250, 0") | |||
checkbox bounds(529, 50, 15, 15), channel("G11"), colour("250,250, 0") | |||
checkbox bounds(561, 50, 15, 15), channel("G12"), colour("250,250, 0") | |||
checkbox bounds(591, 50, 15, 15), channel("G13"), colour("250,250, 0") | |||
combobox bounds( 3, 70, 50, 15), channel("TuneD"), value(78), text("G9","F#9","F9","E9","D#9","D9","C#9","C9","B8","A#8","A8","G#8","G8","F#8","F8","E8","D#8","D8","C#8","C8","B7","A#7","A7","G#7","G7","F#7","F7","E7","D#7","D7","C#7","C7","B6","A#6","A6","G#6","G6","F#6","F6","E6","D#6","D6","C#6","C6","B5","A#5","A5","G#5","G5","F#5","F5","E5","D#5","D5","C#5","C5","B4","A#4","A4","G#4","G4","F#4","F4","E4","D#4","D4","C#4","C4","B3","A#3","A3","G#3","G3","F#3","F3","E3","D#3","D3","C#3","C3","B2","A#2","A2","G#2","G2","F#2","F2","E2","D#2","D2","C#2","C2","B1","A#1","A1","G#1","G1","F#1","F1","E1","D#1","D1","C#1","C1","B0","A#0","A0","G#0","G0","F#0","F0","E0","D#0","D0","C#0","C0","B-1","A#-1","A-1","G#-1","G-1","F#-1","F-1","E-1","D#-1","D-1","C#-1","C-1") | |||
checkbox bounds( 59, 70, 15, 15), channel("D0"), colour("255, 20, 20") | |||
checkbox bounds(101, 70, 15, 15), channel("D1"), colour("250,250, 0") | |||
checkbox bounds(153, 70, 15, 15), channel("D2"), colour("250,250, 0"), value(1) | |||
checkbox bounds(202, 70, 15, 15), channel("D3"), colour("250,250, 0") | |||
checkbox bounds(249, 70, 15, 15), channel("D4"), colour("250,250, 0") | |||
checkbox bounds(295, 70, 15, 15), channel("D5"), colour("250,250, 0") | |||
checkbox bounds(339, 70, 15, 15), channel("D6"), colour("250,250, 0") | |||
checkbox bounds(381, 70, 15, 15), channel("D7"), colour("250,250, 0") | |||
checkbox bounds(420, 70, 15, 15), channel("D8"), colour("250,250, 0") | |||
checkbox bounds(460, 70, 15, 15), channel("D9"), colour("250,250, 0") | |||
checkbox bounds(495, 70, 15, 15), channel("D10"), colour("250,250, 0") | |||
checkbox bounds(529, 70, 15, 15), channel("D11"), colour("250,250, 0") | |||
checkbox bounds(561, 70, 15, 15), channel("D12"), colour("250,250, 0") | |||
checkbox bounds(591, 70, 15, 15), channel("D13"), colour("250,250, 0") | |||
combobox bounds( 3, 90, 50, 15), channel("TuneA"), value(83), text("G9","F#9","F9","E9","D#9","D9","C#9","C9","B8","A#8","A8","G#8","G8","F#8","F8","E8","D#8","D8","C#8","C8","B7","A#7","A7","G#7","G7","F#7","F7","E7","D#7","D7","C#7","C7","B6","A#6","A6","G#6","G6","F#6","F6","E6","D#6","D6","C#6","C6","B5","A#5","A5","G#5","G5","F#5","F5","E5","D#5","D5","C#5","C5","B4","A#4","A4","G#4","G4","F#4","F4","E4","D#4","D4","C#4","C4","B3","A#3","A3","G#3","G3","F#3","F3","E3","D#3","D3","C#3","C3","B2","A#2","A2","G#2","G2","F#2","F2","E2","D#2","D2","C#2","C2","B1","A#1","A1","G#1","G1","F#1","F1","E1","D#1","D1","C#1","C1","B0","A#0","A0","G#0","G0","F#0","F0","E0","D#0","D0","C#0","C0","B-1","A#-1","A-1","G#-1","G-1","F#-1","F-1","E-1","D#-1","D-1","C#-1","C-1") | |||
checkbox bounds( 59, 90, 15, 15), channel("A0"), colour("255, 20, 20") | |||
checkbox bounds(101, 90, 15, 15), channel("A1"), colour("250,250, 0") | |||
checkbox bounds(153, 90, 15, 15), channel("A2"), colour("250,250, 0") | |||
checkbox bounds(202, 90, 15, 15), channel("A3"), colour("250,250, 0"), value(1) | |||
checkbox bounds(249, 90, 15, 15), channel("A4"), colour("250,250, 0") | |||
checkbox bounds(295, 90, 15, 15), channel("A5"), colour("250,250, 0") | |||
checkbox bounds(339, 90, 15, 15), channel("A6"), colour("250,250, 0") | |||
checkbox bounds(381, 90, 15, 15), channel("A7"), colour("250,250, 0") | |||
checkbox bounds(420, 90, 15, 15), channel("A8"), colour("250,250, 0") | |||
checkbox bounds(460, 90, 15, 15), channel("A9"), colour("250,250, 0") | |||
checkbox bounds(495, 90, 15, 15), channel("A10"), colour("250,250, 0") | |||
checkbox bounds(529, 90, 15, 15), channel("A11"), colour("250,250, 0") | |||
checkbox bounds(561, 90, 15, 15), channel("A12"), colour("250,250, 0") | |||
checkbox bounds(591, 90, 15, 15), channel("A13"), colour("250,250, 0") | |||
combobox bounds( 3,110, 50, 15), channel("TuneLowE"), value(88), text("G9","F#9","F9","E9","D#9","D9","C#9","C9","B8","A#8","A8","G#8","G8","F#8","F8","E8","D#8","D8","C#8","C8","B7","A#7","A7","G#7","G7","F#7","F7","E7","D#7","D7","C#7","C7","B6","A#6","A6","G#6","G6","F#6","F6","E6","D#6","D6","C#6","C6","B5","A#5","A5","G#5","G5","F#5","F5","E5","D#5","D5","C#5","C5","B4","A#4","A4","G#4","G4","F#4","F4","E4","D#4","D4","C#4","C4","B3","A#3","A3","G#3","G3","F#3","F3","E3","D#3","D3","C#3","C3","B2","A#2","A2","G#2","G2","F#2","F2","E2","D#2","D2","C#2","C2","B1","A#1","A1","G#1","G1","F#1","F1","E1","D#1","D1","C#1","C1","B0","A#0","A0","G#0","G0","F#0","F0","E0","D#0","D0","C#0","C0","B-1","A#-1","A-1","G#-1","G-1","F#-1","F-1","E-1","D#-1","D-1","C#-1","C-1") | |||
checkbox bounds( 59,110, 15, 15), channel("LowE0"), colour("255, 20, 20"), value(1) | |||
checkbox bounds(101,110, 15, 15), channel("LowE1"), colour("250,250, 0");52 | |||
checkbox bounds(153,110, 15, 15), channel("LowE2"), colour("250,250, 0");49 | |||
checkbox bounds(202,110, 15, 15), channel("LowE3"), colour("250,250, 0");47 | |||
checkbox bounds(249,110, 15, 15), channel("LowE4"), colour("250,250, 0");46 | |||
checkbox bounds(295,110, 15, 15), channel("LowE5"), colour("250,250, 0");44 | |||
checkbox bounds(339,110, 15, 15), channel("LowE6"), colour("250,250, 0");42 | |||
checkbox bounds(381,110, 15, 15), channel("LowE7"), colour("250,250, 0");39 | |||
checkbox bounds(420,110, 15, 15), channel("LowE8"), colour("250,250, 0");40 | |||
checkbox bounds(460,110, 15, 15), channel("LowE9"), colour("250,250, 0");35 | |||
checkbox bounds(495,110, 15, 15), channel("LowE10"), colour("250,250, 0");34 | |||
checkbox bounds(529,110, 15, 15), channel("LowE11"), colour("250,250, 0");32 | |||
checkbox bounds(561,110, 15, 15), channel("LowE12"), colour("250,250, 0");30 | |||
checkbox bounds(591,110, 15, 15), channel("LowE13"), colour("250,250, 0"); | |||
; frets | |||
line bounds(134, 5, 2, 130), colour(50,50,50) ; ; | |||
line bounds(185, 5, 2, 130), colour(50,50,50) ;3 ; | |||
line bounds(232, 5, 2, 130), colour(50,50,50) ; ; | |||
line bounds(279, 5, 2, 130), colour(50,50,50) ;5 ; | |||
line bounds(324, 5, 2, 130), colour(50,50,50) ; ; | |||
line bounds(367, 5, 2, 130), colour(50,50,50) ;7 ; | |||
line bounds(408, 5, 2, 130), colour(50,50,50) ; ; | |||
line bounds(447, 5, 2, 130), colour(50,50,50) ;9 ; | |||
line bounds(484, 5, 2, 130), colour(50,50,50) ; ; | |||
line bounds(519, 5, 2, 130), colour(50,50,50) ; ; | |||
line bounds(552, 5, 2, 130), colour(50,50,50) ;12 ; | |||
line bounds(583, 5, 2, 130), colour(50,50,50) ; ; | |||
line bounds(612, 5, 2, 130), colour(50,50,50) ; | |||
image bounds(185, 5, 47,130), colour("tan"), line(0) ; 3rd fret | |||
image bounds(279, 5, 45,130), colour("tan"), line(0) ; 5th fret | |||
image bounds(367, 5, 42,130), colour("tan"), line(0) ; 7th fret | |||
image bounds(447, 5, 37,130), colour("tan"), line(0) ; 9th fret | |||
image bounds(552, 5, 31,130), colour("tan"), line(0) ; 12th fret | |||
image bounds( 80, 0,624,140), colour("white"), line(0) ; neck | |||
button bounds( 80,150,100, 30), text("strum"), channel("strum"), value(0), FontColour("yellow") | |||
combobox bounds( 80,185, 95, 17), channel("GuitarType"), value(0), text("6 String","12 String") | |||
checkbox bounds(185,150,100, 20), channel("ReverseStrum"), text("Reverse") colour("lime") | |||
hslider bounds(280,143,270, 40), text("Gap"), colour("tan"), FontColour(195,126, 0), channel("gap"), range(0,0.5,0.05,0.5,0.0001) | |||
hslider bounds(280,168,270, 40), text("Damp"), colour("tan"), FontColour(195,126, 0), channel("damp"), range(0.01,0.99,0.17) | |||
hslider bounds(280,193,270, 40), text("Pos."), colour("tan"), FontColour(195,126, 0), channel("pos"), range(0.0001, 0.5, 0.02, 0.5, 0.001) | |||
image bounds(5, 235, 470, 20), colour(75, 85, 90, 50), plant("credit"){ | |||
label bounds(0.03, 0.1, .6, .7), text("Author: Iain McCurdy |2013|"), colour("white"), FontColour(195,126, 0) | |||
} | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-n -d -+rtmidi=NULL -M0 --midi-key-cps=4 --midi-velocity-amp=5 | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 64 | |||
nchnls = 2 | |||
0dbfs=1 | |||
iDetuneRange = 0.025 | |||
gidetune ftgen 0, 0, 8, -21, 6, iDetuneRange ; table of detuning values for each string in a 12 string guitar configuration | |||
instr 1 | |||
; radio buttons mechanism | |||
koff = 0 ; checkbox value when off (needs to be k-rate) | |||
kSumHighE = 0 ; sum of high E string buttons | |||
kSumB = 0 ; sum of B string buttons | |||
kSumG = 0 ; sum of G string buttons | |||
kSumD = 0 ; sum of D string buttons | |||
kSumA = 0 ; sum of A string buttons | |||
kSumLowE = 0 ; sum of low E string buttons | |||
kTrigSumHighE = 0 ; sum of high E string on triggers | |||
kTrigSumB = 0 ; sum of B string change triggers | |||
kTrigSumG = 0 ; sum of G string change triggers | |||
kTrigSumD = 0 ; sum of D string change triggers | |||
kTrigSumA = 0 ; sum of A string change triggers | |||
kTrigSumLowE = 0 ; sum of low E string change triggers | |||
kChangeTrigHighE = 0 ; sum of high E string change triggers | |||
kChangeTrigB = 0 ; sum of B string change triggers | |||
kChangeTrigG = 0 ; sum of G string change triggers | |||
kChangeTrigD = 0 ; sum of D string change triggers | |||
kChangeTrigA = 0 ; sum of A string change triggers | |||
kChangeTrigLowE = 0 ; sum of low E string change triggers | |||
; macro for string set-up | |||
#define STRING_SETUP(LABEL) | |||
# | |||
k$LABEL0 chnget "$LABEL0" | |||
kTune$LABEL chnget "Tune$LABEL" | |||
# | |||
$STRING_SETUP(HighE) | |||
$STRING_SETUP(B) | |||
$STRING_SETUP(G) | |||
$STRING_SETUP(D) | |||
$STRING_SETUP(A) | |||
$STRING_SETUP(LowE) | |||
; macro for check box input | |||
#define INPUT(N'LABEL) | |||
# | |||
k$LABEL$N chnget "$LABEL$N" ; read in checkbox value | |||
kSum$LABEL = kSum$LABEL + k$LABEL$N ; accumulate to value for all checkboxes for this string | |||
ktrig$N trigger k$LABEL$N,0.5,0 ; generate a trigger if this checkbox is switched *on* | |||
kTrigSum$LABEL = kTrigSum$LABEL + ktrig$N ; accumulation of all 'on' triggers for this string | |||
kChangeTrig changed k$LABEL$N ; generate a different trigger if this checkbox is switched either on or off | |||
kChangeTrig$LABEL = kChangeTrig$LABEL+kChangeTrig ; accumlation of all 'change' triggers for this string | |||
# | |||
; macro for radio button switching mechanism | |||
#define SWITCH(N'LABEL) | |||
# | |||
if ktrig$N==1 then | |||
k$LABELVal = $N | |||
kgoto SKIP$LABEL$N | |||
endif | |||
chnset koff,"$LABEL$N" | |||
SKIP$LABEL$N: | |||
# | |||
$INPUT(1'HighE) | |||
$INPUT(2'HighE) | |||
$INPUT(3'HighE) | |||
$INPUT(4'HighE) | |||
$INPUT(5'HighE) | |||
$INPUT(6'HighE) | |||
$INPUT(7'HighE) | |||
$INPUT(8'HighE) | |||
$INPUT(9'HighE) | |||
$INPUT(10'HighE) | |||
$INPUT(11'HighE) | |||
$INPUT(12'HighE) | |||
$INPUT(13'HighE) | |||
if(kTrigSum$LABEL>0) then | |||
$SWITCH(1'HighE) | |||
$SWITCH(2'HighE) | |||
$SWITCH(3'HighE) | |||
$SWITCH(4'HighE) | |||
$SWITCH(5'HighE) | |||
$SWITCH(6'HighE) | |||
$SWITCH(7'HighE) | |||
$SWITCH(8'HighE) | |||
$SWITCH(9'HighE) | |||
$SWITCH(10'HighE) | |||
$SWITCH(11'HighE) | |||
$SWITCH(12'HighE) | |||
$SWITCH(13'HighE) | |||
endif | |||
$INPUT(1'B) | |||
$INPUT(2'B) | |||
$INPUT(3'B) | |||
$INPUT(4'B) | |||
$INPUT(5'B) | |||
$INPUT(6'B) | |||
$INPUT(7'B) | |||
$INPUT(8'B) | |||
$INPUT(9'B) | |||
$INPUT(10'B) | |||
$INPUT(11'B) | |||
$INPUT(12'B) | |||
$INPUT(13'B) | |||
if(kTrigSum$LABEL>0) then | |||
$SWITCH(1'B) | |||
$SWITCH(2'B) | |||
$SWITCH(3'B) | |||
$SWITCH(4'B) | |||
$SWITCH(5'B) | |||
$SWITCH(6'B) | |||
$SWITCH(7'B) | |||
$SWITCH(8'B) | |||
$SWITCH(9'B) | |||
$SWITCH(10'B) | |||
$SWITCH(11'B) | |||
$SWITCH(12'B) | |||
$SWITCH(13'B) | |||
endif | |||
$INPUT(1'G) | |||
$INPUT(2'G) | |||
$INPUT(3'G) | |||
$INPUT(4'G) | |||
$INPUT(5'G) | |||
$INPUT(6'G) | |||
$INPUT(7'G) | |||
$INPUT(8'G) | |||
$INPUT(9'G) | |||
$INPUT(10'G) | |||
$INPUT(11'G) | |||
$INPUT(12'G) | |||
$INPUT(13'G) | |||
if(kTrigSum$LABEL>0) then | |||
$SWITCH(1'G) | |||
$SWITCH(2'G) | |||
$SWITCH(3'G) | |||
$SWITCH(4'G) | |||
$SWITCH(5'G) | |||
$SWITCH(6'G) | |||
$SWITCH(7'G) | |||
$SWITCH(8'G) | |||
$SWITCH(9'G) | |||
$SWITCH(10'G) | |||
$SWITCH(11'G) | |||
$SWITCH(12'G) | |||
$SWITCH(13'G) | |||
endif | |||
$INPUT(1'D) | |||
$INPUT(2'D) | |||
$INPUT(3'D) | |||
$INPUT(4'D) | |||
$INPUT(5'D) | |||
$INPUT(6'D) | |||
$INPUT(7'D) | |||
$INPUT(8'D) | |||
$INPUT(9'D) | |||
$INPUT(10'D) | |||
$INPUT(11'D) | |||
$INPUT(12'D) | |||
$INPUT(13'D) | |||
if(kTrigSum$LABEL>0) then | |||
$SWITCH(1'D) | |||
$SWITCH(2'D) | |||
$SWITCH(3'D) | |||
$SWITCH(4'D) | |||
$SWITCH(5'D) | |||
$SWITCH(6'D) | |||
$SWITCH(7'D) | |||
$SWITCH(8'D) | |||
$SWITCH(9'D) | |||
$SWITCH(10'D) | |||
$SWITCH(11'D) | |||
$SWITCH(12'D) | |||
$SWITCH(13'D) | |||
endif | |||
$INPUT(1'A) | |||
$INPUT(2'A) | |||
$INPUT(3'A) | |||
$INPUT(4'A) | |||
$INPUT(5'A) | |||
$INPUT(6'A) | |||
$INPUT(7'A) | |||
$INPUT(8'A) | |||
$INPUT(9'A) | |||
$INPUT(10'A) | |||
$INPUT(11'A) | |||
$INPUT(12'A) | |||
$INPUT(13'A) | |||
if(kTrigSum$LABEL>0) then | |||
$SWITCH(1'A) | |||
$SWITCH(2'A) | |||
$SWITCH(3'A) | |||
$SWITCH(4'A) | |||
$SWITCH(5'A) | |||
$SWITCH(6'A) | |||
$SWITCH(7'A) | |||
$SWITCH(8'A) | |||
$SWITCH(9'A) | |||
$SWITCH(10'A) | |||
$SWITCH(11'A) | |||
$SWITCH(12'A) | |||
$SWITCH(13'A) | |||
endif | |||
$INPUT(1'LowE) | |||
$INPUT(2'LowE) | |||
$INPUT(3'LowE) | |||
$INPUT(4'LowE) | |||
$INPUT(5'LowE) | |||
$INPUT(6'LowE) | |||
$INPUT(7'LowE) | |||
$INPUT(8'LowE) | |||
$INPUT(9'LowE) | |||
$INPUT(10'LowE) | |||
$INPUT(11'LowE) | |||
$INPUT(12'LowE) | |||
$INPUT(13'LowE) | |||
if(kTrigSum$LABEL>0) then | |||
$SWITCH(1'LowE) | |||
$SWITCH(2'LowE) | |||
$SWITCH(3'LowE) | |||
$SWITCH(4'LowE) | |||
$SWITCH(5'LowE) | |||
$SWITCH(6'LowE) | |||
$SWITCH(7'LowE) | |||
$SWITCH(8'LowE) | |||
$SWITCH(9'LowE) | |||
$SWITCH(10'LowE) | |||
$SWITCH(11'LowE) | |||
$SWITCH(12'LowE) | |||
$SWITCH(13'LowE) | |||
endif | |||
; macro that checks for open strings | |||
#define OPEN_STRING(LABEL) | |||
# | |||
if(kSum$LABEL==0) then | |||
k$LABELVal = 0 | |||
endif | |||
# | |||
$OPEN_STRING(HighE) | |||
$OPEN_STRING(B) | |||
$OPEN_STRING(G) | |||
$OPEN_STRING(D) | |||
$OPEN_STRING(A) | |||
$OPEN_STRING(LowE) | |||
; macro for operations when a string is plucked | |||
#define PLAY_STRING(LABEL'StringNum) | |||
# | |||
k$LABELNum = k$LABELVal + (128 - kTune$LABEL) ; derive MIDI note number (note that combobox value has to be inverted | |||
k$LABELCps = cpsmidinn(k$LABELNum) ; convert to cps | |||
kTimeElapsed timeinsts ; elapsed time form the start of this note (this will be used to prevent premature triggering of the string) | |||
if(kChangeTrig$LABEL==1&&kTimeElapsed>0.1) then ; if a change note trigger for this string has been received and time buffer has elapsed... | |||
turnoff2 2.$StringNum,4,1 ; turnoff this string | |||
if(kSum$LABEL==0&&k$LABEL0==1) kgoto SKIP$LABEL ; if this is an open and muted string jump string playing code | |||
schedkwhen kChangeTrig$LABEL,0,0,2.$StringNum,0,20,k$LABELCps,$StringNum ; play string (instr 2) | |||
endif | |||
if(kSum$LABEL==0&&k$LABEL0==1) kgoto SKIP$LABEL ; if this is an open and muted string jump string playing code | |||
kRndStrt random 0,kgap*0.15 | |||
schedkwhen ktrig,0,0,2.$StringNum,kstart+kRndStrt,20,k$LABELCps,$StringNum ; play string (instr 2) | |||
kstart = kstart + kgap ; increment start time | |||
SKIP$LABEL: ; label | |||
# | |||
kstrum chnget "strum" ; 'strum' button | |||
ktrig changed kstrum ; if 'strum' button has been clicked... | |||
if ktrig==1 then ; ... | |||
turnoff2 2,0,1 ; turn off all playing strings (in preparation for the new chord) | |||
endif | |||
kgap chnget "gap" | |||
kreverse chnget "ReverseStrum" | |||
if kreverse==0 then | |||
kstart = 0 ; start time (for first string plucked | |||
else | |||
kstart = kgap*5 | |||
kgap = -kgap | |||
endif | |||
$PLAY_STRING(LowE'1) | |||
$PLAY_STRING(A'2) | |||
$PLAY_STRING(D'3) | |||
$PLAY_STRING(G'4) | |||
$PLAY_STRING(B'5) | |||
$PLAY_STRING(HighE'6) | |||
endin | |||
instr 2 ; string pluck | |||
kdamp chnget "damp" ; damping | |||
iplk chnget "pos" ; pluck position | |||
iamp random 0.1,0.2 | |||
iGuitarType chnget "GuitarType" | |||
if(iGuitarType==2) then ; if 12 string guitar... | |||
kmvt1 jspline 0.15,0.2,0.4 ; a bit of random pick-up movement animates the tone of the guitar | |||
kmvt2 jspline 0.15,0.2,0.4 | |||
idtn table p5,gidetune ; detuning value. used in 12 string guitar only. | |||
if p5<5 then ; strings 1 - 4 are in octaves in a 12-string guitar | |||
a1 wgpluck2 iplk, iamp/2, p4, 0.2+kmvt1, kdamp | |||
a2 wgpluck2 iplk, iamp/2, p4*(2+idtn), 0.2+kmvt2, kdamp | |||
else ; strings 5 & 6 are in unison in a 12-string guitar | |||
a1 wgpluck2 iplk, iamp/2, p4, 0.2 +kmvt1, kdamp | |||
a2 wgpluck2 iplk, iamp/2, p4*(1+idtn), 0.2+rnd(0.5)+kmvt2, kdamp | |||
endif | |||
a2 delay a2,0.01+rnd(0.01) ; slight delay to second string | |||
asig = a1+a2 | |||
else ; otherwise 6 string | |||
kmvt jspline 0.15,0.2,0.4 | |||
asig wgpluck2 iplk, iamp, p4, 0.2+kmvt, kdamp | |||
endif | |||
aenv linsegr 0, 0.0008, 1, p3-0.1008, 0, 0.05, 0 ; amplitude envelope. Attack removes excessive 'click'. Decays to nothing across note duration (p3). Short release stage prevents click if a note is interrupted. | |||
/* FILTERING TO IMPROVE THE SOUND */ | |||
af1 resonz asig,200,200 | |||
af2 resonz asig,550,550 | |||
af3 resonz asig,2100,2100 | |||
asig sum af1,af2*5,af3 | |||
asig = asig/200 | |||
/* ------------------------------ */ | |||
asig = asig*aenv | |||
outs asig, asig | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 3600 | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,300 @@ | |||
<Cabbage> | |||
form caption("Inharmonic Synth"), size(445, 320), pluginID("InSy") | |||
image pos(0, 0), size(445, 290), colour("black"), shape("rounded"), outline("brown"), line(4) | |||
combobox caption("Instrument"), channel("Instr"), pos(275, 10), size(160, 90), value(4), text("Bass Guitar", "Dahina", "Banyan", "Xylophone", "Tibetan Bowl 180mm", "Spinel Sphere", "Pot Lid", "Red Cedar Wood Plate", "Tubular Bell", "Redwood Wood Plate", "Douglas Fir Wood Plate", "Uniform Wooden Bar", "Uniform Aluminium Bar", "Vibraphone 1", "Vibraphone 2", "Chalandi Plates", "Tibetan Bowl 152mm", "Tibetan Bowl 140mm", "Wine Glass", "Small Handbell", "Albert Clock Bell", "Wood Block") | |||
groupbox bounds(10, 10, 260, 90), text("Filter Envelope"){ | |||
rslider bounds( 10, 35,60,60), text("Amount"), colour("cornflowerblue"), channel("FAmt"), range(0, 1, 0.7) | |||
rslider bounds( 60, 35,60,60), text("Dec."), colour("cornflowerblue"), channel("FDec"), range(0, 1, 0.45) | |||
rslider bounds(110, 35,60,60), text("Sus."), colour("cornflowerblue"), channel("FSus"), range(0, 1, 0) | |||
rslider bounds(160, 35,60,60), text("Rel."), colour("cornflowerblue"), channel("FRel"), range(0, 1, 0.45) | |||
rslider bounds(210, 35,60,60), text("Shape"), channel("FShp"), colour("cornflowerblue"), range(-50, 50, -16) | |||
} | |||
groupbox bounds(10, 105, 210, 90), text("Amplitude Envelope"){ | |||
rslider bounds( 10,130,60,60), text("Att."), channel("AAtt"), colour("red"), range(0, 1, 0) | |||
rslider bounds( 60,130,60,60), text("Dec."), channel("ADec"), colour("red"),range(0, 1, 0.45) | |||
rslider bounds(110,130,60,60), text("Sus"), channel("ASus"), colour("red"),range(0, 1, 0) | |||
rslider bounds(160,130,60,60), text("Rel"), channel("ARel"), colour("red"),range(0, 1, 0.45) | |||
} | |||
groupbox bounds(225, 105, 210, 90), text("Chorus"){ | |||
checkbox channel("ChoOnOff"), pos(235,135), size(40, 43), value(1) | |||
label bounds(235,178, 40, 11), text("On/Off"), colour("black") | |||
rslider bounds(275,130,60,60), text("Mix"), channel("ChoMix"), range(0, 1, 0.5) | |||
rslider bounds(325,130,60,60), text("Depth"), channel("ChoDep"), range(0, 0.1, 0.01,0.5, 0.001) | |||
rslider bounds(375,130,60,60), text("Rate"), channel("ChoRte"), range(0, 20, 0.96, 0.5) | |||
} | |||
keyboard pos(10, 200), size(425, 80) | |||
image bounds(5, 295, 240, 22), colour(75, 85, 90, 100), plant("credit"){ | |||
label bounds(0.03, 0.15, .9, .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 ;MAXIMUM AMPLITUDE | |||
massign 3,2 | |||
;Author: Iain McCurdy (2012) | |||
;FUNCTION TABLES STORING MODAL FREQUENCY RATIOS=================================================================================================================================== | |||
;plucked string | |||
girtos1 ftgen 0,0,-20, -2, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 | |||
;dahina | |||
girtos2 ftgen 0,0,-6,-2, 1, 2.89, 4.95, 6.99, 8.01, 9.02 | |||
;banyan | |||
girtos3 ftgen 0,0,-6,-2, 1, 2.0, 3.01, 4.01, 4.69, 5.63 | |||
;xylophone | |||
girtos4 ftgen 0,0,-6,-2, 1, 3.932, 9.538, 16.688, 24.566, 31.147 | |||
;tibetan bowl (180mm) | |||
girtos5 ftgen 0,0,-7,-2, 1, 2.77828, 5.18099, 8.16289, 11.66063, 15.63801, 19.99 | |||
;spinel sphere with diameter of 3.6675mm | |||
girtos6 ftgen 0,0,-24,-2, 1, 1.026513174725, 1.4224916858532, 1.4478690202098, 1.4661959580455, 1.499452545408, 1.7891839345101, 1.8768994627782, 1.9645945254541, 1.9786543873113, 2.0334612432847, 2.1452852391916, 2.1561524686621, 2.2533435661294, 2.2905090816065, 2.3331798413917, 2.4567715528268, 2.4925556408289, 2.5661806088514, 2.6055768738808, 2.6692760296751, 2.7140956766436, 2.7543617293425, 2.7710411870043 | |||
;pot lid | |||
girtos7 ftgen 0,0,-6,-2, 1, 3.2, 6.23, 6.27, 9.92, 14.15 | |||
;red cedar wood plate | |||
girtos8 ftgen 0,0,-4,-2, 1, 1.47, 2.09, 2.56 | |||
;tubular bell | |||
girtos9 ftgen 0,0,-10,-2, 272/437, 538/437, 874/437, 1281/437, 1755/437, 2264/437, 2813/437, 3389/437, 4822/437, 5255/437 | |||
;redwood wood plate | |||
girtos10 ftgen 0,0,-4,-2, 1, 1.47, 2.11, 2.57 | |||
;douglas fir wood plate | |||
girtos11 ftgen 0,0,-4,-2, 1, 1.42, 2.11, 2.47 | |||
;uniform wooden bar | |||
girtos12 ftgen 0,0,-6,-2, 1, 2.572, 4.644, 6.984, 9.723, 12 | |||
;uniform aluminum bar | |||
girtos13 ftgen 0,0,-6,-2, 1, 2.756, 5.423, 8.988, 13.448, 18.680 | |||
;vibraphone 1 | |||
girtos14 ftgen 0,0,-6,-2, 1, 3.984, 10.668, 17.979, 23.679, 33.642 | |||
;vibraphone 2 | |||
girtos15 ftgen 0,0,-6,-2, 1, 3.997, 9.469, 15.566, 20.863, 29.440 | |||
;Chalandi plates | |||
girtos16 ftgen 0,0,-5,-2, 1, 1.72581, 5.80645, 7.41935, 13.91935 | |||
;tibetan bowl (152 mm) | |||
girtos17 ftgen 0,0,-7,-2, 1, 2.66242, 4.83757, 7.51592, 10.64012, 14.21019, 18.14027 | |||
;tibetan bowl (140 mm) | |||
girtos18 ftgen 0,0,-5,-2, 1, 2.76515, 5.12121, 7.80681, 10.78409 | |||
;wine glass | |||
girtos19 ftgen 0,0,-5,-2, 1, 2.32, 4.25, 6.63, 9.38 | |||
;small handbell | |||
girtos20 ftgen 0,0,-22,-2, 1, 1.0019054878049, 1.7936737804878, 1.8009908536585, 2.5201981707317, 2.5224085365854, 2.9907012195122, 2.9940548780488, 3.7855182926829, 3.8061737804878, 4.5689024390244, 4.5754573170732, 5.0296493902439, 5.0455030487805, 6.0759908536585, 5.9094512195122, 6.4124237804878, 6.4430640243902, 7.0826219512195, 7.0923780487805, 7.3188262195122, 7.5551829268293 | |||
;albert clock bell belfast | |||
girtos21 ftgen 0,0,-22,-2, 2.043260,1.482916,1.000000,3.328848,4.761811,1.477056,0.612007,2.661295,1.002793,4.023776,0.254139,2.043916,4.032463,2.659438,4.775560,5.500494,3.331014,0.809697,2.391301, 0.254098,1.901476,2.366563 ;,0.614968,2.046543,1.814887,3.130744,2.484426,0.558874,0.801697,0.070870,3.617036,2.782656 | |||
;wood block | |||
girtos22 ftgen 0,0,4,-2, 915/915,1540/915,1863/915,3112/915 | |||
;================================================================================================================================================================================= | |||
;================================================================================================================================================================================= | |||
;GEN09 FUNCTION TABLE VERSIONS OF THE MODAL FREQUENCY TABLES | |||
;THESE AREN'T ACTUALLY NEEDED AS THE TABLES ARE CALCULATED IN INSTRUMENT 2 BUT IF INSTRUMENT 2 IS OMITTED THESE TABLES WILL BE NEEDED | |||
;NOTE THAT PARTIAL NUMBER HAVE BEEN MULTIPLIED BY giRtosScale AND THAT THE FREQUENCY OF ANY OSCILLATOR THAT USES THESE TABLES WILL HAVE TO BE DIVIDED BY THE SAME NUMBER | |||
giwave1 ftgen 0, 0, 262144, 9, 1000,1.000,0, 2000,1.000,0, 3000,1.000,0, 4000,1.000,0, 5000,1.000,0, 6000,1.000,0, 7000,1.000,0, 8000,1.000,0, 9000,1.000,0, 10000,1.000,0, 11000,1.000,0, 12000,1.000,0, 13000,1.000,0, 14000,1.000,0, 15000,1.000,0, 16000,1.000,0, 17000,1.000,0, 18000,1.000,0, 19000,1.000,0, 20000,1.000,0 | |||
giwave2 ftgen 0, 0, 262144, 9, 1000,1.000,0, 2890,1.000,0, 4950,1.000,0, 6990,1.000,0, 8010,1.000,0, 9020,1.000,0 | |||
giwave3 ftgen 0, 0, 262144, 9, 1000,1.000,0, 2000,1.000,0, 3010,1.000,0, 4010,1.000,0, 4690,1.000,0, 5630,1.000,0 | |||
giwave4 ftgen 0, 0, 262144, 9, 1000,1.000,0, 3932,1.000,0, 9538,1.000,0, 16688,1.000,0, 24566,1.000,0, 31147,1.000,0 | |||
giwave5 ftgen 0, 0, 262144, 9, 1000,1.000,0, 2778,0.500,0, 5180,0.250,0, 8162,0.125,0, 11660,0.062,0, 15638,0.031,0, 19990,0.016,0 | |||
giwave6 ftgen 0, 0, 262144, 9, 1000,1.000,0, 1026,1.000,0, 1422,1.000,0, 1447,1.000,0, 1466,1.000,0, 1499,1.000,0, 1789,1.000,0, 1876,1.000,0, 1964,1.000,0, 1978,1.000,0, 2033,1.000,0, 2145,1.000,0, 2156,1.000,0, 2253,1.000,0, 2290,1.000,0, 2333,1.000,0, 2456,1.000,0, 2492,1.000,0, 2566,1.000,0, 2605,1.000,0, 2669,1.000,0, 2714,1.000,0 | |||
giwave7 ftgen 0, 0, 262144, 9, 1000,1.000,0, 3200,1.000,0, 6230,1.000,0, 6270,1.000,0, 9920,1.000,0, 14150,1.000,0 | |||
giwave8 ftgen 0, 0, 262144, 9, 1000,1.000,0, 1470,1.000,0, 2090,1.000,0, 2560,1.000,0 | |||
giwave9 ftgen 0, 0, 262144, 9, 622,1.000,0, 1231,1.000,0, 2000,1.000,0, 2931,1.000,0, 4016,1.000,0, 5180,1.000,0, 6437,1.000,0, 7755,1.000,0, 11034,1.000,0, 12025,1.000,0 | |||
giwave10 ftgen 0, 0, 262144, 9, 1000,1.000,0, 1470,1.000,0, 2110,1.000,0, 2570,1.000,0 | |||
giwave11 ftgen 0, 0, 262144, 9, 1000,1.000,0, 1420,1.000,0, 2110,1.000,0, 2470,1.000,0 | |||
giwave12 ftgen 0, 0, 262144, 9, 1000,1.000,0, 2572,1.000,0, 4644,1.000,0, 6984,1.000,0, 9723,1.000,0, 12000,1.000,0 | |||
giwave13 ftgen 0, 0, 262144, 9, 1000,1.000,0, 2756,1.000,0, 5423,1.000,0, 8988,1.000,0, 13448,1.000,0, 18680,1.000,0 | |||
giwave14 ftgen 0, 0, 262144, 9, 1000,1.000,0, 3984,1.000,0, 10668,1.000,0, 17979,1.000,0, 23679,1.000,0, 33642,1.000,0 | |||
giwave15 ftgen 0, 0, 262144, 9, 1000,1.000,0, 3997,1.000,0, 9469,1.000,0, 15566,1.000,0, 20863,1.000,0, 29440,1.000,0 | |||
giwave16 ftgen 0, 0, 262144, 9, 1000,1.000,0, 1725,1.000,0, 5806,1.000,0, 7419,1.000,0, 13919,1.000,0 | |||
giwave17 ftgen 0, 0, 262144, 9, 1000,1.000,0, 2662,1.000,0, 4837,1.000,0, 7515,1.000,0, 10640,1.000,0, 14210,1.000,0, 18140,1.000,0 | |||
giwave18 ftgen 0, 0, 262144, 9, 1000,1.000,0, 2765,1.000,0, 5121,1.000,0, 7806,1.000,0, 10784,1.000,0 | |||
giwave19 ftgen 0, 0, 262144, 9, 1000,1.000,0, 2320,1.000,0, 4250,1.000,0, 6630,1.000,0, 9380,1.000,0 | |||
giwave20 ftgen 0, 0, 262144, 9, 1000,1.000,0, 1001,0.833,0, 1793,0.694,0, 1800,0.579,0, 2520,0.482,0, 2522,0.402,0, 2990,0.335,0, 2994,0.279,0, 3785,0.233,0, 3806,0.194,0, 4568,0.162,0, 4575,0.135,0, 5029,0.112,0, 5045,0.093,0, 6075,0.078,0, 5909,0.065,0, 6412,0.054,0, 6443,0.045,0, 7082,0.038,0, 7092,0.031,0, 7318,0.026,0, 7555,0.022,0 | |||
giwave21 ftgen 0, 0, 262144, 9, 1000,1.000,0, 1001,0.833,0, 1793,0.694,0, 1800,0.579,0, 2520,0.482,0, 2522,0.402,0, 2990,0.335,0, 2994,0.279,0, 3785,0.233,0, 3806,0.194,0, 4568,0.162,0, 4575,0.135,0, 5029,0.112,0, 5045,0.093,0, 6075,0.078,0, 5909,0.065,0, 6412,0.054,0, 6443,0.045,0, 7082,0.038,0, 7092,0.031,0, 7318,0.026,0, 7555,0.022,0 | |||
giwave22 ftgen 0, 0, 262144, 9, 1000,1.000,0, 1001,0.833,0, 1793,0.694,0, 1800,0.579,0, 2520,0.482,0, 2522,0.402,0, 2990,0.335,0, 2994,0.279,0, 3785,0.233,0, 3806,0.194,0, 4568,0.162,0, 4575,0.135,0, 5029,0.112,0, 5045,0.093,0, 6075,0.078,0, 5909,0.065,0, 6412,0.054,0, 6443,0.045,0, 7082,0.038,0, 7092,0.031,0, 7318,0.026,0, 7555,0.022,0 | |||
;================================================================================================================================================================================= | |||
gisine ftgen 0,0,4096,10,1 ;A SINE WAVE | |||
giRtosScale = 100 ;SCALING FACTOR APPLIED TO RATIOS WRITTEN TO GEN09 FUNCTION TABLE | |||
;FREQUENCY OF AUDIO OSCILLATOR WILL BE DIVIDED BY THIS VALUE | |||
;TOO LOW A VALUE HERE WILL RESULT IN QUANTISATION OF PARTIAL FREQUENCIES | |||
;TOO HIGH A VALUE WILL RESULT IN HIGHER PARTIALS BEING POORLY REPRESENTED IN THE TABLE, LEADING TO ALIASING | |||
gilfoshape ftgen 0, 0, 4096, 19, 0.5, 1, 180, 1 ;U-SHAPE PARABOLA (USED BY THE CHORUS EFFECT) | |||
gidurscal ftgen 0, 0, 128, -16, 10, 128, -4, 0.1 ;A FUNCTION USED TO RESCALE ENVELOPE DURATIONS ACCORDING TO NOTE PLAYED | |||
givelscal ftgen 0, 0, 128, -16, 0, 128, -4, 1 ;A FUNCTION USED TO REMAP MIDI VELOCITY VALUES - THE CURVATURE OF THIS FUNCTION CAN BE CHANGED TO TAKE ACCOUNT OF THE VARYING VELOCITY RESPONSE OF DIFFERENT MIDI KEYBOARDS | |||
gasend init 0 | |||
instr CreateGEN09Tables ;DERIVE GEN09 FUNCTION TABLE WAVEFORMS FROM THE GEN02 FUNCTION TABLES OF MODAL FREQUENCY RATIOS | |||
;A MACRO IS DEFINED THAT READS A SINGLE MODAL FERQUENCY RATIO FROM A TABLE | |||
#define PARTIAL(PartNum) | |||
# | |||
if $PartNum<=inratios then ;IF COUNTER IS WITHIN THE LIMITS OF THE NUMBER OF DEFINED MODAL FREQUENCY RATIOS... | |||
irto$PartNum table $PartNum-1,girtos$WaveNum ;...READ A VALUE FROM THE TABLE | |||
irto$PartNum = round(irto$PartNum*giRtosScale) ;MULTIPLY RATIO BY giRtosScale THEN INTEGERISE BYT ROUND TO THE NEAREST WHOLE NUMBER | |||
iamp$PartNum = iamp/(iampscal^($PartNum-1)) ;DERIVE AMPLITUDE VALUE FOR THIS PARTIAL | |||
else ;IF COUNTER IS BEYOND THE LIMITS OF THE NUMBER OF DEFINED MODAL FREQUENCY RATIOS... | |||
irto$PartNum = 0 ;SET RATIO TO ZERO | |||
iamp$PartNum = 0 ;SET PARTIAL STRENGTH TO ZERO | |||
endif | |||
# | |||
;A MACRO IS DEFINED THAT CREATES A GEN09 TABLE FROM MODAL FREQUENCY DATA | |||
#define WAVEFORM(WaveNum'AmpScal) | |||
# | |||
inratios = ftlen(girtos$WaveNum) | |||
iampscal = $AmpScal ;AMPLITUDE SCALING | |||
iamp = 1 ;PARTIAL STRENGTH OF FIRST PARTIAL | |||
$PARTIAL(1) ;MACRO EXPANDED FOR EACH PARTIAL... | |||
$PARTIAL(2) | |||
$PARTIAL(3) | |||
$PARTIAL(4) | |||
$PARTIAL(5) | |||
$PARTIAL(6) | |||
$PARTIAL(7) | |||
$PARTIAL(8) | |||
$PARTIAL(9) | |||
$PARTIAL(10) | |||
$PARTIAL(11) | |||
$PARTIAL(12) | |||
$PARTIAL(13) | |||
$PARTIAL(14) | |||
$PARTIAL(15) | |||
$PARTIAL(16) | |||
$PARTIAL(17) | |||
$PARTIAL(18) | |||
$PARTIAL(19) | |||
$PARTIAL(20) | |||
$PARTIAL(21) | |||
$PARTIAL(22) | |||
;GENERATE A GEN09 FUNCTION TABLE (ALL PHASES ARE SET TO ZERO) | |||
giwave$WaveNum ftgen 0,0,131072,9, irto1,iamp1,0, irto2,iamp2,0, irto3,iamp3,0, irto4,iamp4,0, irto5,iamp5,0, irto6,iamp6,0, irto7,iamp7,0, irto8,iamp8,0, irto9,iamp9,0, irto10,iamp10,0, irto11,iamp11,0, irto12,iamp12,0, irto13,iamp13,0, irto14,iamp14,0, irto15,iamp15,0, irto16,iamp16,0, irto17,iamp17,0, irto18,iamp18,0, irto19,iamp19,0, irto20,iamp20,0, irto21,iamp21,0, irto22,iamp22,0 | |||
;UNCOMMENT THE FOLLOWING LINE IF YOU WISH TO WRITE GENERATED TABLES TO A TEXT FILE FOR LATER USE | |||
;fprints "GEN09InharmonicTables.txt", "giwave$WaveNum%tftgen%t0, 0, 131072s, 9, %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0,%t %d,%5.3f,0%n", irto1,iamp1, irto2,iamp2, irto3,iamp3, irto4,iamp4, irto5,iamp5, irto6,iamp6, irto7,iamp7, irto8,iamp8, irto9,iamp9, irto10,iamp10, irto11,iamp11, irto12,iamp12, irto13,iamp13, irto14,iamp14, irto15,iamp15, irto16,iamp16, irto17,iamp17, irto18,iamp18, irto19,iamp19, irto20,iamp20, irto21,iamp21, irto22,iamp22 | |||
# | |||
;EXPAND MACRO FOR EACH WAVEFORM TO BE CREATED | |||
;ARG1 = A COUNTER, SHOULD CORRESPOND TO NUMBER APPENDED TO 'girtos' FOR THE TABLE HANDLE OF THE REQUIRED MODAL FREQUENCIES TABLE | |||
;ARG2 = PARTIAL STRENGTHS SCALING: 1=FLAT >1=HIGHER PARTIALS ARE INCREASINGLY ATTENUATED | |||
$WAVEFORM(1' 1.5) | |||
$WAVEFORM(2' 2) | |||
$WAVEFORM(3' 1.5) | |||
$WAVEFORM(4' 2) | |||
$WAVEFORM(5' 2) | |||
$WAVEFORM(6' 1) | |||
$WAVEFORM(7' 1.2) | |||
$WAVEFORM(8' 1.5) | |||
$WAVEFORM(9' 1) | |||
$WAVEFORM(10' 1) | |||
$WAVEFORM(11' 1) | |||
$WAVEFORM(12' 1.5) | |||
$WAVEFORM(13' 1) | |||
$WAVEFORM(14' 2) | |||
$WAVEFORM(15' 2) | |||
$WAVEFORM(16' 1.5) | |||
$WAVEFORM(17' 2) | |||
$WAVEFORM(18' 2) | |||
$WAVEFORM(19' 1) | |||
$WAVEFORM(20' 1.2) | |||
$WAVEFORM(21' 1.1) | |||
$WAVEFORM(22' 1.1) | |||
endin | |||
instr 2 ;SOUND GENERATING INSTRUMENT | |||
iInstr chnget "Instr" | |||
iAAtt chnget "AAtt" | |||
iADec chnget "ADec" | |||
iASus chnget "ASus" | |||
iARel chnget "ARel" | |||
iFAmt chnget "FAmt" | |||
iFDec chnget "FDec" | |||
iFSus chnget "FSus" | |||
iFRel chnget "FRel" | |||
iFShp chnget "FShp" | |||
iAAtt = (iAAtt^3)*(15-0.001)+0.001 | |||
iADec = (iADec^3)*(15-0.001)+0.001 | |||
iARel = (iARel^3)*(15-0.001)+0.001 | |||
iFDec = (iFDec^3)*(15-0.001)+0.001 | |||
iFRel = (iFRel^3)*(15-0.001)+0.001 | |||
icps cpsmidi ;READ CPS VALUE IN FROM MIDI KEYBOARD | |||
inum notnum ;READ MIDI NOTE NUMBER | |||
ivel veloc 0,1 ;READ MIDI VELOCITY | |||
ivel table ivel,givelscal,1 ;REMAP MIDI VELOCITY - SEE TABLE givelscal ABOVE | |||
iscale table inum,gidurscal ;DURATIONAL RESCALING ACCORDING TO NOTE PLAYED - HIGHER NOTE WILL DECAY QUICKER IN REFLECTION OF REAL-WORLD CHARACTERISTICS | |||
aenv expsegr 0.001,iAAtt,1,iADec*iscale,iASus+0.0001,iARel*iscale,0.0001 ;AMPLITUDE ENVELOPE WITH MIDI SENSING RELEASE SEGEMENT | |||
asig poscil 0.1*aenv*ivel,icps/giRtosScale,giwave1+iInstr-1 ;AUDIO OSCILLATOR poscil3 USED FOR IMPROVED FIDELITY OVER OTHER OSCILLATORS. FREQUENCY IS SCALED DOWN ACCORIND TO THE VALUE OF giRtosScale DEFINED IN THE HEADER | |||
;UNFORTUNATELY transegr DOESN'T SEEM TO WORK SO IN THE MEANTIME THIS RATHER PROTRACTED ALTERNATIVE WILL ACT AS A SUBSTITUTE | |||
iFlev1 limit cpsoct((iFAmt*10*ivel)+4),icps,sr/2 ;DERIVE STARTING FILTER VALUE IN CPS FROM FLTK KNOB (RANGE 0 TO 1). LIMIT IT BETWEEN FUNDEMENTAL FREQ. AND NYQUIST. | |||
iFsus = icps+cpsoct((iFSus*10)+4) ;DERIVE FILTER SUSTAIN VALUE IN CPS FROM FLTK KNOB VALUE (RANGE 0 - 1) | |||
iFend = icps ;FINAL FILTER ENVELOPE VALUE IS ALWAYS FUNDEMENTAL FREQUENCY | |||
krel release ;SENSE WHEN A NOTE HAS BEEN RELEASED. 1=NOTE_RELEAESD 0=NOTE_BEING_HELD | |||
if krel==0 then ;IF NOTE IS BEGIN HELD... | |||
kcf transeg iFlev1,iFDec*iscale,iFShp,iFsus ;CREATE ADS (ATTACK-DECAY-SUSTAIN) PART OF ENVELOPE | |||
else ;OTHERWISE (WE ARE IN THE RELEASE STAGE) | |||
ktrig changed krel ;INSTIGATE A SHORT REINITIALISATION TO DERIVE AN I-TIME VALUE OF THE CURRENT AMPLITUDE VALUE FOR THE STARTING POINT OF THE RELEASE ENVELOPE | |||
if ktrig==1 then ; | |||
reinit StartRel | |||
endif | |||
StartRel: | |||
kcf transeg i(kcf),iFRel*iscale,iFShp,iFend ;RELEASE STAGE OF THE ENVELOPE. 'i(kcf)' AS THE STARTING VALUE ENSURES THAT IT ALWAYS PICKS UP FROM WHERE THE 'ADS' PART OF THE ENVELOPE LEFT OFF. | |||
rireturn | |||
endif | |||
;asig butlp asig, kcf | |||
asig clfilt asig, kcf, 0, 2 ;LOW PASS FILTER THE SOUND (SUBTRACTIVE SYNTHESIS) | |||
gasend = gasend+asig | |||
endin | |||
instr 3 | |||
kChoOnOff chnget "ChoOnOff" | |||
gkChoMix chnget "ChoMix" | |||
gkChoRte chnget "ChoRte" | |||
gkChoDep chnget "ChoDep" | |||
if kChoOnOff==0 kgoto SKIP_CHORUS | |||
kporttime linseg 0,0.001,1 | |||
kporttime = kporttime/gkChoRte | |||
kdlt1 randomi ksmps/sr,gkChoDep,gkChoRte,1 | |||
kdlt1 portk kdlt1,kporttime | |||
adlt1 interp kdlt1 | |||
acho1 vdelay gasend,adlt1*1000,1*1000 | |||
kdlt2 randomi ksmps/sr,gkChoDep,gkChoRte,1 | |||
kdlt2 portk kdlt2,kporttime | |||
adlt2 interp kdlt2 | |||
acho2 vdelay gasend,adlt2*1000,1*1000 | |||
kpan1 randomi 0,1,gkChoRte,1 | |||
kpan2 randomi 0,1,gkChoRte,1 | |||
a1L,a1R pan2 acho1,kpan1 | |||
a2L,a2R pan2 acho2,kpan2 | |||
achoL = a1L+a2L | |||
achoR = a1R+a2R | |||
outs achoL*gkChoMix, achoR*gkChoMix | |||
SKIP_CHORUS: | |||
outs gasend, gasend ;SEND UN-CHORUSSED AUDIO TO THE OUTPUTS | |||
clear gasend | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i "CreateGEN09Tables" 0 0 | |||
i 3 0 [60*60*24*7] | |||
f 0 [60*60*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,91 @@ | |||
<Cabbage> | |||
form size(350, 125), caption("Metalizer"), colour("black"),pluginID("meta") | |||
image bounds(5, 5, 340, 90), colour("black"), outline("white") | |||
rslider bounds(15, 15, 70, 70), channel("depth"), text("Depth"), colour("lightgrey") range(0.2, 4, 0.2) | |||
rslider bounds(95, 15, 70, 70), channel("time"), text("Time"), colour("lightgrey") range(0.0001,8,.1) | |||
rslider bounds(170, 15, 70, 70), channel("mix"), text("Dry/Wet"), colour("lightgrey") range(0, 1, 0) | |||
checkbox pos(260, 15) text("On/Off"), channel("on_off") | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 64 | |||
nchnls = 2 | |||
;Author: Giorgio Zucco (2012) | |||
;(adapted from Metallic reverb from CsoundBook) | |||
opcode Metalizer,aa,aakk | |||
asig1,asig2,kdepth,krvt xin | |||
klp1 = 1/8*kdepth | |||
klp2 = 1/13*kdepth | |||
klp3 = 1/546*kdepth | |||
klp4 = 1/739*kdepth | |||
klp5 = 1/1360 *kdepth | |||
klp6 = 1/2654*kdepth | |||
aecho1 vcomb asig1, krvt, klp1, 1 | |||
aecho2 vcomb asig2, krvt, klp2, 1 | |||
aecho1 = asig1+aecho1 | |||
aecho2 = asig2+aecho2 | |||
aecho3 vcomb aecho1, krvt, klp3, 1 | |||
aecho4 vcomb aecho1, krvt, klp4, 1 | |||
aecho5 vcomb aecho2, krvt, klp5, 1 | |||
aecho6 vcomb aecho2, krvt, klp6, 1 | |||
aout1 = (aecho1+aecho3+aecho5)*.1 | |||
aout2 = (aecho2+aecho4+aecho6)*.1 | |||
xout aout1 ,aout2 | |||
endop | |||
instr 1 | |||
kdepth chnget "depth" | |||
ktime chnget "time" | |||
kOnOff chnget "on_off" | |||
kmix chnget "mix" | |||
a1,a2 ins | |||
if kOnOff = 1 then | |||
aout1,aout2 Metalizer a1,a2,kdepth,ktime | |||
elseif kOnOff = 0 then | |||
aout1 = 0 | |||
aout2 = 0 | |||
endif | |||
amix1 ntrpol aout1,a1,1-kmix | |||
amix2 ntrpol aout2,a2,1-kmix | |||
kpan1 jspline 1,1,5 | |||
kpan2 jspline 1,1,4 | |||
aleft,aright pan2 amix1,kpan1 | |||
aleft2,aright2 pan2 amix2,kpan2 | |||
outs (aleft+aleft2)*.5,(aright+aright2)*.5 | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i1 0 360000 | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,140 @@ | |||
Metronome.csd | |||
For the best timing accuracy, set ksmps = 1 | |||
Iain McCurdy, 2013 | |||
; level 1 - amplitude level for the main 'beat' (1st beat of the bar) | |||
; level 2 - amplitude level for other beats of the bar (subdivisions) | |||
; Subdiv. - subdivision of the bar. i.e. 4 for 4/4, 3 for 3/4 etc. | |||
; tone 1 - tone of the main beat (1st beat of the bar) | |||
; tone 2 - tone level for other beats of the bar (subdivisions) | |||
; duration - duration of each 'click' | |||
; width - stereo width of each click | |||
; to achieve a simple 1 click metronome, set level 2 to zero and subdiv to 1. | |||
A simple Cabbage metronome | |||
<Cabbage> | |||
form caption("Metronome"), size(770,140), pluginID("mtro") | |||
image bounds( 0, 0,770,140), colour(160, 70,20,100), shape("rounded"), outline("white"), line(4) | |||
checkbox bounds( 15, 20,130, 40), text("Start/Stop") channel("OnOff"), FontColour("White"), colour(250,250,100) value(0) | |||
rslider bounds(120, 13, 65, 65), text("Level 1"), colour(160, 70,20,100), trackercolour(250,250,200), FontColour("White"), channel("level1"), range(0, 1.00, 0.4, 0.5, 0.001) | |||
rslider bounds(180, 13, 65, 65), text("Level 2"), colour(160, 70,20,100), trackercolour(250,250,200), FontColour("White"), channel("level2"), range(0, 1.00, 0.1, 0.5, 0.001) | |||
rslider bounds(240, 13, 65, 65), text("Subdiv."), colour(160, 70,20,100), trackercolour(250,250,200), FontColour("White"), channel("subdiv"), range(1, 16, 3, 1, 1) | |||
rslider bounds(300, 13, 65, 65), text("Tone 1"), colour(160, 70,20,100), trackercolour(250,250,200), FontColour("White"), channel("tone1"), range(0, 4.00, 2.5) | |||
rslider bounds(360, 13, 65, 65), text("Tone 2"), colour(160, 70,20,100), trackercolour(250,250,200), FontColour("White"), channel("tone2"), range(0, 4.00, 1.56) | |||
rslider bounds(420, 13, 65, 65), text("Duration"), colour(160, 70,20,100), trackercolour(250,250,200), FontColour("White"), channel("dur"), range(0.003, 0.1, 0.012, 0.5, 0.00001) | |||
rslider bounds(480, 13, 65, 65), text("Width"), colour(160, 70,20,100), trackercolour(250,250,200), FontColour("White"), channel("width"), range(0, 2.00, 0) | |||
checkbox bounds(550, 18, 45, 45) channel("indicator"), FontColour("White"), colour(255, 50, 50) value(0), shape("ellipse") | |||
checkbox bounds(600, 18, 45, 45) channel("indicator2"), FontColour("White"), colour(100,255,100) value(0), shape("ellipse") | |||
hslider bounds( 10, 75,750, 40), colour(160, 70,20,100), trackercolour(160, 70, 20,100), FontColour("White"), channel("tempo"), range(10,1000, 90, 1, 1) textBox(1) | |||
label bounds(345, 110, 80, 12), text("Tempo [BPM]"), fontcolour("white") | |||
groupbox bounds(655, 25,1030, 520), colour(160, 70,20,100), line(0), popup(1), plant("Large LEDs"){ | |||
checkbox bounds( 10, 10,500,500) channel("indicator"), FontColour("White"), colour(255, 50, 50) value(0), shape("ellipse") | |||
checkbox bounds(520, 10,500,500) channel("indicator2"), FontColour("White"), colour(100,255,100) value(0), shape("ellipse") | |||
} | |||
label bounds( 10,120, 200, 12), text("Author: Iain McCurdy |2013|"), FontColour("silvers") | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-dm0 -n -+rtmidi=null -M0 | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 16 ; for maximum timing accuracy set ksmps = 1 | |||
nchnls = 2 | |||
0dbfs = 1 ;MAXIMUM AMPLITUDE | |||
gistrt ftgen 0,0,8,-2, 200, 200, 2500, 5000, 5000 | |||
giend ftgen 0,0,8,-2, 20, 1000, 20, 20, 1000 | |||
gisine ftgen 0,0,4096,10,1 ; sine wave (used by the audio oscillator) | |||
gasend init 0 ; global variable used to send audio to the 'stereo' instrument | |||
gibar ftgen 0,0,64,-2,1 ; bar structure basically a '1' followed by 63 zeroes, '1' indicating the first neat of a bar and zero indicating any other beat | |||
instr 1 | |||
kOnOff chnget "OnOff" | |||
kdur chnget "dur" | |||
ksubdiv chnget "subdiv" | |||
ktone1 chnget "tone1" | |||
ktone2 chnget "tone2" | |||
klevel1 chnget "level1" | |||
klevel2 chnget "level2" | |||
kstrt tablei ktone1,gistrt | |||
kend tablei ktone1,giend | |||
kstrt2 tablei ktone2,gistrt | |||
kend2 tablei ktone2,giend | |||
; restart metronome if subdiv changes to ensure timing accuracy | |||
ktrig changed ksubdiv,kOnOff | |||
if ktrig==1 then | |||
reinit RESTART | |||
endif | |||
RESTART: | |||
kbeat init 0 ; initialise beat position (0 = first beat of the bar) | |||
if kOnOff==1 then | |||
gktempo chnget "tempo" | |||
kmetro metro gktempo/60 ; bar metronome | |||
if kmetro=1 then ; if a beat is occuring... | |||
ktype table kbeat,gibar ;1=bar 0=beat ; read if this is a first beat of a bar or not (1=first beat, 0=any other) | |||
if ktype=1 then ; if first beat of a bar... | |||
event "i",2,0,kdur,kstrt,kend,klevel1,1 ; ... call metronome click as if 1st beat (p7 = 1 = flash indicator) | |||
else ; otherwise (must be aby other beat of a bar)... | |||
event "i",2,0,kdur,kstrt2,kend2,klevel2,0 ; ...call metronome click as if any other beat of a bar (p7 = 0 = don't flash indicator) | |||
endif | |||
kbeat wrap kbeat+1, 0, ksubdiv ; increment beat position but wrap around to zero if final beat of a bar has already been reacxhed | |||
endif | |||
endif | |||
endin | |||
instr 2 ; produce metronome sound (this instrument will be called repeatedly) | |||
iwidth chnget "width" | |||
acps transeg p4,p3,-7,p5 ; pitch of oscillator (a quickly decaying exponential curve) start='tone 1', end='tone 2' | |||
aenv transeg 1,p3,-7,0 ; amplitude of oscillator (a quickly decaying exponential curve) | |||
asig oscili p6,acps,gisine ; audio oscillator | |||
amod oscili 3,200,gisine ; modulation signal | |||
asig = asig*amod ; ring modulate original audio signal | |||
asig butbp asig*10,100,100 ; bandpass filter the sound to attenuate lows and highs | |||
asig = asig*aenv ; apply envelope | |||
outs asig,asig ; send audio to outputs | |||
gasend = gasend+asig*iwidth ; send a bit of the audio to the stereo-ifying instrument | |||
event_i "i",5-p7,0,0.08 ; flash indicator (call instrument 4 for 0.1 duration) | |||
endin | |||
instr 3 ; 'stereo'ify the sound | |||
aL delay gasend, rnd(0.01) ; slightly delay audio by a random amount to create left channel audio | |||
aR delay gasend, rnd(0.01) ; slightly delay audio by a random amount to create right channel audio | |||
aL butlp aL,cpsoct(rnd(10)) ; filter left channel (random cutoff frequency) | |||
aR butlp aR,cpsoct(rnd(10)) ; filter right channel (random cutoff frequency) | |||
outs aL,aR ; send audio to outputs | |||
gasend = 0 ; clear global send variable | |||
endin | |||
instr 4 ; flash red indicator | |||
gkrelease release ; krelease=0 while note is active, =1 when note ends (final k-cycle) | |||
chnset 1-gkrelease,"indicator" ; turn indicator on or off | |||
endin | |||
instr 5 ; flash green indicator | |||
gkrelease release ; krelease=0 while note is active, =1 when note ends (final k-cycle) | |||
chnset 1-gkrelease,"indicator2" ; turn indicator on or off | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [60*60*24*7] | |||
i 3 0 [60*60*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,198 @@ | |||
<Cabbage> | |||
form caption("Percussive flute synthesizer"), size(760, 320), pluginID("per1") | |||
xypad bounds(0, 0, 250, 210), channel("chanx", "chany"), text("Modulation"), rangex(1,50,6.72), rangey(0,1,0.43) | |||
groupbox bounds(260, 0, 240, 100), text("ADSR"), plant("adsr"){ | |||
rslider bounds(.0, .3, .6, .6), text("A"), colour("orange"), channel("att"), range(0.01,3, .5) | |||
rslider bounds(.25, .3, .6, .6), text("D"), colour("orange"), channel("dec"), range(0,1, .5) | |||
rslider bounds(.5, .3, .6, .6), text("S"), colour("orange"), channel("sus"), range(0,1,.8) | |||
rslider bounds(.75, .3, .6, .6), text("R"), colour("orange"), channel("rel"), range(0.01,3, .2) | |||
} | |||
groupbox bounds(260, 105, 240, 100), text("Tune"), plant("tune"){ | |||
rslider bounds(.0, .3, .6, .6), text("Semi"), colour("white "), channel("semi"), range(-24,12,0) | |||
rslider bounds(.25, .3, .6, .6), text("Detune"), colour("white "), channel("detune"), range(-1,1,0) | |||
rslider bounds(.5, .3, .6, .6), text("Cutoff"), colour("white "), channel("cutoff"), range(200,12000,3000) | |||
rslider bounds(.75, .3, .6, .6), text("Spread"), colour("white "), channel("spread"), range(0,1,.5) | |||
} | |||
groupbox bounds(510,0, 240, 100), text("LFO/Stereo chorus"), plant("mod"){ | |||
rslider bounds(.0, .3, .6, .6), text("Lfo amp"), colour("white "), channel("lfoamp"), range(0,5, 0) | |||
rslider bounds(.25, .3, .6, .6), text("Lfo rate"), colour("white "), channel("lforate"), range(0,10, 0) | |||
rslider bounds(.5, .3, .6, .6), text("depth"), colour("white "), channel("chdepth"), range(0,10,0) | |||
rslider bounds(.75, .3, .6, .6), text("rate"), colour("white "), channel("chrate"), range(0,10,0) | |||
} | |||
groupbox bounds(510,105, 240, 100), text("Reverb"), plant("rev"){ | |||
rslider bounds(0, .3, .6, .6), text("level"), colour("dodgerblue"), channel("level"), range(0,1,0) | |||
rslider bounds(0.25, .3, .6, .6), text("size"), colour("dodgerblue"), channel("size"), range(.1,.99,.5) | |||
checkbox bounds(.55, .40, .60, .30),channel("onoff"), text("On/Off"), value(0) | |||
} | |||
keyboard bounds(0, 220, 750, 70) | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-n -d -m0d -+rtmidi=NULL -M0 | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
;Author: Giorgio Zucco (2012) | |||
;turnon 10 ;chorus | |||
;turnon 12 ;reverb | |||
ga1 init 0 | |||
ga2 init 0 | |||
garev1 init 0 | |||
garev2 init 0 | |||
;******************************************* | |||
opcode StChorus,aa,aakkkk | |||
asigr,asigl,kdepth,kdepthl,krate,kratel xin ;legge i parametri in entrata | |||
;ar,al StChorus asigr,asigl,kdepth,kdepthl,krate,kratel | |||
k1ch randi kdepth/2,krate,1 | |||
ar1 vdelay3 asigr,kdepth/2+k1ch,10 | |||
k2ch randi kdepth/2,krate*0.9,.2 | |||
ar2 vdelay3 asigr,kdepth/2+k2ch,10 | |||
k3ch randi kdepth/2,krate*1.1,.2 | |||
ar3 vdelay3 asigr,kdepth/2+k3ch,10 | |||
k4ch randi kdepth/2,krate*1.3,.1 | |||
ar4 vdelay3 asigr,kdepth/2+k4ch,10 | |||
k1chl randi kdepthl/2,kratel,1 | |||
ar1l vdelay3 asigl,kdepthl/2+k1chl,10 | |||
k2chl randi kdepthl/2,kratel*0.9,.2 | |||
ar2l vdelay3 asigl,kdepthl/2+k2chl,10 | |||
k3chl randi kdepthl/2,kratel*1.1,.2 | |||
ar3l vdelay3 asigl,kdepthl/2+k3chl,10 | |||
k4chl randi kdepthl/2,kratel*1.3,.1 | |||
ar4l vdelay3 asigl,kdepthl/2+k4chl,10 | |||
aL = (ar1+ar2+ar3+ar4)/2 | |||
aR = (ar1l+ar2l+ar3l+ar4l)/2 | |||
xout aL,aR ; write output | |||
endop | |||
;*********************************************** | |||
instr 1 | |||
iatt chnget "att" | |||
idec chnget "dec" | |||
isus chnget "sus" | |||
irel chnget "rel" | |||
kdet chnget "detune" | |||
ksemi chnget "semi" | |||
kcut chnget "cutoff" | |||
kspread chnget "spread" | |||
klfoamp chnget "lfoamp" | |||
klforate chnget "lforate" | |||
kindex chnget "fmamp" | |||
kfmrate chnget "fmrate" | |||
kcutoff chnget "cutoff" | |||
kreso chnget "resonance" | |||
kc1 chnget "chanx" | |||
kc2 chnget "chany" | |||
;midi | |||
imidinn notnum | |||
iamp ampmidi 1 | |||
kbend pchbend 0,2 ;pitch bend | |||
kfreq1 = cpsmidinn(imidinn+kbend+int(ksemi)) ;controllo midi | |||
kfreq2 = cpsmidinn(imidinn+kbend+int(ksemi)+kdet) | |||
ifn1 = 1 | |||
ifn2 = 1 | |||
ifn3 = 1 | |||
ifn4 = 1 | |||
ivfn = 1 | |||
asig1 fmpercfl iamp, kfreq1,kc1,kc2,klfoamp,klforate,ifn1,ifn2,ifn3,ifn4,ivfn | |||
asig2 fmpercfl iamp, kfreq2,kc1,kc2,klfoamp,klforate,ifn1,ifn2,ifn3,ifn4,ivfn | |||
afl1 clfilt asig1,kcutoff,0,4 | |||
afl2 clfilt asig2,kcutoff,0,4 | |||
;master | |||
al = ((afl1 * kspread) + (afl2 * (1 - kspread))) *.2 | |||
ar = ((afl1 * (1-kspread)) + (afl2 * kspread)) *.2 | |||
aoutL clip al,0,0dbfs | |||
aoutR clip ar,0,0dbfs | |||
kadsr mxadsr iatt,idec,isus,irel | |||
outs (aoutL*kadsr),(aoutR*kadsr) | |||
vincr ga1,(aoutL*kadsr) | |||
vincr ga2,(aoutR*kadsr) | |||
vincr garev1,(aoutL*kadsr) | |||
vincr garev2,(aoutR*kadsr) | |||
endin | |||
;stereo chorus | |||
instr 10 | |||
k1 chnget "chdepth" | |||
k2 chnget "chrate" | |||
kfxdepth portk k1,.01 | |||
kfxrate portk k2,.01 | |||
acho1,acho2 StChorus ga1,ga2,kfxdepth,kfxdepth*.8,kfxrate,kfxrate*.8 | |||
outs acho1,acho2 | |||
clear ga1,ga2 | |||
endin | |||
instr 12 ;reverb | |||
ktrig chnget "onoff" | |||
klevel chnget "level" | |||
ksize chnget "size" | |||
if ktrig = 1 then | |||
al,ar reverbsc garev1,garev2,ksize,16000,sr,0 | |||
adc1 dcblock2 al | |||
adc2 dcblock2 ar | |||
kpan1 randomi 0,1,4 | |||
kpan2 randomi 0,1,8 | |||
aout1,aout2 pan2 adc1,kpan1 | |||
aout3,aout4 pan2 adc2,1-kpan2 | |||
asum1 = (aout1+aout2)*klevel | |||
asum2 = (aout3+aout4)*klevel | |||
else | |||
asum1 = 0 | |||
asum2 = 0 | |||
endif | |||
outs asum1,asum2 | |||
clear garev1,garev2 | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
; sine wave. | |||
f 1 0 32768 10 1 | |||
i1 0 36000 | |||
i10 0 36000 | |||
i12 0 36000 | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,59 @@ | |||
<Cabbage> | |||
form caption("Pink Noise"), size(230, 80), pluginID("pnse") | |||
image bounds( 0, 0,230, 80), colour("pink"), shape("rounded"), outline("red"), line(4) | |||
checkbox bounds( 20, 10, 80, 15), text("On/Off"), channel("onoff"), value(1), fontcolour("black"), colour("yellow") | |||
combobox bounds( 20, 40, 70, 20), channel("method"), value(1), text("Gardner", "Kellet", "Kellet 2") | |||
rslider bounds(100, 10, 60, 60), text("Amplitude"), channel("amp"), range(0, 1, 0.5, 0.5, 0.001), fontcolour("black"), trackercolour("red") | |||
rslider bounds(160, 10, 60, 60), text("N.Bands"), channel("numbands"), range(4, 32, 20, 1, 1), fontcolour("black") , trackercolour("red") | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-dm0 -n -+rtmidi=null -M0 | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 64 | |||
nchnls = 2 | |||
0dbfs = 1 ;MAXIMUM AMPLITUDE | |||
massign 0,0 | |||
instr 1 | |||
konoff chnget "onoff" ;read in on/off switch widget value | |||
if konoff==0 goto SKIP ;if on/off switch is off jump to skip label | |||
kmethod chnget "method" | |||
kmethod = kmethod - 1 | |||
knumbands chnget "numbands" | |||
kamp chnget "amp" | |||
ktrig changed kmethod, knumbands ;GENERATE BANG (A MOMENTARY '1') IF ANY OF THE INPUT VARIABLES CHANGE | |||
if ktrig==1 then ;IF AN I-RATE VARIABLE HAS CHANGED | |||
reinit UPDATE ;BEGIN A REINITIALISATION PASS FROM LABEL 'UPDATE' | |||
endif ;END OF CONDITIONAL BRANCH | |||
UPDATE: ;LABEL CALLED 'UPDATE' | |||
if kmethod=0 then ;IF GARDNER METHOD HAS BEEN CHOSEN... | |||
asigL pinkish kamp, i(kmethod), i(knumbands) ;GENERATE PINK NOISE | |||
asigR pinkish kamp, i(kmethod), i(knumbands) ;GENERATE PINK NOISE | |||
else ;OTHERWISE (I.E. 2ND OR 3RD METHOD HAS BEEN CHOSEN) | |||
anoise unirand 2 ;WHITE NOISE BETWEEN ZERO AND 2 | |||
anoise = (anoise-1) ;OFFSET TO RANGE BETWEEN -1 AND 1 | |||
asigL pinkish anoise, i(kmethod) ;GENERATE PINK NOISE | |||
asigR pinkish anoise, i(kmethod) ;GENERATE PINK NOISE | |||
asigL = asigL * kamp ;RESCALE AMPLITUDE WITH gkpinkamp | |||
asigR = asigR * kamp ;RESCALE AMPLITUDE WITH gkpinkamp | |||
endif ;END OF CONDITIONAL | |||
rireturn ;RETURN FROM REINITIALISATION PASS | |||
outs asigL,asigR ;SEND AUDIO SIGNAL TO OUTPUT | |||
SKIP: ;A label. Skip to here is on/off switch is off | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [60*60*24*7] ;instrument that reads in widget data | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,203 @@ | |||
; Rhythmicon.csd | |||
; Written by Iain McCurdy, 2013. | |||
; Recreation of Henry Cowell and Leon Theremin's Rhythmicon instrument (http://en.wikipedia.org/wiki/Rhythmicon) | |||
; CONTROLS | |||
; -------- | |||
; BASE -- note number of the fundemental (lowest note) | |||
; RATE -- base rate (same as rate for fundemental) | |||
; LEVEL -- output level | |||
; DESCRIPTION | |||
; ----------- | |||
; Each note above the fundemental (C3) divides the base rate increasingly according to the arithmetic progression: 2,3,4,5... | |||
; Therefore if C3 plays crotchets (quarter notes), C#3 plays quavers (eighth notes), D3 triplets and so on. | |||
; The pitches of each note (in cycles per second) follow a simlar progression. | |||
; If C3 plays a 200Hz tone, C#3 plays 400Hz, D 600Hz and so on. | |||
; The 17th note (E4) does not play a note but instead engages a syncopation effect. | |||
; I have been unable to find a clear technical specification of how this was implemented but have nonetheless made my 'best guess'. | |||
<Cabbage> | |||
form caption("...") size(159, 180), pluginID("basl") | |||
label bounds( 5, 3, 22, 22), text("R"), fontcolour(red) | |||
label bounds( 20, 5, 22, 22), text("H"), fontcolour(yellow) | |||
label bounds( 35, 2, 22, 22), text("Y"), fontcolour(orchid) | |||
label bounds( 50, 4, 22, 22), text("T"), fontcolour(LightGreen) | |||
label bounds( 65, 2, 22, 22), text("H"), fontcolour(OrangeRed) | |||
label bounds( 80, 6, 22, 22), text("M"), fontcolour(orange) | |||
label bounds( 99, 1, 22, 22), text("I"), fontcolour(SkyBlue) | |||
label bounds(110, 4, 22, 22), text("C"), fontcolour(Tomato) | |||
label bounds(125, 1, 22, 22), text("O"), fontcolour(LightGreen) | |||
label bounds(140, 3, 22, 22), text("N"), fontcolour(violet) | |||
label bounds( 81, 24, 100, 8), text("Iain McCurdy [2013]"), FontColour("white") | |||
rslider bounds( 3, 45, 55, 55), channel("base"), textBox(1), range(0, 127,36, 1,1),fontcolour(138, 54, 15),colour(orange), trackercolour(orange) | |||
label bounds( 19, 34, 30, 10), text("BASE"), fontcolour(white) | |||
rslider bounds( 52, 45, 55, 55), channel("rate"), textBox(1), range(0.1, 5.00, 0.5, 0.5, 0.01),fontcolour(138, 54, 15),colour(orange), trackercolour(orange) | |||
label bounds( 68, 34, 30, 10), text("RATE"), fontcolour(white) | |||
rslider bounds(102, 45, 55, 54), channel("level"), textBox(1), range(0, 1.00, 0.5, 0.5, 0.01),fontcolour(138, 54, 15),colour(orange), trackercolour(orange) | |||
label bounds(115, 34, 30, 10), text("LEVEL"), fontcolour(white) | |||
checkbox bounds( 0, 101, 9, 10), channel("k1") value(0) shape(square) colour(yellow) | |||
checkbox bounds( 9, 101, 10, 10), channel("k2") value(0) shape(square) colour(yellow) | |||
checkbox bounds( 19, 101, 9, 10), channel("k3") value(0) shape(square) colour(yellow) | |||
checkbox bounds( 28, 101, 10, 10), channel("k4") value(0) shape(square) colour(yellow) | |||
checkbox bounds( 38, 101, 10, 10), channel("k5") value(0) shape(square) colour(yellow) | |||
checkbox bounds( 48, 101, 8, 10), channel("k6") value(0) shape(square) colour(yellow) | |||
checkbox bounds( 56, 101, 10, 10), channel("k7") value(0) shape(square) colour(yellow) | |||
checkbox bounds( 66, 101, 8, 10), channel("k8") value(0) shape(square) colour(yellow) | |||
checkbox bounds( 74, 101, 10, 10), channel("k9") value(0) shape(square) colour(yellow) | |||
checkbox bounds( 84, 101, 9, 10), channel("k10") value(0) shape(square) colour(yellow) | |||
checkbox bounds( 93, 101, 10, 10), channel("k11") value(0) shape(square) colour(yellow) | |||
checkbox bounds(103, 101, 9, 10), channel("k12") value(0) shape(square) colour(yellow) | |||
checkbox bounds(112, 101, 9, 10), channel("k13") value(0) shape(square) colour(yellow) | |||
checkbox bounds(121, 101, 10, 10), channel("k14") value(0) shape(square) colour(yellow) | |||
checkbox bounds(131, 101, 9, 10), channel("k15") value(0) shape(square) colour(yellow) | |||
checkbox bounds(140, 101, 10, 10), channel("k16") value(0) shape(square) colour(yellow) | |||
checkbox bounds(150, 101, 10, 10), channel("k17") value(0) shape(square) colour(red) | |||
keyboard bounds(-13, 110, 450, 70) | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-dm0 -n -+rtmidi=null -M0 | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 64 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
massign 0,1 | |||
; Author: Iain McCurdy (2013) | |||
giAmpScl ftgen 0,0,-20000,-16, 1,100,0,1, 20000-100,-100,0.2 | |||
opcode SwitchPort, k, kkk | |||
kin,kUpPort,kDnPort xin | |||
kold init 0 | |||
kporttime = (kin<kold?kDnPort:kUpPort) | |||
kout portk kin, kporttime | |||
kold = kout | |||
xout kout | |||
endop | |||
instr 1 ; Listen for midi note changes. Turn lights on or off. Start the rhymicon of at least 1 note is held. | |||
inum notnum ; read in midi note number | |||
#define LightToggle(N) # ; define a macro to reduce code repetition | |||
if inum=(59+$N) then ; if note number played on the keyboard corresponds to 'this' toggle light... (note that first note will be C3 (59 + 1) | |||
ik$N chnget "k$N" ; read current value for 'this' toggle light (at i-time) | |||
chnset 1-ik$N,"k$N" ; write the inverse to it (i.e. toggle it) | |||
endif# | |||
$LightToggle(1) ; expand macro for all 16 layers | |||
$LightToggle(2) | |||
$LightToggle(3) | |||
$LightToggle(4) | |||
$LightToggle(5) | |||
$LightToggle(6) | |||
$LightToggle(7) | |||
$LightToggle(8) | |||
$LightToggle(9) | |||
$LightToggle(10) | |||
$LightToggle(11) | |||
$LightToggle(12) | |||
$LightToggle(13) | |||
$LightToggle(14) | |||
$LightToggle(15) | |||
$LightToggle(16) | |||
$LightToggle(17) | |||
kk1 chnget "k1" | |||
kk2 chnget "k2" | |||
kk3 chnget "k3" | |||
kk4 chnget "k4" | |||
kk5 chnget "k5" | |||
kk6 chnget "k6" | |||
kk7 chnget "k7" | |||
kk8 chnget "k8" | |||
kk9 chnget "k9" | |||
kk10 chnget "k10" | |||
kk11 chnget "k11" | |||
kk12 chnget "k12" | |||
kk13 chnget "k13" | |||
kk14 chnget "k14" | |||
kk15 chnget "k15" | |||
kk16 chnget "k16" | |||
ksum = kk1 + kk2 + kk3 + kk4 + kk5 + kk6 + kk7 + kk8 + kk9 + kk10 + kk11 + kk12 + kk13 + kk14 + kk15 + kk16 | |||
if ksum>0 then | |||
schedkwhen 1,0,1,2,0,-1 | |||
else | |||
turnoff2 2,0,1 | |||
endif | |||
endin | |||
instr 2 | |||
kporttime linseg 0,0.001,0.05 | |||
kbase chnget "base" ; base pitch as a note number | |||
krate chnget "rate" ; rate of pulsation of fundemental | |||
krate portk krate, kporttime | |||
klevel chnget "level" ; output amplitude level | |||
ksync chnget "k17" ; syncopation mode | |||
kBaseFrq = cpsmidinn(kbase) | |||
kBaseFrq portk kBaseFrq,kporttime | |||
iamp = 0.6 | |||
amix = 0 | |||
#define LAYER(N)# ; use a macro to reduce code repetition | |||
kk$N chnget "k$N" | |||
kk$N SwitchPort kk$N,kporttime*0.01,kporttime*0.5 | |||
ktrig metro krate * $N | |||
kn = $N ; layer number as a variable | |||
if ksync=1&&kn>1 then ; if syncopation is on and this isn't the first layer (syncopation irrelevant for first layer) | |||
ktrig vdelayk ktrig, (1/(krate*$N))/$N , 1/0.1 ; add a syncopation delay for the metronome trigger for this layer | |||
endif | |||
kenv loopseg $N/60, ktrig, 0, 0,0.025, 1,0.84/krate, 0,60, 0 ; retriggering envelope | |||
aenv interp kenv*kk$N ; interpolate to a-rate (for better smoothness) | |||
kcps = kBaseFrq*$N ; pitch for this layer (in cycles per second) | |||
kscl table kcps,giAmpScl ; amp scaling value (to quieten higher sounds) | |||
kamp = iamp*kscl ; apply on/off switch for this layer to its amplitude | |||
asig vco2 kamp,kcps,2,0.1 ; generate a tone (pulse wave) | |||
kcf limit cpsoct(octcps(kcps*3)*kenv),1,10000 ; filter envelope | |||
asig clfilt asig,kcf,0,2 ; butterworth lowpass filter the sound | |||
asig = asig*aenv ; apply amplitude envelope | |||
amix = amix + asig# ; add to 'mix' signal with the other layers | |||
$LAYER(1) ; expand macro multiple times. Once for each layer | |||
$LAYER(2) | |||
$LAYER(3) | |||
$LAYER(4) | |||
$LAYER(5) | |||
$LAYER(6) | |||
$LAYER(7) | |||
$LAYER(8) | |||
$LAYER(9) | |||
$LAYER(10) | |||
$LAYER(11) | |||
$LAYER(12) | |||
$LAYER(13) | |||
$LAYER(14) | |||
$LAYER(15) | |||
$LAYER(16) | |||
xtratim 0.5 | |||
outs amix*klevel, amix*klevel | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [3600*24*7] ;read widgets | |||
;i 2 0 [3600*24*7] ;read widgets | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,379 @@ | |||
<Cabbage> | |||
form caption("Jean Claude Risset collection") size(552, 330), colour("black"),pluginID("jea1") | |||
rslider bounds(15, 10, 100, 100) channel("spread"), range(0,1,.5), caption("Spread"), colour("tomato"), midictrl(1, 1) | |||
rslider bounds(120, 10, 100, 100) channel("semi"), range(-24,12,-12), caption("Coarse"), colour("tomato") | |||
rslider bounds(225, 10, 100, 100) channel("detune"), range(-2,2,0), caption("Detune"), colour("tomato") | |||
rslider bounds(330, 10, 100, 100) channel("vibamp"), range(0,20,0), caption("Vib Amp"), colour("tomato") | |||
rslider bounds(435, 10, 100, 100) channel("vibrate"), range(0,20,0), caption("Vib rate"), colour("tomato") | |||
groupbox bounds(15, 120, 240, 100), text("ADSR amplitude"), plant("ADSR"){ | |||
rslider bounds(.0, .3, .6, .6), text("A"), colour("orange"), channel("att"), range(0.01,3, .5) | |||
rslider bounds(.25, .3, .6, .6), text("D"), colour("orange"), channel("dec"), range(0,1, .5) | |||
rslider bounds(.5, .3, .6, .6), text("S"), colour("orange"), channel("sus"), range(0,1,.8) | |||
rslider bounds(.75, .3, .6, .6), text("R"), colour("orange"), channel("rel"), range(0.01,3, .2) | |||
} | |||
;RissClar RissDrum RissFlute RissHarmon RissNoise RissOctave RissRing | |||
combobox bounds(280,120, 160, 20), channel("select"), value(1), text("clar","snare", "flute","harmon","noise","octave","ring") | |||
rslider bounds(280,150, 60, 60), text("Rev level"), colour("tomato"), channel("level"), range(0,1,.8) | |||
rslider bounds(350, 150, 60, 60), text("Rev size"), colour("tomato"), channel("size"), range(.1,.99,.7) | |||
checkbox bounds(420,150, 160, 30),channel("onoff"), text("Reverb On/Off"), value(0) | |||
keyboard pos(1, 240), size(550, 60) | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n -+rtmidi=null -M0 -b1024 -m0d | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 16 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
;Author: Giorgio Zucco (2012) | |||
ga1 init 0 | |||
ga2 init 0 | |||
;Risset opcodes | |||
;************************************************** | |||
opcode RissClar,a,kk | |||
gisine1 ftgen 0 ,0 ,512, 7, -1, 200, -.5, 112, .5 ,200, 1 | |||
gisine3 ftgen 0 , 0, 512, 9, 1, 1, 0 | |||
kveloc,knote xin | |||
kgate linenr kveloc,0,.2,.01 | |||
a1 linen 255,.085,.75,100 | |||
a1 poscil a1,knote,gisine3 | |||
a1 table a1+256,gisine1 | |||
xout a1*kgate | |||
endop | |||
;************************************************** | |||
opcode RissDrum,a,kk | |||
gitemp1 ftgen 0 , 0 ,512, 9 ,1, 1, 0 | |||
gitemp2 ftgen 0 , 0, 512, 5 ,4096 ,512, 1 | |||
gitemp3 ftgen 0 , 0, 512, 9 ,10 ,1 ,0, 16, 1.5, 0 ,22, 2 ,0, 23 ,1.5, 0 | |||
gitemp4 ftgen 0 , 0, 512, 9, 1, 1, 0 | |||
gitemp5 ftgen 0 , 0, 512, 5, 256, 512, 1 | |||
kveloc,knote xin | |||
kgate linenr kveloc/2, 0, .2, .01 | |||
i1 = 6000*.3 | |||
i2 = 500*.1 | |||
i3 = 1 | |||
i4 = 6000*.8 | |||
i5 = 500 | |||
a1 randi 6000,4000 | |||
a1 poscil a1,i3,gitemp2 | |||
a1 poscil a1,3000,gitemp1 | |||
a2 poscil i1,i3,gitemp2 | |||
a2 poscil a2,knote*.01,gitemp3 | |||
a3 poscil i4,i3,gitemp5 | |||
a3 poscil a3,knote,gitemp4 | |||
aout = (a1+a2+a3)*.0001 | |||
xout aout*kgate | |||
endop | |||
;************************************************** | |||
opcode RissGliss,a,ik | |||
gitemp1 ftgen 0 ,0, 8192, 10, 1 | |||
iamp,kfreq xin | |||
irise = .5 | |||
kenv1 expseg .01, irise, iamp*1200,1000-irise,1 | |||
k1 randi kfreq*.05, 1, .2/(1000) | |||
k2 randi kfreq*.25, .1, .3/(1000) | |||
a1 poscil kenv1, kfreq+k1+k2, gitemp1 | |||
kenv11 expseg .01, irise, iamp*.83*1200,1000-irise,1 | |||
k11 randi kfreq*.05*1.154, 1, .2/(1000) | |||
k12 randi kfreq*.25*1.154, .1, .3/(1000) | |||
a11 poscil kenv11, kfreq*1.154+k11+k12, gitemp1 | |||
kenv21 expseg .01, irise, iamp*.33*1200,1000-irise,1 | |||
k21 randi kfreq*.051*.417, 1, .2/(1000) | |||
k22 randi kfreq*.25*1.417, .1, .3/(1000) | |||
a21 poscil kenv21, kfreq*1.417+k21+k22, gitemp1 | |||
kenv31 expseg .01, irise, iamp*.67*1200,1000-irise,1 | |||
k31 randi kfreq*.05*1.604, 1, .2/(1000) | |||
k32 randi kfreq*.25*1.604, .1, .3/(1000) | |||
a31 poscil kenv31, kfreq*1.604+k31+k32, gitemp1 | |||
kenv41 expseg .01, irise, iamp*1200,1000-irise,1 | |||
k41 randi kfreq*.05*2.521, 1, .2/(1000) | |||
k42 randi kfreq*.25*2.521, .1, .3/(1000) | |||
a41 poscil kenv41, kfreq*2.521+k41+k42, gitemp1 | |||
kenv51 expseg .01, irise, iamp*.33*1200,1000-irise,1 | |||
k51 randi kfreq*.05*2.792, 1, .2/(1000) | |||
k52 randi kfreq*.25*2.792, .1, .3/(1000) | |||
a51 poscil kenv51, kfreq*2.792+k51+k52, gitemp1 | |||
kenv61 expseg .01, irise, iamp*.33*1200,1000-irise,1 | |||
k61 randi kfreq*.05*3.383, 1, .2/(1000) | |||
k62 randi kfreq*.25*3.383, .1, .3/(1000) | |||
a61 poscil kenv61, kfreq*3.383+k61+k62,gitemp1 | |||
a1=(a1+a11+a21+a31+a41+a51+a61)*.01 | |||
;kenv71 expseg .01, irise, 1, 100*.5, 1, 100*.5-irise, 1 | |||
;kdeclick linsegr 0,.1,1,.3,.5,0.001,.01 | |||
kdeclick linsegr 0.01, 0.01, 1, 0.33*1, 0 | |||
xout ((a1)*kdeclick)*.02 ; write output | |||
endop | |||
;************************************************** | |||
opcode RissFlute,a,kk | |||
gitemp1 ftgen 0 ,0, 512, 9 ,1 ,.26,0 | |||
gitemp2 ftgen 0 , 0, 512, 10, 1, .4, .2, .1, .1, .05 | |||
kamp,kfreq xin | |||
k1 randi kamp*.01,5 | |||
k1 = k1 + kamp | |||
k2 poscil k1,1/.24,gitemp1 | |||
k2 = k2 + .74 | |||
a1 poscil k2,kfreq,gitemp2 | |||
kdeclick linsegr 0.1, 0.01, 1, 0.33*1, 0 | |||
xout a1*kdeclick | |||
endop | |||
;************************************************** | |||
opcode RissHarmon,a,kk | |||
gisine ftgen 0 , 0, 1024, 10, 1 ,0, 0 ,0 , .7, .7, .7, .7 ,.7, .7 | |||
kveloc,knote xin | |||
kgate linenr kveloc,1,2,.01 | |||
i1 = .03 | |||
i2 = 2*.03 | |||
i3 = 3*.03 | |||
i4 = 4*.03 | |||
ampenv linenr 9,.01,1,.01 | |||
a1 poscil ampenv,knote,gisine | |||
a2 poscil ampenv,knote+i1,gisine | |||
a3 poscil ampenv,knote+i2,gisine | |||
a4 poscil ampenv,knote+i3,gisine | |||
a5 poscil ampenv,knote+i4,gisine | |||
a6 poscil ampenv,knote-i1,gisine | |||
a7 poscil ampenv,knote-i2,gisine | |||
a8 poscil ampenv,knote-i3,gisine | |||
a9 poscil ampenv,knote-i4,gisine | |||
aout = ((a1+a2+a3+a4+a5+a6+a7+a8+a9)*kgate)*.05 | |||
xout aout | |||
endop | |||
;************************************************** | |||
opcode RissNoise,a,ik | |||
gitemp1 ftgen 0 ,0, 8192, 10, 1 | |||
gitemp2 ftgen 0 ,0, 8192, 7, -1, 8192, 1 | |||
gitemp3 ftgen 0 ,0, 8192, 7, 1, 4096, 1, 0, -1, 4096, -1 | |||
gitemp4 ftgen 0 ,0, 8192, 21, 1 | |||
iveloc,knote xin | |||
kenv linsegr 0,.01,iveloc, 1, iveloc,2,iveloc*.2,.25, 0 | |||
aosc poscil kenv, 440, gitemp4 | |||
kenv expon 2, 1, .01 | |||
aosc2 butterbp aosc, knote, knote * kenv | |||
aosc2 butterbp aosc2, knote, knote * kenv | |||
aosc balance aosc2, aosc | |||
aosc = aosc * .7 | |||
xout aosc | |||
endop | |||
;************************************************** | |||
opcode RissOctave,a,kk | |||
gitemp2 ftgen 0 ,0, 128, 8, 0, .5, 0, 63.5, 1, 63.5, 0, .5 ,0 | |||
gisine ftgen 0 ,0, 4096,10,1 | |||
kamp,kfreq xin | |||
krate = .1 | |||
iphsoff = (65/5)*.01 | |||
ka1 = kamp | |||
iph1 = 0 | |||
kamp1 poscil ka1,krate,gitemp2,iph1 | |||
kfreq1 = kfreq | |||
asig1 poscil kamp1,kfreq1,gisine | |||
ka2 = kamp | |||
iph2 = iph1+iphsoff | |||
kamp2 poscil ka2,krate,gitemp2,iph2 | |||
kfreq2 = kfreq*2 | |||
asig2 poscil kamp2,kfreq2,gisine | |||
ka3 = kamp | |||
iph3 = iph2+iphsoff | |||
kamp3 poscil ka3,krate,gitemp2,iph3 | |||
kfreq3 = kfreq*3 | |||
asig3 poscil kamp3,kfreq3,gisine | |||
ka4 = kamp | |||
iph4 = iph3+iphsoff | |||
kamp4 poscil ka4,krate,gitemp2,iph4 | |||
kfreq4 = kfreq*4 | |||
asig4 poscil kamp4,kfreq4,gisine | |||
ka5 = kamp | |||
iph5 = iph4+iphsoff | |||
kamp5 poscil ka5,krate,gitemp2,iph5 | |||
kfreq5 = kfreq*5 | |||
asig5 poscil kamp5,kfreq5,gisine | |||
add = asig1+asig2+asig3+asig4+asig5 | |||
;kenv linseg 0,p3/2,1,p3/2,0 | |||
aout = add | |||
kdeclick linsegr 0.01, 0.01, 1, 0.33*1, 0 | |||
xout (aout*.5)*kdeclick | |||
endop | |||
;************************************************** | |||
opcode RissRing,a,kk | |||
gitemp2 ftgen 0 ,0, 512, 7, 0, 43, 1, 171, 1, 84, -1, 171, -1, 43, 0 | |||
gitemp3 ftgen 0 ,0, 512, 9, 1, 1, 0 | |||
kveloc,knote xin | |||
kgate linenr kveloc/2, 0, .2, .01 | |||
a1 expseg .2,2.3,1,1-.01,.001 | |||
a1 poscil a1,knote,gitemp3 | |||
a2 poscil 10000,1500,gitemp2 | |||
aout = (a1*a2)*.001 | |||
xout aout*kgate | |||
endop | |||
;************************************************** | |||
instr 1 | |||
;kselect init 1 | |||
;channel | |||
;kmodfreq chnget "mod" | |||
ksemi1 chnget "semi" | |||
kdetune chnget "detune" | |||
kspread chnget "spread" | |||
iatt chnget "att" | |||
idec chnget "dec" | |||
isus chnget "sus" | |||
irel chnget "rel" | |||
klfoamp chnget "vibamp" | |||
klforate chnget "vibrate" | |||
kselect chnget "select" | |||
;midi | |||
imidinn notnum | |||
iamp ampmidi 1 | |||
kbend pchbend 0,2 ;pitch bend | |||
;lfo | |||
klfo lfo klfoamp,klforate,2 | |||
kfreq1 = cpsmidinn(imidinn+kbend+int(ksemi1)) ;controllo midi | |||
kfreq2 = cpsmidinn(imidinn+kbend+kdetune+int(ksemi1)) | |||
if kselect = 1 then | |||
ariss1 RissClar iamp,kfreq1+klfo | |||
ariss2 RissClar iamp,kfreq2+klfo | |||
elseif kselect = 2 then | |||
ariss1 RissDrum iamp,kfreq1+klfo | |||
ariss2 RissDrum iamp,kfreq2+klfo | |||
elseif kselect = 3 then | |||
ariss1 RissFlute iamp,kfreq1+klfo | |||
ariss2 RissFlute iamp,kfreq2+klfo | |||
elseif kselect = 4 then | |||
ariss1 RissHarmon iamp,kfreq1+klfo | |||
ariss2 RissHarmon iamp,kfreq2+klfo | |||
elseif kselect = 5 then | |||
ariss1 RissNoise iamp,kfreq1+klfo | |||
ariss2 RissNoise iamp,kfreq2+klfo | |||
elseif kselect = 6 then | |||
ariss1 RissOctave iamp,kfreq1+klfo | |||
ariss2 RissOctave iamp,kfreq2+klfo | |||
elseif kselect = 7 then | |||
ariss1 RissRing iamp,kfreq1+klfo | |||
ariss2 RissRing iamp,kfreq2+klfo | |||
endif | |||
ktrig changed kselect | |||
if ktrig = 1 then | |||
reinit play | |||
endif | |||
play: | |||
;master | |||
aL clip ariss1,0,0dbfs | |||
aR clip ariss2,0,0dbfs | |||
aoutL = ((aL * kspread) + (aR * (1 - kspread))) *.5 | |||
aoutR = ((aL * (1-kspread)) + (aR * kspread)) *.5 | |||
kadsr mxadsr iatt,idec,isus,irel | |||
outs (aoutL*kadsr),(aoutR*kadsr) | |||
vincr ga1,aoutL*kadsr | |||
vincr ga2,aoutR*kadsr | |||
endin | |||
instr 10 ;reverb | |||
ktrig chnget "onoff" | |||
klevel chnget "level" | |||
ksize chnget "size" | |||
if ktrig = 1 then | |||
al,ar reverbsc ga1,ga2,ksize,16000,sr,0 | |||
asum1 dcblock2 al | |||
asum2 dcblock2 ar | |||
else | |||
asum1 = 0 | |||
asum2 = 0 | |||
endif | |||
outs asum1*klevel,asum2*klevel | |||
clear ga1,ga2 | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
f1 0 16384 10 1 | |||
;f0 3600 | |||
i1 0 36000 | |||
i10 0 36000 | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,339 @@ | |||
RubbedResonators.csd | |||
This example introduces a method of 'exciting' mode filters that creates an imitation of a resonant object being bowed or rubbed. The excitation signal consists of a stack of sine wave oscillators that match the number and frequencies of the mode filters being used. This arrangement can cause the mode filters to resonate with great intensity so the amplitudes of the sine wave oscillators should be kept low to prevent overloading. Additionally the frequency of each sine wave oscillator is individually modulated using a random 'jitter' function created using 'gaussi' (interpolating gaussian noise generator). This technique results is a shifting spectral response from the filters. Adjusting the rate and amplitude of this jitter function can imitate a variety of bowing and rubbing techniques. Increasing 'Jit.Dep.' while 'Jit.Rate' is kept low gives the impression of the resonator being rubbed with greater pressure. If both 'Jit.Dep.' and 'Jit.Rate' are high the impression is of the resonator begin brushed. | |||
If 'Q' is low then more of the character of the impulse sound (the sine wave oscillators) will be apparent (and therefore the jitter modulation will be more apparent). If 'Q' is higher then the character of the mode filters will dominate and modulation of the impulse sound frequencies will be less apparent. A key aspect of this instrument is that once the impulse sound is removed ('Impulse Amp.' is brought to minimum) the sound produced is solely the residual resonance of the mode filters, therefore any modulation within the sine wave oscillators becomes irrelevant. | |||
For brightness (damping) control to work properly modal ratios in their function table will need to be in ascending order. | |||
Chorus effect is disabled when 'Mix' is zero | |||
Number of partials in the chosen algorithm is printed to the GUI for the user's information. Algorithms with high numbers of partials will demand more CPU and lower polyphony will be possible. | |||
<Cabbage> | |||
form caption("Rubbed Resonators"), size(440, 320), pluginID("RubR") | |||
image pos(0, 0), size(440, 290), colour("Sienna"), shape("rounded"), outline("brown"), line(4) | |||
;IMPULSE | |||
groupbox bounds(10, 10, 260, 90), text("Impulse"), fontcolour("white"){ | |||
rslider bounds( 10, 35,60,60), text("Amp."), colour("Chocolate"), channel("ImpDB"), range(-70, 0, 0) | |||
rslider bounds( 60, 35,60,60), text("HPF"), colour("Chocolate"), channel("HPF"), range(20, 20000, 20, 0.5) | |||
rslider bounds(110, 35,60,60), text("LPF"), colour("Chocolate"), channel("LPF"), range(20, 20000, 20000, 0.5) | |||
rslider bounds(160, 35,60,60), text("Jit. Dep."), channel("JitDep"), colour("Chocolate"), range(0, 5, 0.4,0.5) | |||
rslider bounds(210, 35,60,60), text("Jit. Rate"), channel("JitRte"), colour("Chocolate"), range(0.01,100, 3,0.5) | |||
} | |||
;RESONATORS | |||
groupbox bounds(270, 10,160,180), text("Resonators"), fontcolour("white"){ | |||
label bounds(320, 40,120, 12), text("Instrument"), colour("white") | |||
combobox bounds(280, 55,140, 25), channel("sound"), value(4), text("Single", "Dahina", "Banyan", "Xylophone", "Tibetan Bowl 180mm", "Spinel Sphere", "Pot Lid", "Red Cedar Wood Plate", "Tubular Bell", "Redwood Wood Plate", "Douglas Fir Wood Plate", "Uniform Wooden Bar", "Uniform Aluminium Bar", "Vibraphone 1", "Vibraphone 2", "Chalandi Plates", "Tibetan Bowl 152mm", "Tibetan Bowl 140mm", "Wine Glass", "Small Handbell", "Albert Clock Bell", "Wood Block","Harmonic 10","Harmonic 20","Harmonic 30","Harmonic Odd 10","Harmonic Odd 20") | |||
rslider bounds(315, 85, 70, 30), text("N.Partials"), TextBox(1), channel("npartials"), range(1, 10000, 1, 1, 1) | |||
rslider bounds(270,125, 60, 60), text("Q"), colour("orange"), channel("Q"), range(50, 10000, 2000, 0.5) | |||
rslider bounds(320,125, 60, 60), text("Bright"), colour("orange"), channel("bright"), range(-4, 4, 0) | |||
rslider bounds(370,125, 60, 60), text("Gain"), colour("orange"), channel("gain"), range(0, 8, 1) | |||
} | |||
;POLYPHONY | |||
groupbox bounds( 10,100,100, 90), text("Polyphony"), fontcolour("white"){ | |||
button bounds( 20,125, 80, 20), text("poly","mono"), channel("monopoly"), value(0), fontcolour("lime") | |||
hslider bounds( 15,143, 90, 38), colour("chocolate"), channel("GlissTime"), range(0.005, 0.3, 0.1, 0.25, 0.001) | |||
label bounds( 32,174, 90, 12), text("Gliss Time") | |||
} | |||
;CHORUS | |||
groupbox bounds(110,100,160, 90), text("Chorus"), fontcolour("white"){ | |||
rslider bounds(110,125, 60, 60), text("Mix"), channel("ChoMix"), range(0, 1, 0.5), colour("yellow") | |||
rslider bounds(160,125, 60, 60), text("Depth"), channel("ChoDep"), range(0, 0.1, 0.01,0.5, 0.001), colour("yellow") | |||
rslider bounds(210,125, 60, 60), text("Rate"), channel("ChoRte"), range(0, 20, 0.96, 0.5), colour("yellow") | |||
} | |||
keyboard bounds(10, 195, 420, 85) | |||
image bounds(5, 295, 240, 22), colour(75, 85, 90, 100), plant("credit"){ | |||
label bounds(0.03, 0.15, .9, .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 ;MAXIMUM AMPLITUDE | |||
massign 0,2 ;MIDI DATA DIRECTED TO INSTRUMENT 2 | |||
;Author: Iain McCurdy (2012) | |||
;FUNCTION TABLES STORING MODAL FREQUENCY RATIOS------------------------------------------------------------------------------------------------------------------------------------------------ | |||
;single | |||
girtos1 ftgen 0,0,2, -2, 1,1 | |||
;dahina | |||
girtos2 ftgen 0,0,-6,-2, 1, 2.89, 4.95, 6.99, 8.01, 9.02 | |||
;banyan | |||
girtos3 ftgen 0,0,-6,-2, 1, 2.0, 3.01, 4.01, 4.69, 5.63 | |||
;xylophone | |||
girtos4 ftgen 0,0,-6,-2, 1, 3.932, 9.538, 16.688, 24.566, 31.147 | |||
;tibetan bowl (180mm) | |||
girtos5 ftgen 0,0,-7,-2, 1, 2.77828, 5.18099, 8.16289, 11.66063, 15.63801, 19.99 | |||
;spinel sphere with diameter of 3.6675mm | |||
girtos6 ftgen 0,0,-24,-2, 1, 1.026513174725, 1.4224916858532, 1.4478690202098, 1.4661959580455, 1.499452545408, 1.7891839345101, 1.8768994627782, 1.9645945254541, 1.9786543873113, 2.0334612432847, 2.1452852391916, 2.1561524686621, 2.2533435661294, 2.2905090816065, 2.3331798413917, 2.4567715528268, 2.4925556408289, 2.5661806088514, 2.6055768738808, 2.6692760296751, 2.7140956766436, 2.7543617293425, 2.7710411870043 | |||
;pot lid | |||
girtos7 ftgen 0,0,-6,-2, 1, 3.2, 6.23, 6.27, 9.92, 14.15 | |||
;red cedar wood plate | |||
girtos8 ftgen 0,0,-4,-2, 1, 1.47, 2.09, 2.56 | |||
;tubular bell | |||
girtos9 ftgen 0,0,-10,-2, 272/437, 538/437, 874/437, 1281/437, 1755/437, 2264/437, 2813/437, 3389/437, 4822/437, 5255/437 | |||
;redwood wood plate | |||
girtos10 ftgen 0,0,-4,-2, 1, 1.47, 2.11, 2.57 | |||
;douglas fir wood plate | |||
girtos11 ftgen 0,0,-4,-2, 1, 1.42, 2.11, 2.47 | |||
;uniform wooden bar | |||
girtos12 ftgen 0,0,-6,-2, 1, 2.572, 4.644, 6.984, 9.723, 12 | |||
;uniform aluminum bar | |||
girtos13 ftgen 0,0,-6,-2, 1, 2.756, 5.423, 8.988, 13.448, 18.680 | |||
;vibraphone 1 | |||
girtos14 ftgen 0,0,-6,-2, 1, 3.984, 10.668, 17.979, 23.679, 33.642 | |||
;vibraphone 2 | |||
girtos15 ftgen 0,0,-6,-2, 1, 3.997, 9.469, 15.566, 20.863, 29.440 | |||
;Chalandi plates | |||
girtos16 ftgen 0,0,-5,-2, 1, 1.72581, 5.80645, 7.41935, 13.91935 | |||
;tibetan bowl (152 mm) | |||
girtos17 ftgen 0,0,-7,-2, 1, 2.66242, 4.83757, 7.51592, 10.64012, 14.21019, 18.14027 | |||
;tibetan bowl (140 mm) | |||
girtos18 ftgen 0,0,-5,-2, 1, 2.76515, 5.12121, 7.80681, 10.78409 | |||
;wine glass | |||
girtos19 ftgen 0,0,-5,-2, 1, 2.32, 4.25, 6.63, 9.38 | |||
;small handbell | |||
girtos20 ftgen 0,0,-22,-2, 1, 1.0019054878049, 1.7936737804878, 1.8009908536585, 2.5201981707317, 2.5224085365854, 2.9907012195122, 2.9940548780488, 3.7855182926829, 3.8061737804878, 4.5689024390244, 4.5754573170732, 5.0296493902439, 5.0455030487805, 6.0759908536585, 5.9094512195122, 6.4124237804878, 6.4430640243902, 7.0826219512195, 7.0923780487805, 7.3188262195122, 7.5551829268293 | |||
;albert clock bell belfast | |||
;girtos21 ftgen 0,0,-22,-2, 2.043260,1.482916,1.000000,3.328848,4.761811,1.477056,0.612007,2.661295,1.002793,4.023776,0.254139,2.043916,4.032463,2.659438,4.775560,5.500494,3.331014,0.809697,2.391301, 0.254098,1.901476,2.366563 ;,0.614968,2.046543,1.814887,3.130744,2.484426,0.558874,0.801697,0.070870,3.617036,2.782656 | |||
girtos21 ftgen 0,0,-22,-2, 0.254098,0.254139,0.612007,0.809697,1.000000,1.002793,1.477056,1.482916,1.901476,2.043260,2.043916,3.331014,2.366563,2.391301,2.659438,2.661295,3.328848,4.023776,4.032463,4.761811,4.775560,5.500494 | |||
;wood block | |||
girtos22 ftgen 0,0,4,-2, 915/915,1540/915,1863/915,3112/915 | |||
;harmonic 10 | |||
girtos23 ftgen 0,0,-10,-2, 1,2,3,4,5,6,7,8,9,10 | |||
;harmonic 20 | |||
girtos24 ftgen 0,0,-20,-2, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 | |||
;harmonic 30 | |||
girtos25 ftgen 0,0,-30,-2, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 | |||
;harmonic odd 10 | |||
girtos26 ftgen 0,0,-10,-2, 1,3,5,7,9,11,13,15,17,19 | |||
;harmonic odd 20 | |||
girtos27 ftgen 0,0,-20,-2, 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39 | |||
seed 0 ;random number generators seeded from the system clock | |||
gasend init 0 ;initialise the global audio send variable | |||
gisine ftgen 0,0,4096,10,1 ;a sine wave | |||
;table that stores indicators for each active note. 1=active 0=inactive index_location=note_number | |||
giNoteActive ftgen 0,0,128,2,0 | |||
;-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
gkbright init 0 | |||
gasend init 0 | |||
;--UDOS-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
opcode SineVoice,a,kkkiiii | |||
kfreq,kjitdep,kjitrte,icount,invoices,irtos,isfn xin | |||
amix = 0 ;initialise audio mix variable (mixture of all sine wave oscillators) | |||
kjit gaussi kjitdep, 1, kjitrte ;jitter function (semitone deviation) | |||
irto table icount-1,irtos ;read the frequency ratio for this oscillator from the appropriate ratios table | |||
a1 oscili 1,semitone(kjit)*kfreq*irto,isfn ;create the oscillator | |||
if icount<invoices then ;if not all required oscillators have been created yet... | |||
amix SineVoice kfreq,kjitdep,kjitrte,icount+1,invoices,irtos,isfn ;call the udo again, with the incremented counter | |||
endif | |||
xout amix + a1 ;send mix of all oscillators back the the udo output | |||
endop | |||
opcode ModeVoice,a,akkkiii ;mode udo (k-rate base frequency) - used for non-midi mode | |||
ain,kfreq,kq,kdamp,icount,inmodes,irtos xin ;name input variables | |||
amix = 0 ;initialise audio mix variable (mixture of all mode filters) | |||
asig = 0 ;initialise audio for the mode filter in this iteration of the UDO. Only needed if only 1 mode is present. | |||
irto table icount-1,irtos ;read frequency ratio for current mode according to iteration counter | |||
kThisFreq = kfreq * irto ;derive modal frequency from product of ratio and base frequency | |||
if sr/kThisFreq>=$M_PI then | |||
asig mode ain, kThisFreq, kq ;create mode signal | |||
if kdamp>0 then | |||
kamp = ((inmodes-icount+1)^(-kdamp))*(kdamp+1) | |||
else | |||
kamp = icount^kdamp | |||
endif | |||
aamp interp kamp | |||
asig = asig*aamp | |||
if icount < inmodes then ;if all the modes in this current instrument have not yet been created... | |||
amix ModeVoice ain, kfreq,kq,kdamp,icount+1, inmodes,irtos ;...call modemodule udo again with incremented counter | |||
endif ;end of conditional branching | |||
endif | |||
xout amix+asig ;send all audio back to caller instrument | |||
endop ;end of udo | |||
;-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
instr 1 ;read in widgets (always on) | |||
gkQ chnget "Q" ;read in widgets | |||
kImpDB chnget "ImpDB" | |||
gkHPF chnget "HPF" | |||
gkLPF chnget "LPF" | |||
gkJitDep chnget "JitDep" | |||
gkJitRte chnget "JitRte" | |||
gkbright chnget "bright" | |||
gkgain chnget "gain" | |||
gkmonopoly chnget "monopoly" | |||
gkGlissTime chnget "GlissTime" | |||
gksound chnget "sound" | |||
gkChoMix chnget "ChoMix" | |||
gkChoRte chnget "ChoRte" | |||
gkChoDep chnget "ChoDep" | |||
gkImpAmp = ampdbfs(kImpDB) ;convert from dB value to amp value | |||
gkbright port gkbright,0.02 ;smooth changes using portamento | |||
gkgain port gkgain,0.02 ; | |||
ktrig changed gksound ;if sound combobox changes... | |||
if ktrig==1 then | |||
event "i",5,0,0.001 ;...call instrument 5 to update 'N.Partials' number box | |||
endif | |||
endin | |||
instr 2 ;MIDI TRIGGERED INSTRUMENT | |||
gkNoteTrig init 1 ;at the beginning of a new note set note trigger flag to '1' | |||
ibase cpsmidi ;read in midi note number as a cps value | |||
gkbase = ibase | |||
ivel ampmidi 1 ;read in midi note velocity as a value within the range 0 to 1 | |||
gkvel init ivel | |||
inum notnum ;read in midi note number as an integer (used for create a table of active notes flags) | |||
krelease release ;note release flag (0 = note held, 1 = note released) | |||
tablew 1-krelease,inum,giNoteActive ;write note release flag to table at the location corresponding to note number | |||
iactive active p1+1 | |||
if iactive==0||i(gkmonopoly)==0 then ;if polyphonic mode or if this is the first in a series of notes in monophonic mode... | |||
event_i "i",p1+1,0,3600,ibase,inum ;call instrument 3 with the appropriate p-fields | |||
endif | |||
endin | |||
instr 3 ;impulse and modal resonators instrument | |||
ktrig changed gksound | |||
if ktrig==1 then | |||
reinit RESTART_INSTRUMENT | |||
endif | |||
RESTART_INSTRUMENT: | |||
isound init i(gksound) | |||
if gkmonopoly==1 then | |||
/*monophonic*/ | |||
kporttime linseg 0,0.001,1 | |||
kbase portk gkbase,kporttime*gkGlissTime | |||
kactive active p1-1 | |||
kactive limit kactive,0,1 | |||
else | |||
/*polyphponic*/ | |||
kbase init p4 ;base frequency read from p4 | |||
kactive table p5,giNoteActive ;check whether the midi key corresponding to this note is being held or has been released (1 = held, 0 = released). this value will be used to control whether the impulse scound should be active or not. | |||
endif | |||
inum = p5 ;note number | |||
icount = 1 ;counter to count iterations for recursive udos for sine oscillators and mode filters (starts at zero) | |||
irtos = girtos1 + isound - 1 ;derive actual function table number for ratios according to 'sound' chosen | |||
invoices = ftlen(irtos) ;derive the number of voices needed for the 'sound' chosen | |||
kactivePort port kactive,0.05 ;smooth note active on/off switching | |||
ktrig changed gkNoteTrig ;if a new note is started... | |||
if ktrig==1 then | |||
reinit RESTART_ENVELOPE ;...reinitialise from the given label | |||
endif | |||
RESTART_ENVELOPE: ;if a new note is trigger reinitialisation from here occurs to start a new impulse buid-up envelope based on new velocity value | |||
ivel init i(gkvel) | |||
kenv linseg 0,(1-ivel)+0.01,ivel ;create an amplitude envelope for the impulse sound. impulse sound will be velocity sensitive and the attack time of this envelope will be proportionate to the note velocity also. | |||
rireturn | |||
ktrig changed gksound ; to fix bug where sound would not update in mono mode | |||
if ktrig==1 then | |||
reinit RESTART_INSTRUMENT2 | |||
endif | |||
RESTART_INSTRUMENT2: | |||
aSineMix SineVoice kbase,gkJitDep,gkJitRte,icount,invoices,irtos,gisine ;call sine oscillator udo (it will be recursively recalled within the udo the appropriate number of times according to invoices) | |||
aSineMix = aSineMix*0.002*kactivePort*kenv*gkImpAmp ;scale the mixture of sines audio signal | |||
aSineMix buthp aSineMix,gkHPF | |||
aSineMix butlp aSineMix,gkLPF | |||
amodes ModeVoice aSineMix,kbase,gkQ,gkbright,icount,invoices,irtos ;call sine oscillator udo (it will be recursively recalled within the udo the appropriate number of times according to invoices) | |||
amodes = (amodes*gkgain*0.2)/invoices ;scale the amplitude of the sound according to the number of modes in the chosen algorithm | |||
krms rms amodes ;track the amplitude of the sound as an rms value | |||
ithreshold = 0.0001 | |||
if krms<ithreshold&&kactive=0 then ;if sound has died away and key is inactive... | |||
turnoff ;turn instrument off | |||
endif | |||
xtratim 0.1 ;this is needed to prevent initialisation crashes, I'm not sure why | |||
outs amodes,amodes ;send mode filters output mixture to output and rescale according to the number of modes used | |||
gasend = gasend+amodes*gkChoMix | |||
gkNoteTrig = 0 ;reset new-note trigger (in case it was '1') | |||
endin | |||
instr 4 ;Chorus effect | |||
if gkChoMix==0 goto SKIP_CHORUS | |||
kporttime linseg 0,0.001,1 | |||
kporttime = kporttime/gkChoRte | |||
kdlt1 randomi ksmps/sr,gkChoDep,gkChoRte,1 | |||
kdlt1 portk kdlt1,kporttime | |||
adlt1 interp kdlt1 | |||
acho1 vdelay gasend,adlt1*1000,1*1000 | |||
kdlt2 randomi ksmps/sr,gkChoDep,gkChoRte,1 | |||
kdlt2 portk kdlt2,kporttime | |||
adlt2 interp kdlt2 | |||
acho2 vdelay gasend,adlt2*1000,1*1000 | |||
kpan1 randomi 0,1,gkChoRte,1 | |||
kpan2 randomi 0,1,gkChoRte,1 | |||
a1L,a1R pan2 acho1,kpan1 | |||
a2L,a2R pan2 acho2,kpan2 | |||
achoL = a1L+a2L | |||
achoR = a1R+a2R | |||
outs achoL, achoR | |||
clear gasend | |||
SKIP_CHORUS: | |||
endin | |||
instr 5 ;update 'Number of Partials' number box | |||
invoices = ftlen(girtos1+i(gksound)-1) ;derive the number of voices needed for the 'sound' chosen | |||
knvoices init invoices ;create krate version of invoices | |||
chnset knvoices,"npartials" ;send value to number box | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i 1 0 [60*60*24*7] | |||
i 4 0 [60*60*24*7] | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,128 @@ | |||
<Cabbage> | |||
form caption("Scantable synthesizer") size(552, 340), colour("black"),pluginID("sca1") | |||
rslider bounds(15, 10, 100, 100) channel("init"), range(50,59,50), caption("Initial"), colour("white"), midictrl(1, 1) | |||
rslider bounds(120, 10, 100, 100) channel("semi"), range(-24,12,-12), caption("Coarse"), colour("white") | |||
rslider bounds(225, 10, 100, 100) channel("detune"), range(-2,2,0), caption("detune"), colour("white") | |||
rslider bounds(330, 10, 100, 100) channel("cutoff"), range(60,22000,4500), caption("Lowpass"), colour("white") | |||
rslider bounds(435, 10, 100, 100) channel("spread"), range(0, 1, .5), caption("Stereo image"), colour("white") | |||
groupbox bounds(15, 120, 240, 100), text("ADSR amplitude"), plant("ADSR"){ | |||
rslider bounds(.0, .3, .6, .6), text("A"), colour("orange"), channel("att"), range(0.01,3, .5) | |||
rslider bounds(.25, .3, .6, .6), text("D"), colour("orange"), channel("dec"), range(0,1, .5) | |||
rslider bounds(.5, .3, .6, .6), text("S"), colour("orange"), channel("sus"), range(0,1,.8) | |||
rslider bounds(.75, .3, .6, .6), text("R"), colour("orange"), channel("rel"), range(0.01,3, .2) | |||
} | |||
groupbox bounds(270, 120, 130, 100), text("LFO"), plant("lfo"){ | |||
rslider bounds(.04, .3, .6, .6), text("Lfo Amp"), colour("white"), channel("lfoamp"), range(0,20, 0) | |||
rslider bounds(.5, .3, .6, .6), text("Lfo Rate"), colour("white"), channel("lforate"), range(.1,20, 0) | |||
} | |||
groupbox bounds(410, 120, 130, 100), text("LFO filter"), plant("lfofilter"){ | |||
rslider bounds(0.04, .3, .6, .6), text("Lfo Amp"), colour("white"), channel("lfoamp2"), range(0,2000, 0) | |||
rslider bounds(0.5, .3, .6, .6), text("Lfo Rate"), colour("white"), channel("lforate2"), range(0,20, 0) | |||
} | |||
keyboard pos(15, 240), size(520, 60) | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-d -n -+rtmidi=null -M0 -b1024 -m0d | |||
</CsOptions> | |||
<CsInstruments> | |||
; Initialize the global variables. | |||
sr = 44100 | |||
ksmps = 64 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
;Author: Giorgio Zucco (2012) | |||
;scantable | |||
gitemp ftgen 2000, 0, 128, -7, 1, 128, 1 | |||
gitemp ftgen 3000, 0, 128, -7, 0, 64, 100, 64, 0 | |||
gitemp ftgen 4000, 0, 128, -7, 1, 128, 1 | |||
gitemp ftgen 5000, 0, 128, -7, 0, 128, 0 | |||
gitemp ftgen 29, 0, 4096, 10, 1 | |||
;************************************************ | |||
instr 1 | |||
;channel | |||
kcondfn init 50 | |||
ksemi1 chnget "semi" | |||
kdetune chnget "detune" | |||
kcut chnget "cutoff" | |||
kreso chnget "reso" | |||
kspread chnget "spread" | |||
iatt chnget "att" | |||
idec chnget "dec" | |||
isus chnget "sus" | |||
irel chnget "rel" | |||
klfoamp chnget "lfoamp" | |||
klforate chnget "lforate" | |||
klfoamp2 chnget "lfoamp2" ;lfo x filter | |||
klforate2 chnget "lforate2" | |||
;midi | |||
imidinn notnum | |||
iamp ampmidi 1 | |||
kbend pchbend 0,2 ;pitch bend | |||
;lfo | |||
klfo lfo klfoamp,klforate,2 | |||
kfreq1 = cpsmidinn(imidinn+kbend+int(ksemi1))+klfo ;controllo midi | |||
kfreq2 = cpsmidinn(imidinn+kbend+kdetune+int(ksemi1))+klfo | |||
kcondfn chnget "init" | |||
ktrig changed kcondfn | |||
if ktrig = 1 then | |||
reinit play | |||
endif | |||
play: | |||
asig1 scantable iamp,kfreq1,i(kcondfn),2000,3000,4000,5000 | |||
asig2 scantable iamp,kfreq2,i(kcondfn),2000,3000,4000,5000 | |||
;filter | |||
klfofilter lfo klfoamp2,klforate2,3 | |||
afilt1 clfilt asig1,kcut+klfofilter,0,8 | |||
afilt2 clfilt asig2,kcut+klfofilter,0,8 | |||
;master | |||
aL clip afilt1,0,0dbfs | |||
aR clip afilt2,0,0dbfs | |||
aoutL = ((aL * kspread) + (aR * (1 - kspread))) *.5 | |||
aoutR = ((aL * (1-kspread)) + (aR * kspread)) *.5 | |||
kadsr madsr iatt,idec,isus,irel | |||
outs aoutL*kadsr,aoutR*kadsr | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
;Initial Condition/State | |||
f50 0 128 7 0 30 0 2 1 2 0 30 0 30 0 2 -1 2 0 30 0 | |||
f51 0 128 7 0 30 0 2 1 2 0 30 0 | |||
f52 0 128 10 1 0 1 0 1 | |||
f53 0 128 10 1 .9 .8 .7 .6 .5 .4 .3 .2 | |||
f54 0 128 10 1 0 2 1 0 0 1 0 2 1 | |||
f55 0 128 10 1 1 0 1 2 1 0 1 2 1 0 | |||
f56 0 128 7 0 128 0 | |||
f57 0 128 7 0 64 1 64 0 | |||
f58 0 128 10 1 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 | |||
f59 0 128 7 0 32 1 32 0 32 1 32 0 | |||
;f0 3600 | |||
i1 0 36000 | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,189 @@ | |||
StringFeedback.csd - an emulation of a feeding back vibrating string | |||
------------------ | |||
Amplifier | |||
--------- | |||
Feedback - signal that is fed back into the vibrating string model. If a particular note doesn't sound, boost this! | |||
Drive - overdrive level | |||
Sustain - sustain of the string vibrations. Inverse of damping. | |||
Bright - brightness of the signal (lowpass filtering). Uses keyboard tracking, value stated is a ratio of the fundemental of the note played. | |||
Cut - remove lower partials of the signal (highpass filtering). Uses keyboard tracking, value stated is a ratio of the fundemental of the note played. | |||
Movement | |||
--------- | |||
Movement is a rough imitation of the effect of moving the vibrating string with respect to the location of the speaker. This is simply a modulating very short delay. | |||
Speed - speed of modulation (created using a random spline) | |||
Pick-up | |||
------- | |||
Settings pertaining to the location of the pick-up along the length of the vibrating string | |||
Position - manual positioning of the pick-up. 0 or 1 = either end. 0.5 = half-way along the string's length. | |||
Auto - if this is active, manual positioning is ignored and the pick-up moves around randomly | |||
Speed - speed of random movement of the pick-up | |||
Reverb | |||
------ | |||
Distance - Distance of the listener from the speaker (basically a dry/wet signal crossfader) | |||
Room - Room size | |||
Output | |||
------ | |||
Release - ampllitude envelope release for the feedback signal | |||
Level - Level control (pre reverb so reverberation will always die away natuarally) | |||
<Cabbage> | |||
form caption("String Feedback"), size(775, 205), pluginID("fbck"), colour("0,0,0") | |||
groupbox bounds( 0, 0, 290, 90), text("Amplifier"), fontcolour(195,126, 0){ | |||
rslider bounds( 5, 25, 60, 60), text("Feedback"), colour(195,126, 0), FontColour(195,126, 0), channel("fback"), range(0, 8, 0.8,0.5) | |||
rslider bounds( 60, 25, 60, 60), text("Drive"), colour(195,126, 0), FontColour(195,126, 0), channel("drive"), range(0, 1, 0.25) | |||
rslider bounds(115, 25, 60, 60), text("Sustain"), colour(195,126, 0), FontColour(195,126, 0), channel("sustain"), range(0.0001, 1, 1, 0.5, 0.0001) | |||
rslider bounds(170, 25, 60, 60), text("Bright"), colour(195,126, 0), FontColour(195,126, 0), channel("LPF"), range(1, 32, 16) | |||
rslider bounds(225, 25, 60, 60), text("Cut"), colour(195,126, 0), FontColour(195,126, 0), channel("HPF"), range(0, 32, 1) | |||
} | |||
groupbox bounds(290, 0, 70, 90), text("Movement"), fontcolour(195,126, 0){ | |||
rslider bounds(295, 25, 60, 60), text("Speed"), colour(195,126, 0), FontColour(195,126, 0), channel("speed"), range(0.001,1, 0.1,0.5,0.0001) | |||
} | |||
groupbox bounds(360, 0,170, 90), text("Pick-up"), fontcolour(195,126, 0){ | |||
rslider bounds(365, 25, 60, 60), text("Position"),colour(195,126, 0), FontColour(195,126, 0), channel("PickPos"), range(0, 1, 0.1) | |||
checkbox bounds(425, 25, 70, 15), text("Auto") channel("auto"), FontColour(195,126, 0), colour("orange") | |||
rslider bounds(465, 25, 60, 60), text("Speed"),colour(195,126, 0), FontColour(195,126, 0), channel("PickPosSpeed"), range(0.001, 8, 1, 0.5,0.001) | |||
} | |||
groupbox bounds(530, 0,120, 90), text("Reverb"), fontcolour(195,126, 0){ | |||
rslider bounds(535, 25, 60, 60), text("Distance"),colour(195,126, 0), FontColour(195,126, 0), channel("distance"), range(0, 1, 0.1) | |||
rslider bounds(590, 25, 60, 60), text("Room"), colour(195,126, 0), FontColour(195,126, 0), channel("room"), range(0.5,0.99, 0.85) | |||
} | |||
groupbox bounds(650, 0,125, 90), text("Output"), fontcolour(195,126, 0){ | |||
rslider bounds(655, 25, 60, 60), text("Release"), colour(195,126, 0), FontColour(195,126, 0), channel("rel"), range(0.01, 8, 0.01, 0.5) | |||
rslider bounds(710, 25, 60, 60), text("Level"), colour(195,126, 0), FontColour(195,126, 0), channel("level"), range(0, 1, 0.5) | |||
} | |||
keyboard bounds(0, 95,775,80) | |||
image bounds(5, 180, 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(195,126, 0) | |||
} | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-dm0 -n -+rtmidi=null -M0 | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 4 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
massign 0,1 ; assign all midi to channel 1 | |||
seed 0 ; random number generators seeded from system clock | |||
gasendL,gasendR,garvbL,garvbR init 0 ; initialise global variables to zero | |||
giscal ftgen 0,0,1024,-16,1,1024,4,8 ; amplitude scaling used in 'overdrive' mechanism | |||
gifbscl ftgen 0,0,128,-27, 0,1, 36,1, 86,3, 127,3 ; Feedback scaling function table. Higher notes need higher levels of feedback. | |||
instr 1 | |||
kporttime linseg 0,0.001,0.05 ; used to smooth GUI control movement | |||
iplk = 0.1 ; pluck position (largely irrelevant) | |||
iamp = 1 ; amplitude | |||
icps cpsmidi ; midi note played (in cycles-per-second) | |||
inum notnum ; midi note number | |||
ifbscl table inum, gifbscl ; Feedback scaling. Higher notes need higher levels of feedback. This scaling function is defined earlier in a function table. | |||
ksustain chnget "sustain" ; string sustain (inverse of damping). Higher values = more sustain | |||
krefl = 1-ksustain ; string damping (derived from sustain value). Higher values = more damping. Range 0 - 1 | |||
adel init 0 ; feedback signal from the modulating delay (initial value for the first pass) | |||
; pick-up position | |||
kauto chnget "auto" ; 'auto' checkbox button. | |||
if(kauto==0) then ; if 'auto' button is off pick-up position is set manually | |||
kpick chnget "PickPos" ; 'Position' GUI knob | |||
kpick portk kpick,kporttime ; smooth changes made to the value to prevent glitches | |||
else ; other 'Auto' pick-up position modulation mode is used | |||
kPickposSpeed chnget "PickPosSpeed" ; pick-up position modulation 'Speed' GUI knob | |||
kpick rspline 0.01,0.99,kPickposSpeed,kPickposSpeed*2 ; pick-up position created using a random spline method | |||
kpick limit kpick,0.01,0.99 ; contain possible values. (N.b. rspline will generate values beyond its given limits.) | |||
endif | |||
irel chnget "rel" ; feedback signal release time | |||
aInRel linsegr 1,irel,0 ; feedback signal release envelope | |||
adust dust 0.1,1 ; generate a sparse crackle signal. This is used to help keep the string vibrating. | |||
kfback chnget "fback" ; 'Feedback' value from GUI knob | |||
asig repluck iplk, iamp, icps, kpick, krefl,( (adel*kfback*ifbscl) + ( (garvbL+garvbR) * 0.1) + adust) * aInRel ; vibrating string model | |||
; overdrive | |||
kDrive chnget "drive" ; overdrive value from GUI knob | |||
ktrig changed kDrive ; if 'Drive' knob is moved generate a trigger. Reinitialisation will be needed to refresh the 'clip' opcode. | |||
if(ktrig==1) then ; if 'Drive' knob has been moved... | |||
reinit UPDATE ; reinitialise from 'UPDATE' label | |||
endif | |||
UPDATE: ; a label. Reinitialise from here. | |||
iClipLev = 1-(i(kDrive)*0.9) ; clip level remapped from 0 to 1 remapped to 1 to 0.1. | |||
asig clip asig,0,iClipLev ; clip the audio signal | |||
igain table i(kDrive),giscal,1 ; get amplitude compensation value according to the current 'Drive' setting | |||
asig = asig*igain ; compensate for gain loss | |||
rireturn | |||
; filtering | |||
kLPF chnget "LPF" ; Lowpass filter ('Bright') GUI knob. This is a ratio of the fundemental frequency so the final cutoff frequency will depend on the note played (keyboard tracking). | |||
kLPF portk kLPF,kporttime ; smooth changes | |||
kLPF limit icps*kLPF,20,sr/2 ; derive cycles-per-second filter cutoff value (and protect against out of range values which would cause the filter to 'blow up') | |||
asig butlp asig, kLPF ; lowpass filter the signal | |||
kHPF chnget "HPF" ; same as the above but with a highpass filter. (Highpass filter called 'Cut' in GUI.) | |||
kHPF portk kHPF,kporttime | |||
kHPF limit icps*kHPF,1,sr/2 | |||
asig buthp asig, kHPF | |||
; amplitude enveloping | |||
aAmpEnv expsegr 0.001,.1,1,15,0.001 ; amplitude envelope | |||
asig = asig*aAmpEnv ; apply amplitude envelope | |||
; delay (this controls how different harmonics are accentuated in the feedback process) | |||
kspeed chnget "speed" ; delay time modulation speed | |||
iDelMin = 0.0001 ; delay minimum... | |||
iDelMax = 0.01 ; ...and maximum. These could maybe be brought out as GUI controls | |||
kdeltim rspline iDelMin,iDelMax,kspeed,kspeed*2 ; random spline for delay time (k-rate) | |||
kdeltim limit kdeltim,iDelMin,iDelMax ; limit value (n.b. rspline will generate values beyond its given minimum and maximum) | |||
adeltim interp kdeltim ; interpolate to create a-rate verion for delay time (a-rate will give smoother results) | |||
adel vdelay3 asig, adeltim*1000, 1000 ; create modulating delay signal | |||
; stereo spatialisation - this gives the dry (unreverberated) signal some stereo width | |||
kdelL rspline 0.001, 0.01, 0.05, 0.1 ; left channel spatialising delay | |||
kdelR rspline 0.001, 0.01, 0.05, 0.1 ; right channel spatialising delay | |||
kdelL limit kdelL,0.001, 0.01 ; limit left channel delay times (n.b. rspline will generate values beyond its given minimum and maximum) | |||
kdelR limit kdelR,0.001, 0.01 ; limit right channel delay times (n.b. rspline will generate values beyond its given minimum and maximum) | |||
adelL interp kdelL ; create a-rate of left channel delay time version using interpolation | |||
adelR interp kdelR ; create a-rate of right channel delay time version using interpolation | |||
aL vdelay3 adel,adelL*1000,10 ; delay signal left channel | |||
aR vdelay3 adel,adelR*1000,10 ; delay signal right channel | |||
; create reverb send signals (stereo) | |||
klevel chnget "level" ; level control (pre reverb input therefore allows reverb to die away naturally) | |||
gasendL = gasendL+(aL*klevel) ; left channel reverb send signal accumulated with audio from this note | |||
gasendR = gasendR+(aR*klevel) ; right channel reverb send signal accumulated with audio from this note | |||
endin | |||
instr Reverb | |||
kroom chnget "room" ; room size | |||
garvbL, garvbR reverbsc gasendL, gasendR, kroom, 7000 ; apply reverb | |||
iDryLev = 0.1 ; dry signal level | |||
kRvbLev chnget "distance" ; reverb signal level | |||
outs (garvbL*kRvbLev*0.2)+(gasendL*iDryLev*(1-kRvbLev)), (garvbR*kRvbLev*0.2)+(gasendR*iDryLev*(1-kRvbLev)) | |||
clear gasendL,gasendR | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
i "Reverb" 0 3600 | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,250 @@ | |||
<Cabbage> | |||
form caption("Vectorial Synth"), size(760, 320), pluginID("vec1") | |||
xypad bounds(5, 0, 250, 205), channel("chanx", "chany"), text("Vectorial mixing"), rangex(0, 1, .5), rangey(0, 1, .5) | |||
groupbox bounds(260, 0, 240, 100), text("ADSR"), plant("adsr"){ | |||
rslider bounds(.0, .3, .6, .6), text("A"), colour("orange"), channel("att"), range(0.01,3, .5) | |||
rslider bounds(.25, .3, .6, .6), text("D"), colour("orange"), channel("dec"), range(0,1, .5) | |||
rslider bounds(.5, .3, .6, .6), text("S"), colour("orange"), channel("sus"), range(0,1,.8) | |||
rslider bounds(.75, .3, .6, .6), text("R"), colour("orange"), channel("rel"), range(0.01,3, .2) | |||
} | |||
groupbox bounds(260, 105, 240, 100), text("Tune"), plant("tune"){ | |||
rslider bounds(.0, .3, .6, .6), text("Detune1"), colour("dodgerblue"), channel("det1"), range(-24,12,0) | |||
rslider bounds(.25, .3, .6, .6), text("Detune2"), colour("dodgerblue"), channel("det2"), range(-24,12,-5) | |||
rslider bounds(.5, .3, .6, .6), text("Detune3"), colour("dodgerblue"), channel("det3"), range(-24,12,0) | |||
rslider bounds(.75, .3, .6, .6), text("Detune4"), colour("dodgerblue"), channel("det4"), range(-24,12,-12) | |||
} | |||
groupbox bounds(505,0, 240, 100), text("LFO/Stereo chorus"), plant("mod"){ | |||
rslider bounds(.0, .3, .6, .6), text("Lfo amp"), colour("dodgerblue"), channel("lfoamp"), range(0,50, 0) | |||
rslider bounds(.25, .3, .6, .6), text("Lfo rate"), colour("dodgerblue"), channel("lforate"), range(0,20, 0) | |||
rslider bounds(.5, .3, .6, .6), text("depth"), colour("dodgerblue"), channel("chdepth"), range(0,10,0) | |||
rslider bounds(.75, .3, .6, .6), text("rate"), colour("dodgerblue"), channel("chrate"), range(0,10,0) | |||
} | |||
groupbox bounds(505,105, 240, 100), text("Reverb"), plant("rev"){ | |||
rslider bounds(0, .3, .6, .6), text("level"), colour("dodgerblue"), channel("level"), range(0,1,0) | |||
rslider bounds(0.25, .3, .6, .6), text("size"), colour("dodgerblue"), channel("size"), range(.1,.99,.5) | |||
;rslider bounds(115, 30, 60, 60), text("depth"), colour("dodgerblue"), channel("chdepth"), range(0,10,0) | |||
;rslider bounds(165, 30, 60, 60), text("rate"), colour("dodgerblue"), channel("chrate"), range(0,10,0) | |||
checkbox bounds(.55, .40, .60, .30),channel("onoff"), text("On/Off"), value(0), colour("blue") | |||
} | |||
keyboard bounds(5, 220, 750, 70) | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-n -d -m0d -+rtmidi=NULL -M0 | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 32 | |||
nchnls = 2 | |||
0dbfs = 1 | |||
;Author: Giorgio Zucco (2012) | |||
;turnon don't work! | |||
;turnon 10 ;chorus | |||
;turnon 12 ;reverb | |||
ga1 init 0 | |||
ga2 init 0 | |||
garev1 init 0 | |||
garev2 init 0 | |||
gifn ftgen 1,0,16384,10,1 | |||
gifn ftgen 2,0,16384,10,1,0,1 | |||
gifn ftgen 3,0,16384,10,1,0,0,1 | |||
gifn ftgen 4,0,16384,10,1,0,0,0,1 | |||
gifn ftgen 5,0,16384,10,1,0,0,0,0,1 | |||
gifn ftgen 6,0,16384,10,1,0,1,0,0,0,1 | |||
gifn ftgen 7,0,16384,10,1,0,0,1,0,0,0,1 | |||
gifn ftgen 8,0,16384,10,1,0,0,0,1,0,0,0,1 | |||
gifn ftgen 9,0,16384,10,1,0,0,0,0,1,0,0,1,1 | |||
gifn ftgen 10,0,16384,10,1,0,0,0,0,0,1,1,0,0,1 | |||
gifn ftgen 11,0,16384,10,1,0,0,0,0,1,1,0,0,0,0,1 | |||
gifn ftgen 12,0,16384,10,1,0,0,0,1,1,0,0,0,0,0,0,1 | |||
gifn ftgen 13,0,16384,10,1,0,0,0,1,1,0,0,0,0,0,0,0,1 | |||
gifn ftgen 14,0,16384,10,1,0,0,1,0,0,1,0,0,0,0,0,0,0,1 | |||
gifn ftgen 15,0,16384,10,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1 | |||
gifn ftgen 16,0,16384,10,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1 | |||
gibell ftgen 17,0,16384,9,1,1,0,1.02,.28,0,.98,.14,0,4,.22,0,7,.39,0 ;bell | |||
gichord ftgen 18,0,16384,9, 1,1,0,1.25,.08,0,1.49,.28,0,2,.52,0,2.52,.74,0 ;chord | |||
gitemp ftgen 19 , 0 , 16384, 10 , 1 , 1 , 0 , 5 , 0 , 3, 0 , 1 | |||
gitemp ftgen 20, 0, 16384, 10, 1, 1, 0, 0, 1 ,0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 | |||
gitemp ftgen 21, 0 ,16384 ,10, 1, 1, 0, 1, 0, 1, 0 ,1, 0, 1, 0, 1, 0, 1, 0, 1 | |||
gitemp ftgen 22 , 0 ,16384, 10 ,1 ,0, .2 ,.2 ,.03, .12, .22, .11 ,.022, .0101, .0167 | |||
;******************************************* | |||
opcode StChorus,aa,aakkkk | |||
asigr,asigl,kdepth,kdepthl,krate,kratel xin ;legge i parametri in entrata | |||
;ar,al StChorus asigr,asigl,kdepth,kdepthl,krate,kratel | |||
k1ch randi kdepth/2,krate,1 | |||
ar1 vdelay asigr,kdepth/2+k1ch,10 | |||
k2ch randi kdepth/2,krate*0.9,.2 | |||
ar2 vdelay asigr,kdepth/2+k2ch,10 | |||
k3ch randi kdepth/2,krate*1.1,.2 | |||
ar3 vdelay asigr,kdepth/2+k3ch,10 | |||
k4ch randi kdepth/2,krate*1.3,.1 | |||
ar4 vdelay asigr,kdepth/2+k4ch,10 | |||
k1chl randi kdepthl/2,kratel,1 | |||
ar1l vdelay asigl,kdepthl/2+k1chl,10 | |||
k2chl randi kdepthl/2,kratel*0.9,.2 | |||
ar2l vdelay asigl,kdepthl/2+k2chl,10 | |||
k3chl randi kdepthl/2,kratel*1.1,.2 | |||
ar3l vdelay asigl,kdepthl/2+k3chl,10 | |||
k4chl randi kdepthl/2,kratel*1.3,.1 | |||
ar4l vdelay asigl,kdepthl/2+k4chl,10 | |||
aL = (ar1+ar2+ar3+ar4)/2 | |||
aR = (ar1l+ar2l+ar3l+ar4l)/2 | |||
xout aL,aR ; write output | |||
endop | |||
;*********************************************** | |||
instr 1 | |||
iatt chnget "att" | |||
idec chnget "dec" | |||
isus chnget "sus" | |||
irel chnget "rel" | |||
kdet1 chnget "det1" | |||
kdet2 chnget "det2" | |||
kdet3 chnget "det3" | |||
kdet4 chnget "det4" | |||
klfoamp chnget "lfoamp" | |||
klforate chnget "lforate" | |||
kindex chnget "fmamp" | |||
kfmrate chnget "fmrate" | |||
kcutoff chnget "cutoff" | |||
kreso chnget "resonance" | |||
kx chnget "chanx" | |||
ky chnget "chany" | |||
;midi | |||
imidinn notnum | |||
iamp ampmidi 1 | |||
kbend pchbend 0,2 ;pitch bend | |||
kfreq1 = cpsmidinn(imidinn+kbend+int(kdet1)) ;controllo midi | |||
kfreq2 = cpsmidinn(imidinn+kbend+int(kdet2)) | |||
kfreq3 = cpsmidinn(imidinn+kbend+int(kdet3)) | |||
kfreq4 = cpsmidinn(imidinn+kbend+int(kdet4)) | |||
;lfo | |||
klfo poscil klfoamp,klforate,1 | |||
kfreq1 = kfreq1+klfo | |||
kfreq2 = kfreq2+klfo | |||
kfreq3 = kfreq3+klfo | |||
kfreq4 = kfreq4+klfo | |||
ifunc1 = rnd(15) | |||
ifunc2 = rnd(15) | |||
ifunc3 = rnd(15) | |||
ifunc4 = rnd(15) | |||
;4 osc | |||
ain1 poscil iamp,kfreq1,ifunc1+1 | |||
ain2 poscil iamp,kfreq2,ifunc2+1 | |||
ain3 poscil iamp,kfreq3,ifunc3+1 | |||
ain4 poscil iamp,kfreq4,ifunc4+1 | |||
;vectorial mixing | |||
k1 = (1-kx)*(1-ky) | |||
k2 = kx*(1-ky) | |||
k3 = (1-kx)*ky | |||
k4 = kx*ky | |||
k1port portk k1,.01 | |||
k2port portk k2,.01 | |||
k3port portk k3,.01 | |||
k4port portk k4,.01 | |||
kadsr mxadsr iatt,idec,isus,irel | |||
aout = (ain1*k1port + ain2*k2port + ain3*k3port + ain4*k4port)*.3 ;global out | |||
;abulp1 butterlp aout,kcutoff*kadsrfilt | |||
;aring poscil aout,kcutoff,1 | |||
;amaster balance afilt1,aout | |||
aclip clip aout,0,0dbfs | |||
kpan jspline 1,0,4 | |||
al,ar pan2 aclip,kpan | |||
outs (al*kadsr),(ar*kadsr) | |||
vincr ga1,(al*kadsr) | |||
vincr ga2,(ar*kadsr) | |||
vincr garev1,(al*kadsr) | |||
vincr garev2,(ar*kadsr) | |||
endin | |||
;stereo chorus | |||
instr 10 | |||
k1 chnget "chdepth" | |||
k2 chnget "chrate" | |||
kfxdepth portk k1,.01 | |||
kfxrate portk k2,.01 | |||
acho1,acho2 StChorus ga1,ga2,kfxdepth,kfxdepth*.8,kfxrate,kfxrate*.8 | |||
outs acho1,acho2 | |||
clear ga1,ga2 | |||
endin | |||
instr 12 ;reverb | |||
ktrig chnget "onoff" | |||
klevel chnget "level" | |||
ksize chnget "size" | |||
if ktrig = 1 then | |||
al,ar reverbsc garev1,garev2,ksize,16000,sr,0 | |||
adc1 dcblock2 al | |||
adc2 dcblock2 ar | |||
kpan1 randomi 0,1,4 | |||
kpan2 randomi 0,1,8 | |||
aout1,aout2 pan2 adc1,kpan1 | |||
aout3,aout4 pan2 adc2,1-kpan2 | |||
asum1 = (aout1+aout2)*klevel | |||
asum2 = (aout3+aout4)*klevel | |||
else | |||
asum1 = 0 | |||
asum2 = 0 | |||
endif | |||
outs asum1,asum2 | |||
clear garev1,garev2 | |||
endin | |||
</CsInstruments> | |||
<CsScore> | |||
;f0 36000 | |||
i1 0 36000 | |||
i10 0 36000 | |||
i12 0 36000 | |||
</CsScore> | |||
</CsoundSynthesizer> |
@@ -0,0 +1,708 @@ | |||
; WavetableSynth.csd | |||
; Implements wavetable synthesis a spectral morphing based on note played. | |||
; This can be used to maintain a convincing spectral appearance fo an instrument imitation across a range of note. | |||
; As this morphing is done continuously between notes and not just stepwise note to note, | |||
; - use of pitch bend will also cause spectral morphing resulting in more convincing glissandi than are normally implemented in commercial | |||
; - hardware. | |||
; As there are many tables of waveform data in this example, it may take a moment or two to load. | |||
; CONTROLS | |||
; -------- | |||
; | |||
; Tone -- tone control | |||
; Shift -- shifts the note to wavetable relationship resulting in tonal variations | |||
; Jitter -- humanizing of the tone through random amplitude, pitch and tonal | |||
; Noise -- amount of noise in the sound. Used to simulate breath noise. | |||
; EQ -- EQ of the noise quotient | |||
; Drop -- Amount of pitch drop upon note conclusion | |||
<Cabbage> | |||
form caption("Wavetable Synth") size(675, 320), pluginID("wtsy") | |||
image pos(0, 0), size(675, 290), colour("brown"), shape("rounded"), outline("maroon"), line(4) | |||
image bounds(160, 6,240, 88), colour("brown"), shape("rounded"), outline("white"), line(1) ;modulation | |||
image bounds(405, 6,140, 88), colour("brown"), shape("rounded"), outline("white"), line(1) ;polyphony | |||
image bounds(550, 6,110, 88), colour("brown"), shape("rounded"), outline("white"), line(1) ;pitch bend | |||
image bounds( 15,103,110, 88), colour("brown"), shape("rounded"), outline("white"), line(1) ;noise attack | |||
image bounds(130,103,155, 88), colour("brown"), shape("rounded"), outline("white"), line(1) ;quality | |||
image bounds(290,103,110, 88), colour("brown"), shape("rounded"), outline("white"), line(1) ;reverb | |||
image bounds(405,103,260, 88), colour("brown"), shape("rounded"), outline("white"), line(1) ;output | |||
combobox caption("Instrument"), channel("Instr"), bounds(10, 10, 140, 80) value(1), text("Clarinet", "Bass Clarinet", "C.bass Clarinet", "Oboe", "Bassoon", "C.bassoon", "Violin", "Cello", "Piccolo", "Flute", "Alto Flute", "Bass Flute", "Ahh", "Horn P", "Horn F", "B.Trb.Harmon Mute", "B.Trb.Cup Mute", "B.Trb.Open") | |||
label bounds(170, 80, 40, 12), text("Mod.") | |||
label bounds(245, 11,100, 15), text("Modulation") | |||
label bounds(440, 11,100, 15), text("Polyphony") | |||
label bounds(567, 11,100, 15), text("Pitch Bend") | |||
label bounds( 50,107,100, 15), text("Attack") | |||
label bounds(185,107,100, 15), text("Quality") | |||
label bounds(200,175,100, 11), text("EQ") | |||
label bounds(325,107,100, 15), text("Reverb") | |||
label bounds(510,107,100, 15), text("Output") | |||
;MODULATION | |||
vslider bounds(160,-10, 40, 90), channel("moddep"), range(0, 1, 0.4),midCtrl(1, 1) | |||
rslider bounds(190, 32, 60, 60), text("Vib."), channel("vibdep"), range(0, 1, 0.15) | |||
rslider bounds(240, 32, 60, 60), text("Trem."), channel("tremdep"), range(0, 1, 0.4) | |||
rslider bounds(290, 32, 60, 60), text("Tone"), channel("tonedep"), range(0, 4, 2) | |||
rslider bounds(340, 32, 60, 60), text("Rate"), channel("ModRte"), range(0, 16, 4.25, 0.5) | |||
;POLYPHONY | |||
button bounds(415, 40, 70, 25), text("poly","mono"), channel("monopoly"), value(1), fontcolour("lime") | |||
rslider bounds(485, 32, 60, 60), text("Leg.Time"), channel("LegTim"), range(0.001, 2, 0.002, 0.5, 0.001) | |||
;PITCH BEND | |||
rslider bounds(550, 32, 60, 60), text("<"), channel("BendDn"), range(0, 1, 1) | |||
rslider bounds(600, 32, 60, 60), text(">"), channel("BendUp"), range(0, 1, 0) | |||
;NOISE ATTACK | |||
rslider bounds( 15,127, 60, 60), text("Amp."), channel("NAttAmp"), range(0, 4.00, 0.5) | |||
rslider bounds( 65,127, 60, 60), text("Time"), channel("NAttTim"), range(0.001,0.5,0.05,0.5) | |||
;QUALITY | |||
rslider bounds(130,127, 60, 60), text("Noise"), channel("NoiseAmp"), range(0,5,0.01,0.5,0.0001) | |||
vslider bounds(183,110, 30, 70), text(""), channel("EQ_Lo"), range(500,10000,2000,0.5,0.01) | |||
vslider bounds(203,110, 30, 70), text(""), channel("EQ_Hi"), range(20,5000,200,0.5,0.01) | |||
rslider bounds(225,127, 60, 60), text("Drop"), channel("drop"), range(0,0.5,0.05,0.5,0.0001) | |||
;REVERB | |||
rslider bounds(290,127, 60, 60), text("Mix"), channel("RvbMix"), range(0, 1.00, 1) | |||
rslider bounds(340,127, 60, 60), text("Size"), channel("RvbSize"), range(0.3, 1.00, 0.4) | |||
;OUTPUT | |||
rslider bounds(405,127, 60, 60), text("Tone"), channel("bright"), range(0, 1.00, 1) | |||
rslider bounds(455,127, 60, 60), text("Shift"), channel("shift"), range(-36, 36.00, 0,1,0.001) | |||
rslider bounds(505,127, 60, 60), text("Jitter"), channel("jitter"), range(0, 1.00, 0.4) | |||
rslider bounds(555,127, 60, 60), text("Pan"), channel("pan"), range(0, 1.00, 0.5) | |||
rslider bounds(605,127, 60, 60), text("Level"), channel("level"), range(0, 2.00, 1) | |||
keyboard pos(10, 200), size(655, 80) | |||
image bounds(5, 295, 250, 20), colour(75, 85, 90, 100), plant("credit"){ | |||
label bounds(0.03, 0.2, .9, .6), text("Author: Iain McCurdy |2012|"), colour("white") | |||
</Cabbage> | |||
<CsoundSynthesizer> | |||
<CsOptions> | |||
-dm0 -n -+rtmidi=null -M0 | |||
</CsOptions> | |||
<CsInstruments> | |||
sr = 44100 | |||
ksmps = 16 | |||
nchnls = 2 | |||
0dbfs = 1 ;MAXIMUM AMPLITUDE | |||
seed 0 | |||
massign 0,2 | |||
gkactive init 0 ; Will contain number of active instances of instr 3 when legato mode is chosen. NB. notes in release stage will not be regarded as active. | |||
;Author: Iain McCurdy (2012) | |||
gisine ftgen 0,0,4096,10,1 ;A SINE WAVE. USED BY THE LFOs. | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
; CLARINET | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
;FOUR GEN10 FUNCTION TABLES WHICH CORRESPOND TO THE SPECTRAL ENVELOPES OF FOUR DIFFERENT NOTES PLAYED ON THE CLARINET | |||
;THE FOUR NOTES CHOSEN COVER THE SOUNDING RANGE OF THE INSTRUMENT | |||
;NOTE THAT ALL FUNCTION TABLES USED BY ftmorph IN THE MORPHING PROCESS, INCLUDING THE ONE INTO WHICH THE MORPHED TABLE IS WRITTEN (SEE INSTR 1), SHOULD BE THE SAME SIZE | |||
;FOUR GEN10 FUNCTION TABLES WHICH CORRESPOND TO THE SPECTRAL ENVELOPES OF FOUR DIFFERENT NOTES PLAYED ON THE CLARINET | |||
;THE FOUR NOTES CHOSEN COVER THE SOUNDING RANGE OF THE INSTRUMENT | |||
;NOTE THAT ALL FUNCTION TABLES USED BY ftmorph IN THE MORPHING PROCESS, INCLUDING THE ONE INTO WHICH THE MORPHED TABLE IS WRITTEN (SEE INSTR 1), SHOULD BE THE SAME SIZE | |||
giclar50 ftgen 0,0,4096,10,0.273597,0.027434,0.737705,0.049480,0.448437,0.272536,0.131175,0.129945,0.283082,0.130714,0.026719,0.037582,0.018953,0.010729,0.067580,0.024573,0.016586,0.049988,0.033294,0.017090,0.008591,0.021128,0.007237,0.016060,0.016060 | |||
giclar62 ftgen 0,0,4096,10,0.753504,0.011446,0.501720,0.055791,0.241768,0.037889,0.027203,0.062793,0.102494,0.030506,0.042453,0.050202,0.031077,0.027208,0.020897,0.022205,0.012154,0.008160,0.004886,0.005076,0.003805,0.001322,0.001149,0.001450,0.001450 | |||
giclar74 ftgen 0,0,4096,10,0.519536,0.062430,0.745521,0.055790,0.103856,0.097554,0.090420,0.077181,0.017130,0.013446,0.005674,0.003296,0.003438,0.003395,0.002506,0.001169,0.002525,0.001237,0.002624,0.001440,0.000880,0.001061,0.002672,0.002090,0.002090 | |||
giclar86 ftgen 0,0,4096,10,0.823209,0.201690,0.171118,0.161374,0.041951,0.004950,0.010889,0.001107,0.001365,0.003340,0.002259,0.001175,0.000442,0.001544,0.001259,0.000549,0.000455,0.000352,0.000345,0.000396,0.000477,0.000848,0.001199,0.001081,0.001081 | |||
giwavemapClar ftgen 0,0,128,-27, 0,0, 50,0, 62,1, 74,2, 86,3, 127,3 | |||
;GEN02 TABLE CONTAINING THE FUNCTION TABLE NUMBERS OF THE TABLES BETWEEN WHICH MORPHING WILL TAKE PLACE | |||
gitabs4morfClar ftgen 0,0,4,-2,giclar50,giclar62,giclar74,giclar86 | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
; BASS CLARINET | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
giBClar35 ftgen 0,0,4096,10,0.384232,0.038085,0.578537,0.029558,0.143002,0.119033,0.397678,0.113380,0.577246,0.158831,0.577514,0.094994,0.440674,0.109136,0.500666,0.132354,0.360370,0.104810,0.231403,0.089565,0.207353,0.099773,0.209066,0.123801,0.158769,0.079383,0.036078,0.019583,0.010310,0.017060,0.029465,0.045821,0.031622,0.038326,0.052222,0.058647,0.083956,0.079748,0.081955,0.097274,0.069934,0.075100,0.049259,0.058121,0.068078,0.065276,0.070165,0.065898,0.072432,0.055423,0.052283,0.036547,0.034082,0.035287,0.044801,0.053917,0.050263,0.036979,0.034264,0.035892,0.035011,0.037199,0.041542,0.043201,0.039923,0.035164,0.035828,0.036193,0.037155,0.035493,0.034546,0.035091,0.029891,0.027394,0.026174,0.023757,0.021365,0.019468,0.016295,0.015301,0.015263,0.014310,0.013239,0.011972,0.011445,0.011727,0.012391,0.013892,0.015395,0.015147,0.015137,0.014816,0.013898,0.012682,0.011462,0.009883,0.008579,0.007797,0.007749 | |||
giBClar41 ftgen 0,0,4096,10,0.525063,0.002869,0.469239,0.024384,0.895713,0.021156,0.199553,0.014871,0.215693,0.036697,0.212856,0.060220,0.224360,0.026202,0.021469,0.019475,0.067282,0.034970,0.025525,0.028958,0.038550,0.041724,0.035988,0.016617,0.026564,0.031021,0.037801,0.030070,0.055636,0.040575,0.029792,0.031356,0.031871,0.058063,0.027829,0.023825,0.015824,0.011714,0.011110,0.015367,0.011850,0.008957,0.011489,0.007029,0.004640,0.004862,0.006536,0.006771,0.006683,0.005231,0.005323,0.006834,0.005342,0.005818,0.004902,0.005468,0.005431,0.006151,0.004672,0.003041,0.002322,0.002274,0.002661,0.003122,0.002931,0.002587,0.002527,0.002499,0.003095,0.003755,0.003651,0.003768,0.003972,0.003962,0.003999,0.003352,0.002866,0.002449,0.002120,0.001972,0.002040,0.002221,0.002063,0.002057,0.002415,0.002849,0.003276,0.003776,0.003994,0.003829,0.003419,0.003328,0.003575,0.003829,0.003703,0.003454,0.003149,0.002825,0.002697,0.002765 | |||
giBClar47 ftgen 0,0,4096,10,0.447815,0.011780,0.911495,0.027076,0.846723,0.050517,0.224579,0.039801,0.048967,0.024162,0.071418,0.087315,0.031778,0.048063,0.058394,0.078770,0.021135,0.041585,0.092206,0.058125,0.063991,0.033673,0.025813,0.045142,0.037450,0.016766,0.014278,0.016668,0.017869,0.025925,0.010244,0.010062,0.010634,0.008986,0.006992,0.005186,0.004618,0.003658,0.002913,0.003004,0.004250,0.003142,0.002387,0.002692,0.003592,0.004496,0.002831,0.001838,0.001680,0.002144,0.002567,0.003185,0.002727,0.002419,0.001998,0.001883,0.002286,0.002626,0.003202,0.003257,0.003056,0.003241,0.002838,0.002521,0.002294,0.002409,0.002746,0.002848,0.003387,0.004173,0.004189,0.004587,0.005402,0.004977,0.004132,0.003842,0.003974,0.003650,0.003605,0.003810,0.003745,0.003770,0.003520,0.003363,0.003391,0.003302,0.003124,0.003422,0.004022,0.004064,0.003584,0.002939,0.002329,0.001970,0.001947,0.002034,0.002069,0.002043,0.001854,0.001658 | |||
giBClar53 ftgen 0,0,4096,10,0.819856,0.006052,0.508263,0.007439,0.271031,0.012967,0.059374,0.017922,0.016997,0.004014,0.027132,0.014921,0.020230,0.012123,0.021066,0.004875,0.016894,0.004428,0.004157,0.007603,0.004211,0.011103,0.005054,0.007329,0.004043,0.002169,0.003183,0.001822,0.001158,0.001758,0.002350,0.001442,0.002218,0.002815,0.001503,0.001764,0.001171,0.001508,0.000934,0.000714,0.000902,0.000884,0.000943,0.000825,0.000579,0.000572,0.000654,0.000752,0.000902,0.000932,0.000868,0.000909,0.000903,0.001065,0.001472,0.001483,0.001803,0.001941,0.002100,0.002756,0.002543,0.001984,0.001589,0.001342,0.001414,0.001219,0.001004,0.000908,0.000887,0.001102,0.001342,0.001312,0.001089,0.000869,0.000733,0.000620,0.000574,0.000518,0.000451,0.000422,0.000446,0.000473,0.000423,0.000354,0.000335,0.000370,0.000410,0.000418,0.000435,0.000434,0.000417,0.000417,0.000388,0.000342,0.000316,0.000303,0.000306,0.000309,0.000292,0.000267 | |||
giBClar59 ftgen 0,0,4096,10,0.866645,0.024133,0.420624,0.171074,0.353043,0.050546,0.198619,0.047824,0.110458,0.081558,0.064116,0.041109,0.026267,0.036570,0.013031,0.023724,0.007023,0.010067,0.004550,0.011618,0.009601,0.005731,0.005607,0.005036,0.002347,0.002907,0.001472,0.001519,0.001304,0.002584,0.001383,0.001362,0.001591,0.002655,0.004442,0.004905,0.003148,0.004830,0.002947,0.002926,0.003063,0.002394,0.002276,0.002019,0.001689,0.002028,0.002368,0.003510,0.004637,0.004228,0.003257,0.002700,0.002231,0.001681,0.001293,0.001062,0.001121,0.000894,0.000797,0.000865,0.000752,0.000724,0.000719,0.000787,0.000896,0.000801,0.000686,0.000551,0.000468,0.000466,0.000515,0.000460,0.000382,0.000358,0.000366,0.000400,0.000405,0.000355,0.000333,0.000349,0.000352,0.000346,0.000335,0.000317,0.000303,0.000297,0.000289,0.000276,0.000290,0.000292,0.000287,0.000307,0.000318,0.000332,0.000353,0.000374,0.000388,0.000398,0.000399,0.000407 | |||
giBClar65 ftgen 0,0,4096,10,0.934141,0.012361,0.023358,0.045609,0.025913,0.017772,0.009955,0.010837,0.007253,0.001002,0.004215,0.001570,0.004226,0.001334,0.000580,0.001740,0.000839,0.001364,0.001337,0.000523,0.000377,0.000535,0.000290,0.000461,0.000486,0.000333,0.000462,0.000685,0.001136,0.000794,0.000625,0.000436,0.000303,0.000270,0.000259,0.000289,0.000208,0.000224,0.000249,0.000271,0.000200,0.000240,0.000298,0.000226,0.000198,0.000188,0.000200,0.000259,0.000198,0.000169,0.000155,0.000144,0.000123,0.000120,0.000118,0.000112,0.000108,0.000105,0.000096,0.000091,0.000090,0.000093,0.000089,0.000093,0.000094,0.000095,0.000101,0.000112,0.000120,0.000126,0.000134,0.000142,0.000149,0.000170,0.000190,0.000212,0.000246,0.000289,0.000286,0.000269,0.000279,0.000310,0.000352,0.000355,0.000341,0.000361,0.000376,0.000373,0.000385,0.000427,0.000475,0.000539,0.000655,0.000838,0.001061,0.001284,0.001429,0.001364,0.001171,0.001020 | |||
giBClar71 ftgen 0,0,4096,10,0.951349,0.052635,0.166289,0.036346,0.080225,0.105328,0.019032,0.014538,0.003453,0.003349,0.001065,0.003529,0.004876,0.003334,0.003537,0.009903,0.004407,0.002506,0.002863,0.005317,0.004116,0.003426,0.001538,0.001829,0.001351,0.001942,0.001728,0.001103,0.000733,0.000413,0.000643,0.000468,0.000336,0.000631,0.000868,0.000470,0.000257,0.000240,0.000210,0.000190,0.000182,0.000170,0.000178,0.000178 | |||
giBClar77 ftgen 0,0,4096,10,0.679870,0.126072,0.031529,0.103885,0.017231,0.001781,0.005132,0.000787,0.003992,0.001819,0.002500,0.002660,0.001298,0.001834,0.001238,0.004273,0.001518,0.000670,0.000588,0.000395,0.000786,0.000400,0.000399,0.000471,0.000235,0.000212,0.000208,0.000169,0.000163,0.000146,0.000134 | |||
giwavemapBClar ftgen 0,0,128,-27, 0,0, 35,0, 41,1, 47,2, 53,3, 59,4, 65,5, 71,6, 77,7, 127,7 | |||
;GEN02 TABLE CONTAINING THE FUNCTION TABLE NUMBERS OF THE TABLES BETWEEN WHICH MORPHING WILL TAKE PLACE | |||
gitabs4morfBClar ftgen 0,0,8,-2,giBClar35,giBClar41,giBClar47,giBClar53,giBClar59,giBClar65,giBClar71,giBClar77 | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
; CONTRA-BASS CLARINET | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
giCBClar26 ftgen 0,0,4096,10,0.100160,0.005519,0.631940,0.013046,0.749042,0.308868,0.475605,0.152792,0.074315,0.238927,0.152260,0.251283,0.030787,0.052465,0.032473,0.121972,0.064172,0.090564,0.043994,0.091868,0.039563,0.058622,0.024531,0.023127,0.026665,0.067522,0.081377,0.057914,0.066176,0.036134,0.026135,0.021056,0.038011,0.036534,0.058393,0.040915,0.050051,0.038446,0.034166,0.021341,0.014481,0.015708,0.025527,0.026622,0.033577,0.027355,0.034434,0.022920,0.016354,0.010905,0.011160,0.015075,0.019871,0.017505,0.013189,0.011442,0.008511,0.007974,0.006368,0.005988,0.005976,0.005922,0.006590,0.008199,0.006566,0.005254,0.004955,0.005576,0.005463,0.005101,0.003955,0.003622,0.004027,0.003772,0.003504,0.002848,0.002183,0.002075,0.002143,0.002014,0.001907,0.001850,0.001736,0.001543,0.001318,0.001180,0.001107,0.001066,0.001169,0.001372,0.001533,0.001667,0.001738,0.001655,0.001604,0.001603,0.001571,0.001575,0.001638,0.001696 | |||
giCBClar32 ftgen 0,0,4096,10,0.227476,0.006718,0.707706,0.018101,0.539432,0.018848,0.590242,0.029143,0.512926,0.035712,0.324304,0.035306,0.035964,0.050992,0.096916,0.025035,0.098203,0.072427,0.068155,0.060324,0.042818,0.074538,0.049430,0.100999,0.052956,0.109337,0.053778,0.108791,0.040535,0.041998,0.050107,0.102568,0.075823,0.121836,0.062713,0.047451,0.042146,0.061836,0.063525,0.079775,0.056177,0.039271,0.021422,0.017934,0.022472,0.016758,0.023407,0.025034,0.018765,0.012566,0.009566,0.008232,0.011234,0.015948,0.018924,0.020397,0.016720,0.016224,0.010210,0.006760,0.006525,0.006464,0.006410,0.007832,0.010929,0.013172,0.010412,0.008153,0.005887,0.004927,0.005543,0.006358,0.006415,0.006246,0.004977,0.004037,0.003084,0.002646,0.002504,0.002716,0.003253,0.003484,0.003416,0.003566,0.003392,0.002924,0.002750,0.002979,0.003398,0.003635,0.003855,0.004032,0.004285,0.004278,0.003688,0.003182,0.002942,0.003043,0.003240,0.003317 | |||
giCBClar38 ftgen 0,0,4096,10,0.805943,0.003127,0.607438,0.006915,0.078379,0.025071,0.319458,0.040967,0.418440,0.096874,0.067519,0.066830,0.181701,0.148461,0.024736,0.047734,0.027229,0.065092,0.020252,0.015890,0.047795,0.096969,0.049469,0.024097,0.032227,0.032247,0.057763,0.064995,0.031760,0.023574,0.021449,0.017946,0.015989,0.010329,0.017096,0.025053,0.020021,0.014542,0.009659,0.010282,0.011754,0.016404,0.013970,0.019292,0.012226,0.007260,0.007191,0.010064,0.007246,0.007400,0.007562,0.005179,0.005520,0.005811,0.004710,0.005570,0.007523,0.007671,0.005694,0.004881,0.005241,0.004991,0.005944,0.006659,0.006213,0.004986,0.004006,0.003617,0.003290,0.003479,0.004050,0.003911,0.003373,0.003294,0.003284,0.002858,0.002674,0.003290,0.003986,0.003982,0.003503,0.003424,0.003640,0.003903,0.004267,0.004774,0.005048,0.005020,0.005284,0.005837,0.006116,0.006124,0.006474,0.007329,0.008198,0.008721,0.009014,0.008920,0.008202,0.007419 | |||
giCBClar44 ftgen 0,0,4096,10,0.715187,0.010393,0.137973,0.010188,0.404486,0.073659,0.420943,0.145565,0.080881,0.104506,0.227785,0.021310,0.035316,0.052724,0.023335,0.014334,0.087911,0.036461,0.047658,0.016909,0.047453,0.017513,0.031591,0.010028,0.009677,0.014384,0.012660,0.031094,0.010732,0.009677,0.005632,0.007197,0.005202,0.005881,0.004438,0.005851,0.003283,0.002870,0.001732,0.001824,0.003100,0.002099,0.002084,0.002567,0.003519,0.003856,0.003017,0.003288,0.003518,0.003481,0.002717,0.002212,0.002009,0.002374,0.002508,0.003004,0.002356,0.001681,0.001376,0.001435,0.001604,0.001881,0.001924,0.001783,0.002097,0.002582,0.002971,0.002922,0.002735,0.002884,0.003498,0.003726,0.003454,0.003486,0.003620,0.003356,0.003457,0.003775,0.003730,0.003481,0.003126,0.002660,0.002244,0.001883,0.001625,0.001518,0.001533,0.001594,0.001565,0.001529,0.001485,0.001598,0.001965,0.002295,0.002394,0.002424,0.002401,0.002320,0.002329,0.002436 | |||
giCBClar50 ftgen 0,0,4096,10,0.880714,0.104962,0.497883,0.045337,0.172861,0.109234,0.166844,0.037601,0.179775,0.048578,0.136813,0.079191,0.068937,0.019908,0.087293,0.031265,0.010402,0.048393,0.020759,0.005769,0.015444,0.004339,0.006113,0.010598,0.009591,0.007441,0.002840,0.003349,0.003193,0.003806,0.004954,0.003108,0.003744,0.003254,0.003682,0.002736,0.002830,0.004080,0.005132,0.004023,0.004801,0.004386,0.003962,0.002657,0.003137,0.003478,0.004208,0.004600,0.004272,0.004501,0.004804,0.004328,0.003739,0.003495,0.003378,0.002513,0.002268,0.002182,0.002140,0.001833,0.001900,0.001666,0.001525,0.001441,0.001541,0.001518,0.001571,0.001664,0.001746,0.001600,0.001474,0.001527,0.001644,0.001577,0.001450,0.001382,0.001479,0.001646,0.001713,0.001652,0.001720,0.001859,0.001891,0.001654,0.001420,0.001306,0.001228,0.001173,0.001188,0.001247,0.001299,0.001317,0.001264,0.001186,0.001091,0.000947,0.000797,0.000685,0.000610,0.000547 | |||
giCBClar54 ftgen 0,0,4096,10,0.889990,0.001348,0.087695,0.023926,0.066262,0.023447,0.075142,0.026596,0.020409,0.052699,0.027246,0.016811,0.017828,0.004566,0.005199,0.010830,0.003227,0.005838,0.001883,0.001580,0.004878,0.001870,0.000924,0.001648,0.002681,0.001616,0.003610,0.002587,0.002221,0.002332,0.001110,0.001616,0.002062,0.001241,0.000899,0.001174,0.001196,0.001105,0.001254,0.001253,0.001237,0.001093,0.001281,0.001260,0.001266,0.001255,0.001194,0.000995,0.001213,0.000908,0.000857,0.000902,0.000863,0.001171,0.001146,0.001074,0.000908,0.000908,0.000752,0.000618,0.000456,0.000395,0.000445,0.000503,0.000434,0.000353,0.000347,0.000373,0.000416,0.000392,0.000334,0.000271,0.000275,0.000314,0.000314,0.000317,0.000280,0.000275,0.000289,0.000253,0.000221,0.000203,0.000194,0.000194,0.000208,0.000221,0.000212,0.000185,0.000172,0.000176,0.000173,0.000178,0.000175,0.000159,0.000152,0.000150,0.000135,0.000120,0.000115,0.000119 | |||
giwavemapCBClar ftgen 0,0,128,-27, 0,0, 26,0, 32,1, 38,2, 44,3, 50,4, 54,5, 127,5 | |||
;GEN02 TABLE CONTAINING THE FUNCTION TABLE NUMBERS OF THE TABLES BETWEEN WHICH MORPHING WILL TAKE PLACE | |||
gitabs4morfCBClar ftgen 0,0,8,-2,giCBClar26,giCBClar32,giCBClar38,giCBClar44,giCBClar50,giCBClar54,giCBClar54,giCBClar54 | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
; OBOE | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
gioboe59 ftgen 0,0,4096,10,0.239013,0.078927,0.241030,0.206347,0.832266,0.054540,0.013821,0.007450,0.022905,0.021737,0.018123,0.013105,0.002361,0.001433,0.003509,0.002589,0.001326,0.000743,0.000990,0.000868,0.000863,0.000994,0.000406,0.000288,0.000288 | |||
gioboe65 ftgen 0,0,4096,10,0.199317,0.508088,0.859044,0.346880,0.121336,0.005269,0.071954,0.035188,0.012195,0.010362,0.001516,0.002397,0.004325,0.002943,0.008168,0.003519,0.002074,0.001366,0.001019,0.000715,0.000788,0.000757,0.001403,0.001108,0.001108 | |||
gioboe73 ftgen 0,0,4096,10,0.297865,0.916220,0.218345,0.030903,0.016039,0.045984,0.003571,0.006255,0.007310,0.003701,0.001306,0.001355,0.000361,0.001108,0.001552,0.000991,0.000588,0.000780,0.000678,0.001103,0.000615,0.000264,0.000310,0.000464,0.000464 | |||
gioboe81 ftgen 0,0,4096,10,0.875554,0.822621,0.094665,0.308960,0.046707,0.031827,0.002702,0.002222,0.009030,0.009257,0.007814,0.000781,0.002099,0.001154,0.002638,0.000756,0.000750,0.001290,0.000476,0.001285,0.000627,0.000379,0.000594,0.000379,0.000379 | |||
gioboe89 ftgen 0,0,4096,10,0.965505,0.344315,0.033044,0.068398,0.013147,0.008580,0.003609,0.001848,0.001060,0.001429,0.001832,0.001218,0.000703,0.000642,0.000646,0.000867,0.000550,0.000567,0.001386,0.001239,0.001416,0.001354,0.001710,0.003111,0.003111 | |||
giwavemapOboe ftgen 0,0,128,-27, 0,0, 59,0, 65,1, 73,2, 81,3, 89,4, 127,4 | |||
;GEN02 TABLE CONTAINING THE FUNCTION TABLE NUMBERS OF THE TABLES BETWEEN WHICH MORPHING WILL TAKE PLACE | |||
gitabs4morfOboe ftgen 0,0,8,-2,gioboe59,gioboe65,gioboe73,gioboe81,gioboe89,gioboe89,gioboe89,gioboe89 | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
; BASSOON | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
gibassoon34 ftgen 0,0,4096,10,0.213868,0.268493,0.244166,0.230801,0.105833,0.308087,0.556920,0.478956,0.523357,0.900665,0.213470,0.229596,0.031221,0.040117,0.067113,0.060158,0.030778,0.061028,0.143814,0.063668,0.126426,0.055009,0.049138,0.085854,0.113027,0.111464,0.088765,0.037342,0.050990,0.035579,0.040460,0.032219,0.027305,0.034141,0.019655,0.009315,0.008270,0.006748,0.006472,0.007088,0.008133,0.007046,0.007850,0.005791,0.006273,0.006847,0.007249,0.009398,0.010309,0.010418,0.010247,0.010333,0.009562,0.008180,0.009576,0.009469,0.008529,0.008844,0.008053,0.007565,0.008026,0.007284,0.007299,0.007423,0.008280,0.008374,0.008239,0.008512,0.009431,0.010246,0.010350,0.009381,0.008652,0.008150,0.007888,0.007951,0.008166,0.008210,0.007921,0.007548,0.007147,0.006991,0.006978,0.006527,0.005617,0.004781,0.004549,0.004707,0.004803,0.004640,0.004303,0.003866,0.003524,0.003348,0.003108,0.002766,0.002439,0.002278,0.002406,0.002733 | |||
gibassoon38 ftgen 0,0,4096,10,0.242897,0.242266,0.380380,0.667003,0.720921,0.402509,0.422424,0.475496,0.823674,0.135651,0.169435,0.062761,0.017494,0.023826,0.049210,0.074371,0.035978,0.086397,0.160820,0.122072,0.061609,0.020374,0.023031,0.018479,0.013838,0.015511,0.012693,0.005626,0.007015,0.007590,0.008854,0.004833,0.006678,0.008155,0.006694,0.007708,0.007823,0.004336,0.003679,0.003698,0.005616,0.004049,0.003555,0.002815,0.002166,0.001778,0.002195,0.002446,0.003427,0.003600,0.005046,0.005043,0.003980,0.002591,0.002168,0.002644,0.003363,0.004603,0.004571,0.005024,0.004653,0.004659,0.004447,0.004128,0.004325,0.004464,0.004393,0.004144,0.004285,0.004442,0.004203,0.003640,0.003229,0.003115,0.003017,0.002902,0.002799,0.002839,0.003045,0.003262,0.003391,0.003250,0.003008,0.002726,0.002506,0.002370,0.002215,0.002130,0.002058,0.001832,0.001574,0.001339,0.001133,0.001005,0.000924,0.000860,0.000849,0.000896,0.000994,0.001115 | |||
gibassoon43 ftgen 0,0,4096,10,0.101647,0.135289,0.245027,0.142720,0.728360,0.361154,0.030730,0.079698,0.011579,0.074893,0.094091,0.028910,0.084641,0.058767,0.035341,0.016688,0.006781,0.020365,0.020545,0.008172,0.007968,0.017127,0.016825,0.009248,0.003609,0.002361,0.002361,0.001409,0.001208,0.001278,0.001752,0.002711,0.002221,0.001898,0.001255,0.001150,0.001935,0.001759,0.001661,0.001219,0.001111,0.001527,0.001167,0.001290,0.001366,0.001058,0.000935,0.000898,0.000937,0.001254,0.001464,0.001695,0.002012,0.002054,0.001872,0.001370,0.001074,0.000988,0.001009,0.000959,0.000905,0.000957,0.000885,0.000825,0.000811,0.000776,0.000727,0.000696,0.000758,0.000768,0.000667,0.000604,0.000548,0.000525,0.000508,0.000485,0.000445,0.000380,0.000330,0.000307,0.000329,0.000366,0.000367,0.000334,0.000291,0.000259,0.000247,0.000265,0.000309,0.000378,0.000436,0.000425,0.000390,0.000375,0.000353,0.000328,0.000312,0.000292,0.000273,0.000269 | |||
gibassoon50 ftgen 0,0,4096,10,0.147763,0.340255,0.879202,0.404023,0.259274,0.130887,0.095096,0.039056,0.091976,0.009828,0.004879,0.013408,0.016090,0.015931,0.012402,0.003430,0.006421,0.004323,0.002018,0.001465,0.003012,0.001397,0.002446,0.002683,0.002425,0.004828,0.002422,0.002479,0.002086,0.002351,0.002269,0.002034,0.001708,0.001324,0.001927,0.002764,0.003997,0.003514,0.002736,0.002327,0.002054,0.001842,0.001577,0.002009,0.002098,0.001411,0.001019,0.000816,0.000899,0.000893,0.001005,0.001296,0.000987,0.000657,0.000539,0.000400,0.000313,0.000284,0.000331,0.000417,0.000479,0.000633,0.000798,0.000893,0.001067,0.001242,0.001260,0.001282,0.001218,0.001023,0.000887,0.000830,0.000746,0.000637,0.000553,0.000534,0.000537,0.000506,0.000482,0.000477,0.000490,0.000515,0.000532,0.000508,0.000473,0.000416,0.000336,0.000271,0.000229,0.000193,0.000170,0.000169,0.000185,0.000197,0.000205,0.000223,0.000247,0.000255,0.000248,0.000249 | |||
gibassoon56 ftgen 0,0,4096,10,0.258143,0.954570,0.553228,0.188964,0.031203,0.252375,0.179421,0.053961,0.022121,0.016058,0.006372,0.002854,0.002507,0.006348,0.006626,0.008348,0.005125,0.001342,0.001956,0.002664,0.005721,0.003529,0.004933,0.002543,0.003026,0.003332,0.001828,0.003024,0.002223,0.001464,0.001354,0.001310,0.000827,0.000966,0.001111,0.001685,0.001048,0.000806,0.000660,0.000445,0.000368,0.000436,0.000578,0.000518,0.000372,0.000346,0.000342,0.000340,0.000259,0.000272,0.000318,0.000395,0.000481,0.000454,0.000428,0.000391,0.000351,0.000302,0.000261,0.000245,0.000253,0.000249,0.000223,0.000228,0.000244,0.000217,0.000203,0.000222,0.000250,0.000271,0.000235,0.000202,0.000179,0.000160,0.000151,0.000151,0.000144,0.000126,0.000116,0.000123,0.000134,0.000140,0.000142,0.000142,0.000130,0.000117,0.000109,0.000109,0.000110,0.000111,0.000122,0.000129,0.000124,0.000116,0.000115,0.000113,0.000104,0.000092,0.000080,0.000071 | |||
gibassoon62 ftgen 0,0,4096,10,0.802206,0.854305,0.242064,0.037491,0.024258,0.012991,0.003920,0.008373,0.001787,0.001801,0.003935,0.008957,0.009944,0.004249,0.003799,0.003374,0.001734,0.004753,0.008252,0.004132,0.002330,0.001700,0.001925,0.001098,0.001154,0.001943,0.000954,0.000487,0.000432,0.000605,0.000812,0.000806,0.001001,0.001178,0.001065,0.001137,0.000877,0.000630,0.000538,0.000499,0.000605,0.000532,0.000532,0.000387,0.000288,0.000253,0.000313,0.000347,0.000292,0.000225,0.000167,0.000144,0.000121,0.000116,0.000110,0.000110,0.000119,0.000111,0.000106,0.000111,0.000115,0.000114,0.000101,0.000094,0.000100,0.000102,0.000097,0.000088,0.000079,0.000070,0.000064,0.000059,0.000054,0.000053,0.000053 | |||
gibassoon67 ftgen 0,0,4096,10,0.262539,0.973041,0.138354,0.113396,0.058172,0.030635,0.005565,0.001686,0.003483,0.001977,0.003774,0.002477,0.002439,0.001226,0.002781,0.002527,0.001020,0.000611,0.000658,0.000715,0.000728,0.000531,0.000442,0.000238,0.000414,0.000325,0.000560,0.000689,0.000445,0.000306,0.000301,0.000305,0.000296,0.000325,0.000252,0.000218,0.000248,0.000193,0.000174,0.000179,0.000143,0.000140,0.000140,0.000104,0.000096,0.000116,0.000128,0.000137,0.000144,0.000113,0.000112,0.000119,0.000140,0.000116,0.000107,0.000102 | |||
giwavemapBassoon ftgen 0,0,128,-27, 0,0, 34,0, 38,1, 43,2, 50,3, 56,4, 62,5, 67,6, 127,6 | |||
;GEN02 TABLE CONTAINING THE FUNCTION TABLE NUMBERS OF THE TABLES BETWEEN WHICH MORPHING WILL TAKE PLACE | |||
gitabs4morfBassoon ftgen 0,0,8,-2,gibassoon34,gibassoon38,gibassoon43,gibassoon50,gibassoon56,gibassoon62,gibassoon67,gibassoon67 | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
; CONTRA-BASSOON | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
giCBassoon22 ftgen 0,0,4096,10,0.497216,0.592986,0.588338,0.378063,0.343716,0.540022,0.620921,0.613540,0.848864,0.535558,0.632297,0.584663,0.443376,0.419439,0.291262,0.249631,0.256447,0.182209,0.062888,0.160047,0.156792,0.115884,0.107766,0.130415,0.183253,0.145108,0.156478,0.170472,0.185752,0.181506,0.155042,0.154256,0.167703,0.145571,0.172382,0.169936,0.191248,0.207520,0.161789,0.114105,0.096757,0.068310,0.056357,0.068193,0.048257,0.046235,0.041903,0.032361,0.023090,0.012851,0.008788,0.010598,0.010151,0.010905,0.009426,0.009439,0.012674,0.016976,0.019287,0.017791,0.014995,0.015280,0.014007,0.012293,0.013920,0.015130,0.017138,0.020001,0.026003,0.029085,0.026391,0.021776,0.018388,0.016337,0.014700,0.015521,0.019019,0.022414,0.024168,0.024006,0.023403,0.022377,0.020534,0.018428,0.016165,0.013675,0.011929,0.011056,0.010352,0.010070,0.009561,0.009378,0.008855,0.008393,0.008147,0.008048,0.008099,0.007480,0.006551,0.005481 | |||
giCBassoon26 ftgen 0,0,4096,10,0.076357,0.137793,0.174617,0.207802,0.302523,0.705801,0.162577,0.073808,0.224559,0.050465,0.066110,0.181682,0.062409,0.052317,0.037698,0.029936,0.042341,0.053436,0.135414,0.059248,0.025689,0.033567,0.051201,0.029910,0.028697,0.052991,0.059280,0.029742,0.027742,0.023801,0.013878,0.006197,0.004814,0.005139,0.007873,0.007104,0.009903,0.007952,0.008234,0.005783,0.006682,0.007272,0.006943,0.007674,0.007728,0.006326,0.005179,0.004259,0.004142,0.003705,0.002547,0.001785,0.002073,0.002887,0.004184,0.004075,0.004174,0.005101,0.004993,0.004189,0.003170,0.002599,0.002866,0.003689,0.005272,0.006515,0.007262,0.006420,0.005939,0.005247,0.004710,0.004619,0.004018,0.003371,0.002611,0.001906,0.001540,0.001341,0.001128,0.001025,0.001114,0.001151,0.001224,0.001403,0.001564,0.001709,0.001914,0.002097,0.002148,0.002190,0.002192,0.002124,0.002190,0.002485,0.002819,0.002892,0.002769,0.002559,0.002374,0.002161 | |||
giCBassoon38 ftgen 0,0,4096,10,0.240531,0.304670,0.289169,0.727482,0.578083,0.169149,0.057305,0.193624,0.167977,0.206006,0.182632,0.057408,0.103574,0.044785,0.084239,0.068303,0.030771,0.133375,0.096231,0.037016,0.046566,0.020770,0.020264,0.015211,0.029647,0.018603,0.027940,0.062861,0.033828,0.015594,0.016305,0.025478,0.034356,0.038642,0.028451,0.026747,0.014914,0.016727,0.015524,0.013236,0.014264,0.013651,0.014838,0.016490,0.021208,0.017660,0.013009,0.014867,0.013013,0.010426,0.009144,0.009462,0.009367,0.009624,0.008079,0.007399,0.009012,0.009384,0.008661,0.009051,0.009394,0.010578,0.011610,0.012184,0.010442,0.009130,0.008795,0.008468,0.010039,0.011205,0.011438,0.011489,0.010526,0.008902,0.007391,0.006198,0.005970,0.005264,0.004331,0.003874,0.003514,0.003418,0.003518,0.003409,0.003150,0.003023,0.003047,0.003199,0.003624,0.003999,0.003839,0.003629,0.003712,0.003872,0.003974,0.003836,0.003596,0.003353,0.003177,0.003070 | |||
giCBassoon50 ftgen 0,0,4096,10,0.200451,0.511764,0.153876,0.491651,0.722151,0.174751,0.087283,0.068341,0.008971,0.040014,0.041083,0.015335,0.047809,0.037606,0.038259,0.020124,0.022425,0.024747,0.016480,0.008528,0.006892,0.004131,0.005947,0.005585,0.006842,0.008448,0.015885,0.005820,0.002834,0.004626,0.003886,0.003621,0.004837,0.005276,0.002715,0.002900,0.003817,0.005081,0.005598,0.006033,0.006164,0.004260,0.003944,0.004776,0.004223,0.004351,0.004769,0.004836,0.004959,0.005380,0.004538,0.003969,0.003860,0.003536,0.003521,0.003397,0.002823,0.002162,0.002001,0.001663,0.001430,0.001505,0.001566,0.001468,0.001406,0.001439,0.001225,0.001095,0.001134,0.001316,0.001630,0.001839,0.001964,0.001940,0.001824,0.001694,0.001617,0.001526,0.001348,0.001116,0.000972,0.000973,0.001011,0.001015,0.000944,0.000785,0.000650,0.000609,0.000675,0.000782,0.000839,0.000818,0.000755,0.000661,0.000566,0.000498,0.000471,0.000478,0.000486,0.000479 | |||
giwavemapCBassoon ftgen 0,0,128,-27, 0,0, 22,0, 26,1, 38,2, 50,3, 127,3 | |||
;GEN02 TABLE CONTAINING THE FUNCTION TABLE NUMBERS OF THE TABLES BETWEEN WHICH MORPHING WILL TAKE PLACE | |||
gitabs4morfCBassoon ftgen 0,0,4,-2,giCBassoon22,giCBassoon26,giCBassoon38,giCBassoon50 | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
; VIOLIN | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
giviolin55 ftgen 0,0,4096,10,0.081672,0.785854,0.808302,0.221447,0.136644,0.103608,0.051154,0.040070,0.071067,0.358903,0.053101,0.090036,0.033729,0.068969,0.060398,0.147336,0.060769,0.055245,0.044695,0.022179,0.058528,0.083706,0.029581,0.013173;,0.013173 | |||
giviolin67 ftgen 0,0,4096,10,0.344116,0.095361,0.038223,0.090317,0.145798,0.049369,0.076997,0.057555,0.016248,0.036189,0.014161,0.008738,0.010238,0.009625,0.005588,0.004762,0.002635,0.002162,0.002822,0.002144,0.001687,0.001955,0.001870,0.001011;,0.001011 | |||
giviolin79 ftgen 0,0,4096,10,0.403041,0.281156,0.259204,0.392900,0.236559,0.108769,0.117288,0.063588,0.039483,0.018245,0.012717,0.020183,0.008506,0.017915,0.008925,0.008575,0.006947,0.008142,0.005487,0.005970,0.004402,0.003161,0.002361,0.001942;,0.001942 | |||
giviolin91 ftgen 0,0,4096,10,0.231708,0.906742,0.215622,0.092709,0.057338,0.038101,0.030758,0.023439,0.009905,0.001298,0.002108,0.000516,0.000499,0.000123,0.000642,0.000732,0.004757,0.004547,0.017582,0.033035,0.098559,0.013616,0.017674,0.019601;,0.019601 | |||
giwavemapViolin ftgen 0,0,128,-27, 0,0, 55,0, 67,1, 79,2, 91,3, 127,3 | |||
;GEN02 TABLE CONTAINING THE FUNCTION TABLE NUMBERS OF THE TABLES BETWEEN WHICH MORPHING WILL TAKE PLACE | |||
gitabs4morfViolin ftgen 0,0,4,-2,giviolin55,giviolin67,giviolin79,giviolin91 ; | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
; CELLO | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
gicello36 ftgen 0,0,4096,10,0.022943,0.412962,0.548431,0.578468,0.092241,0.116378,0.052974,0.029585,0.093977,0.119660,0.064074,0.051807,0.015094,0.094184,0.015488,0.006640,0.007091,0.011557,0.043467,0.023330,0.018118,0.026921,0.010285,0.007653,0.015306,0.023175,0.013051,0.004840,0.005658,0.010814,0.014921,0.026066,0.028334,0.015227,0.010740,0.008966,0.009389,0.012547,0.011544,0.009900,0.012403,0.013093,0.008259,0.007148,0.006129,0.004932,0.004332,0.003397,0.002497,0.002241,0.002187,0.002227,0.001634,0.001186,0.001119,0.001131,0.001276,0.000970,0.001101,0.001647,0.001936,0.001632,0.001190,0.000891,0.000883,0.000906,0.000894,0.000855,0.000768,0.000721,0.000750,0.000900,0.000965,0.000844,0.000765,0.000643,0.000535,0.000464,0.000409,0.000403,0.000489,0.000642,0.000773,0.000819,0.000871,0.000930,0.000979,0.000950,0.000781,0.000649,0.000620,0.000653,0.000661,0.000706,0.000805,0.000856,0.000832,0.000793,0.000750,0.000702 | |||
gicello48 ftgen 0,0,4096,10,0.171752,0.537455,0.217980,0.172188,0.552902,0.583964,0.452897,0.095360,0.059208,0.033024,0.126570,0.028481,0.067671,0.029869,0.055112,0.056284,0.025151,0.038689,0.027323,0.027935,0.070762,0.023514,0.016984,0.013118,0.008692,0.004591,0.002235,0.003399,0.002568,0.002224,0.002366,0.002892,0.004660,0.003562,0.002923,0.002328,0.002327,0.001705,0.001566,0.002356,0.002199,0.003381,0.006360,0.007320,0.004930,0.002809,0.002686,0.002156,0.001566,0.001273,0.001192,0.001380,0.001683,0.002133,0.003160,0.002820,0.002065,0.002097,0.002013,0.001649,0.001366,0.001053,0.000819,0.000730,0.000775,0.000937,0.001097,0.001063,0.000917,0.000815,0.000792,0.000857,0.001010,0.001203,0.001372,0.001408,0.001295,0.001173,0.001062,0.000942,0.000825,0.000761,0.000774,0.000854,0.000932,0.000968,0.000987,0.001022,0.001018,0.000944,0.000882,0.000829,0.000779,0.000734,0.000693,0.000655,0.000602,0.000547,0.000529,0.000548 | |||
gicello60 ftgen 0,0,4096,10,0.762584,0.124687,0.088950,0.091324,0.058688,0.034069,0.038828,0.065420,0.062254,0.058503,0.033332,0.014105,0.011585,0.004135,0.005176,0.004496,0.006698,0.008491,0.007044,0.003450,0.004771,0.016317,0.009897,0.007180,0.004105,0.002477,0.003995,0.002992,0.002346,0.002233,0.002558,0.002135,0.002301,0.001713,0.001191,0.001850,0.004203,0.001813,0.000969,0.001090,0.000636,0.001237,0.000844,0.001107,0.000880,0.000791,0.000640,0.000894,0.000554,0.000727,0.001041,0.001046,0.001079,0.000456,0.000410,0.000442,0.000431,0.000437,0.000427,0.000389,0.000350,0.000284,0.000269,0.000260,0.000210,0.000253,0.000328,0.000296,0.000290,0.000419,0.000452,0.000328,0.000215,0.000229,0.000333,0.000275,0.000208,0.000204,0.000163,0.000283,0.000253,0.000264,0.000178,0.000208,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000 | |||
gicello72 ftgen 0,0,4096,10,0.601382,0.263076,0.197963,0.244245,0.217992,0.114034,0.025768,0.041518,0.011954,0.006391,0.012239,0.017818,0.016819,0.012798,0.007576,0.007376,0.002891,0.021377,0.005261,0.004421,0.009226,0.004333,0.001808,0.003989,0.002078,0.001344,0.001560,0.001240,0.001586,0.001307,0.000519,0.000761,0.001009,0.000632,0.000412,0.000414,0.000361,0.000406,0.000544,0.000741,0.000281,0.000164,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000 | |||
giwavemapCello ftgen 0,0,128,-27, 0,0, 36,0, 48,1, 60,2, 72,3, 127,3 | |||
;GEN02 TABLE CONTAINING THE FUNCTION TABLE NUMBERS OF THE TABLES BETWEEN WHICH MORPHING WILL TAKE PLACE | |||
gitabs4morfCello ftgen 0,0,4,-2,gicello36,gicello48,gicello60,gicello72 ; | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
; PICCOLO | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
gipiccolo74 ftgen 0,0,4096,10,0.898113,0.247693,0.060222,0.127742,0.034019,0.044738,0.029980,0.018041,0.008219,0.009819,0.015719,0.009423,0.020117,0.011802,0.007226,0.003198,0.001597,0.002062,0.001590,0.001420,0.001087,0.000581,0.000370,0.000393,0.000393 | |||
gipiccolo80 ftgen 0,0,4096,10,0.837581,0.024769,0.144022,0.109176,0.031512,0.026122,0.004565,0.008379,0.004995,0.002685,0.003489,0.002674,0.002743,0.001129,0.000485,0.000367,0.000701,0.001563,0.001166,0.000647,0.000808,0.000622,0.000358,0.000227,0.000227 | |||
gipiccolo86 ftgen 0,0,4096,10,0.730803,0.323120,0.277720,0.044844,0.009400,0.022785,0.004602,0.005762,0.006400,0.002483,0.001490,0.002354,0.004728,0.002669,0.003175,0.001177,0.000761,0.000509,0.000449,0.000703,0.001078,0.002471,0.003905,0.004114,0.004114 | |||
gipiccolo92 ftgen 0,0,4096,10,0.883567,0.117309,0.144273,0.012664,0.016747,0.002921,0.002043,0.001429,0.002107,0.008510,0.001611,0.002330,0.000075,0.000381,0.000943,0.002268,0.001748,0.001626,0.000882,0.002765,0.003187,0.004911,0.008342,0.017209,0.017209 | |||
gipiccolo98 ftgen 0,0,4096,10,0.922186,0.144948,0.042529,0.011837,0.006901,0.000900,0.001625,0.000686,0.000507 ; ,0.000305,0.000305,0.000730,0.000922,0.001408,0.001499,0.005116,0.021056,0.151393,0.034986,0.124701,0.024182,0.008037,0.002664,0.001934,0.001934 | |||
gipiccolo106 ftgen 0,0,4096,10,0.501042,0.019695,0.008976,0.003473,0.006493,0.001700,0.002765,0.003224,0.006276 ; ,0.025062,0.036907,0.005386,0.046443,0.013720,0.005391,0.007819,0.019832,0.008441,0.006927,0.007528,0.018483,0.042516,0.057060,0.083779,0.083779 | |||
giwavemapPiccolo ftgen 0,0,128,-27, 0,0, 74,0, 80,1, 86,2, 92,3, 98,4, 106,5, 127,5 | |||
gitabs4morfPiccolo ftgen 0,0,8,-2,gipiccolo74,gipiccolo80,gipiccolo86,gipiccolo92,gipiccolo98,gipiccolo106,gipiccolo106,gipiccolo106 ; | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
; FLUTE | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
giflute59 ftgen 0,0,4096,10,0.876155,0.188136,0.766537,0.278649,0.134428,0.143342,0.201465,0.068043,0.011284,0.021093,0.021494,0.010577,0.016431,0.007352,0.006864,0.007433,0.006500,0.004716,0.004282,0.002545,0.002718,0.002045,0.001768,0.002409,0.002409 | |||
giflute65 ftgen 0,0,4096,10,0.799971,0.564039,0.327027,0.076562,0.324116,0.049951,0.035116,0.048856,0.017988,0.004316,0.007909,0.004093,0.003013,0.003329,0.001707,0.001995,0.001913,0.000937,0.001543,0.001868,0.001289,0.001463,0.001865,0.001076,0.001076 | |||
giflute71 ftgen 0,0,4096,10,0.902388,0.107786,0.423495,0.078015,0.066093,0.032990,0.012352,0.008687,0.005253,0.004091,0.001790,0.002202,0.000853,0.001228,0.000810,0.000828,0.000601,0.000593,0.000647,0.000906,0.000925,0.001111,0.001302,0.000899,0.000899 | |||
giflute77 ftgen 0,0,4096,10,0.925667,0.059839,0.214284,0.013980,0.026778,0.008733,0.019436,0.002640,0.004217,0.002126,0.003513,0.002455,0.001336,0.001508,0.001589,0.002155,0.002549,0.001951,0.001614,0.001076,0.001253,0.001138,0.001073,0.000990,0.000990 | |||
giflute83 ftgen 0,0,4096,10,0.865610,0.041090,0.054192,0.043068,0.022098,0.002450,0.005687,0.002093,0.005076,0.001357,0.003848,0.006820,0.002879,0.005038,0.002273,0.002877,0.001043,0.001188,0.000857,0.000726,0.000537,0.000320,0.000390,0.000666,0.000666 | |||
giflute89 ftgen 0,0,4096,10,0.907108,0.032221,0.007003,0.010577,0.004166,0.002274,0.001089,0.002739,0.002459,0.002194,0.001351,0.000570,0.000469,0.000388,0.000228,0.000180,0.000377,0.000470,0.000724,0.001478,0.002258,0.002625,0.006255,0.003183,0.003183 | |||
giflute95 ftgen 0,0,4096,10,0.927168,0.094811,0.014160,0.010743,0.004640,0.002540,0.000535,0.000356,0.000205,0.000147,0.000042,0.000032,0.000090,0.000201,0.000171,0.000595,0.000136,0.000338,0.000284,0.000244,0.001813,0.001310,0.002113,0.000510,0.000510 | |||
giflute98 ftgen 0,0,4096,10,0.793870,0.077609,0.047389,0.012277,0.005127,0.002760,0.002619,0.000390,0.000109,0.000105,0.000147,0.000425,0.000266,0.000201,0.000312,0.000210,0.001391,0.003570,0.001720,0.002746,0.001399,0.000749,0.000411,0.001156,0.001156 | |||
giwavemapFlute ftgen 0,0,128,-27, 0,0, 59,0, 65,1, 71,2, 77,3, 83,4, 89,5, 95,6, 98,7, 127,7 | |||
;GEN02 TABLE CONTAINING THE FUNCTION TABLE NUMBERS OF THE TABLES BETWEEN WHICH MORPHING WILL TAKE PLACE | |||
gitabs4morfFlute ftgen 0,0,8,-2,giflute59,giflute65,giflute71,giflute77,giflute83,giflute89,giflute95,giflute98 | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
; ALTO FLUTE | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
giAFlute55 ftgen 0,0,4096,10,0.821986,0.323726,0.027144,0.049562,0.045630,0.004837,0.008584,0.002449,0.002921,0.004780,0.006174,0.006496,0.009180,0.010020,0.008884,0.006397,0.007728,0.007543,0.005540,0.004643,0.004213,0.003464,0.002247,0.001529,0.001529 | |||
giAFlute61 ftgen 0,0,4096,10,0.629423,0.050378,0.078267,0.098147,0.002593,0.003473,0.002978,0.007847,0.002718,0.004264,0.004001,0.003129,0.002278,0.001767,0.001591,0.001198,0.000790,0.000910,0.000907,0.000909,0.000690,0.001006,0.000870,0.000801,0.000801 | |||
giAFlute67 ftgen 0,0,4096,10,0.734185,0.213440,0.086548,0.055143,0.004785,0.001811,0.011006,0.004212,0.001873,0.002130,0.001001,0.000376,0.000632,0.000823,0.000595,0.000764,0.000514,0.000403,0.000326,0.000317,0.000537,0.000523,0.000835,0.000743,0.000743 | |||
giAFlute76 ftgen 0,0,4096,10,0.868899,0.390848,0.052590,0.023839,0.033699,0.031143,0.013923,0.008881,0.003821,0.001797,0.003048,0.002506,0.002295,0.001878,0.001118,0.001109,0.001133,0.001732,0.002085,0.002020,0.001240,0.000963,0.000929,0.000456,0.000456 | |||
giwavemapAFlute ftgen 0,0,128,-27, 0,0, 55,0, 61,1, 67,2, 76,3, 127,3 | |||
;GEN02 TABLE CONTAINING THE FUNCTION TABLE NUMBERS OF THE TABLES BETWEEN WHICH MORPHING WILL TAKE PLACE | |||
gitabs4morfAFlute ftgen 0,0,4,-2,giAFlute55,giAFlute55,giAFlute55,giAFlute55 | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
; BASS FLUTE | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
giBFlute48 ftgen 0,0,4096,10,0.691967,0.034269,0.271945,0.033667,0.017446,0.011342,0.007238,0.006576,0.003027,0.003556,0.004425,0.004988,0.003990,0.005253,0.006140,0.003051,0.004437,0.003567,0.002838,0.001703,0.001528,0.001368,0.001703,0.001153,0.000827,0.001023,0.000899,0.000612,0.000827,0.000823,0.000948,0.001184,0.001201,0.001272,0.001032,0.001141,0.001128,0.000887,0.000790,0.000612,0.000565,0.000573,0.000586,0.000554,0.000483,0.000450,0.000404,0.000416,0.000392,0.000391,0.000327,0.000336,0.000370,0.000424,0.000460,0.000459,0.000456,0.000395,0.000319,0.000306,0.000283,0.000306,0.000338,0.000305,0.000288,0.000263,0.000247,0.000239,0.000245,0.000233,0.000190,0.000166,0.000161,0.000160,0.000150,0.000136,0.000130,0.000130,0.000126,0.000126,0.000128,0.000131,0.000131,0.000136,0.000138,0.000132,0.000122,0.000116,0.000119,0.000126,0.000122,0.000112,0.000109,0.000113,0.000118,0.000118,0.000118,0.000117,0.000116,0.000118 | |||
giBFlute54 ftgen 0,0,4096,10,0.633439,0.578363,0.200810,0.008032,0.068714,0.005615,0.005448,0.012421,0.009987,0.006289,0.004137,0.002738,0.001944,0.002935,0.003674,0.002567,0.002545,0.004116,0.003915,0.002935,0.002322,0.002647,0.003186,0.003370,0.003213,0.002193,0.001902,0.001629,0.001652,0.001274,0.001102,0.001205,0.001277,0.001134,0.001117,0.001286,0.001477,0.001607,0.002607,0.003270,0.002939,0.002558,0.001826,0.001324,0.001228,0.001070,0.001110,0.001120,0.001042,0.000924,0.000909,0.000880,0.000765,0.000674,0.000600,0.000491,0.000437,0.000441,0.000443,0.000452,0.000467,0.000527,0.000606,0.000571,0.000554,0.000518,0.000420,0.000363,0.000315,0.000275,0.000245,0.000221,0.000200,0.000202,0.000219,0.000211,0.000194,0.000187,0.000197,0.000197,0.000193,0.000201,0.000217,0.000223,0.000219,0.000213,0.000200,0.000175,0.000149,0.000131,0.000124,0.000120,0.000115,0.000111,0.000113,0.000117,0.000115,0.000107,0.000100,0.000098 | |||
giBFlute60 ftgen 0,0,4096,10,0.801592,0.068816,0.032303,0.012614,0.002660,0.014692,0.002493,0.006175,0.001826,0.001416,0.002607,0.001063,0.001542,0.001053,0.001293,0.001226,0.000781,0.001142,0.000975,0.000922,0.000693,0.000570,0.000538,0.000429,0.000587,0.000775,0.000855,0.001295,0.001190,0.000941,0.000912,0.000796,0.000662,0.000789,0.000828,0.000784,0.000614,0.000480,0.000455,0.000378,0.000334,0.000309,0.000351,0.000375,0.000427,0.000378,0.000293,0.000232,0.000224,0.000199,0.000150,0.000119,0.000100,0.000084,0.000084,0.000088,0.000085,0.000081,0.000076,0.000081,0.000080,0.000075,0.000071,0.000068,0.000063,0.000060,0.000064,0.000067,0.000065,0.000058,0.000055,0.000054,0.000054,0.000053,0.000052,0.000053,0.000053,0.000053,0.000052,0.000050,0.000049,0.000049,0.000049,0.000049,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000 | |||
giBFlute66 ftgen 0,0,4096,10,0.743019,0.068238,0.021487,0.010397,0.001744,0.013212,0.001676,0.005245,0.002049,0.001401,0.001686,0.001346,0.001288,0.000879,0.001087,0.000922,0.000878,0.000678,0.000904,0.000729,0.000481,0.000542,0.000525,0.000561,0.000481,0.000552,0.000745,0.001153,0.001211,0.001000,0.000706,0.000621,0.000613,0.000779,0.000764,0.000717,0.000619,0.000486,0.000448,0.000429,0.000341,0.000327,0.000331,0.000340,0.000340,0.000335,0.000288,0.000255,0.000233,0.000195,0.000173,0.000150,0.000127,0.000123,0.000119,0.000113,0.000111,0.000115,0.000116,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000 | |||
giBFlute72 ftgen 0,0,4096,10,0.741444,0.066744,0.018973,0.009713,0.002046,0.010742,0.001911,0.004984,0.002277,0.001308,0.001841,0.000932,0.001065,0.000889,0.001029,0.000970,0.000767,0.000708,0.000743,0.000629,0.000541,0.000457,0.000410,0.000534,0.000487,0.000489,0.000743,0.001263,0.001164,0.001062,0.000757,0.000529,0.000538,0.000606,0.000594,0.000583,0.000497,0.000463,0.000498,0.000433,0.000369,0.000363,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000 | |||
giBFlute76 ftgen 0,0,4096,10,0.745977,0.066489,0.014197,0.007352,0.002175,0.009766,0.002280,0.004362,0.001870,0.001375,0.001383,0.001328,0.001381,0.001194,0.001429,0.000949,0.000917,0.000802,0.000818,0.000932,0.000636,0.000646,0.000571,0.000575,0.000613,0.000679,0.000959,0.001343,0.001448,0.001365,0.001241,0.001091,0.001093,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000 | |||
giwavemapBFlute ftgen 0,0,128,-27, 0,0, 48,0, 54,1, 60,2, 66,3, 72,4, 76,5, 127,5 | |||
;GEN02 TABLE CONTAINING THE FUNCTION TABLE NUMBERS OF THE TABLES BETWEEN WHICH MORPHING WILL TAKE PLACE | |||
gitabs4morfBFlute ftgen 0,0,4,-2,giBFlute48,giBFlute54,giBFlute60,giBFlute66,giBFlute72,giBFlute76 | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
; AHH | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
giahh43 ftgen 0,0,4096,10,0.386674,0.073031,0.081855,0.018459,0.053239,0.061160,0.058957,0.045203,0.039489,0.065846,0.041424,0.012866,0.006504,0.005909,0.005469,0.003737,0.003814,0.002639,0.002638,0.003016,0.004285,0.006226,0.007688,0.008839,0.014596,0.028866,0.037921,0.022164,0.015744,0.007756,0.005050,0.007234,0.008132,0.006564,0.005699,0.007003,0.007011,0.005459,0.004080,0.003820,0.004403,0.004661,0.005385,0.007278,0.009647,0.010877,0.012884,0.014945,0.015339,0.012290,0.009204,0.008363,0.007093,0.005203,0.003328,0.002161,0.001538,0.001215,0.001037,0.001033,0.001172,0.001483,0.002127,0.002644,0.002412,0.001679,0.001068,0.000848,0.000972,0.001425,0.002263,0.003492,0.004427,0.004100,0.003201,0.002484,0.002255,0.002495,0.003139,0.004136,0.005259,0.005878,0.005432,0.004477,0.003617,0.002973,0.002606,0.002518,0.002611,0.002863,0.003395,0.004095,0.004529,0.004686,0.004927,0.005437,0.006092,0.006727,0.007073,0.006966 | |||
giahh49 ftgen 0,0,4096,10,0.600063,0.256340,0.126445,0.040717,0.097956,0.082383,0.135342,0.006369,0.002414,0.002312,0.001526,0.000552,0.000868,0.000435,0.000576,0.001145,0.001706,0.003688,0.013234,0.006626,0.006840,0.012971,0.003639,0.002955,0.001962,0.001988,0.000831,0.000533,0.000748,0.000490,0.000674,0.001431,0.002663,0.002680,0.002874,0.003227,0.001837,0.000874,0.000662,0.000901,0.001630,0.002139,0.001816,0.001233,0.000817,0.000658,0.000730,0.000864,0.001037,0.001616,0.002390,0.002487,0.002363,0.002429,0.002624,0.002971,0.002486,0.001530,0.000895,0.000669,0.000806,0.001085,0.001185,0.001002,0.000857,0.000900,0.001009,0.001198,0.001398,0.001306,0.001302,0.001562,0.001670,0.001440,0.001105,0.000872,0.000746,0.000748,0.000770,0.000788,0.000890,0.000973,0.000896,0.000716,0.000598,0.000536,0.000492,0.000469,0.000443,0.000384,0.000317,0.000262,0.000209,0.000162,0.000129,0.000110,0.000102,0.000099,0.000099,0.000096 | |||
giahh55 ftgen 0,0,4096,10,0.667225,0.194524,0.098683,0.096875,0.021209,0.006311,0.002978,0.001013,0.001249,0.001446,0.002393,0.004826,0.018741,0.012161,0.010480,0.005261,0.004569,0.001376,0.001132,0.003605,0.001846,0.002757,0.005346,0.004712,0.004806,0.002357,0.001109,0.001302,0.001860,0.001054,0.001120,0.001642,0.002240,0.004382,0.005473,0.003755,0.002444,0.002088,0.001822,0.000946,0.000790,0.001222,0.001653,0.001374,0.001401,0.002118,0.002061,0.001470,0.001198,0.001635,0.002387,0.002248,0.001327,0.000951,0.000884,0.000844,0.000805,0.000667,0.000669,0.000701,0.000591,0.000445,0.000367,0.000314,0.000272,0.000225,0.000179,0.000152,0.000164,0.000169,0.000151,0.000144,0.000137,0.000121,0.000115,0.000123,0.000125,0.000116,0.000102,0.000095,0.000102,0.000120,0.000135,0.000132,0.000117,0.000100,0.000084,0.000074,0.000072,0.000075,0.000077,0.000079,0.000083,0.000083,0.000081,0.000082,0.000084,0.000081,0.000074,0.000063 | |||
giahh61 ftgen 0,0,4096,10,0.701578,0.444091,0.390732,0.103519,0.007759,0.002497,0.001883,0.001103,0.001729,0.001889,0.001679,0.002455,0.000872,0.000433,0.001071,0.001382,0.002270,0.001077,0.000930,0.000940,0.001143,0.001633,0.001901,0.001446,0.002619,0.003724,0.002339,0.001969,0.001199,0.000674,0.001015,0.001321,0.001504,0.001378,0.000778,0.000682,0.001100,0.001312,0.001438,0.001513,0.000928,0.000466,0.000374,0.000410,0.000492,0.000515,0.000367,0.000230,0.000171,0.000169,0.000209,0.000236,0.000189,0.000194,0.000205,0.000196,0.000184,0.000168,0.000186,0.000223,0.000241,0.000197,0.000144,0.000113,0.000100,0.000101,0.000097,0.000088,0.000075,0.000067,0.000060,0.000051,0.000044,0.000040,0.000036,0.000034,0.000033,0.000033,0.000033,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000 | |||
giahh67 ftgen 0,0,4096,10,0.836515,0.800602,0.036351,0.016206,0.006383,0.007973,0.003273,0.011820,0.001230,0.001857,0.003725,0.004792,0.002586,0.008972,0.005518,0.007339,0.005207,0.006633,0.005670,0.005010,0.005379,0.002919,0.004501,0.004490,0.002854,0.003643,0.005161,0.002824,0.002183,0.001438,0.001060,0.000978,0.001138,0.001729,0.001501,0.001117,0.000626,0.000578,0.000512,0.000294,0.000255,0.000311,0.000397,0.000310,0.000205,0.000188,0.000179,0.000164,0.000172,0.000143,0.000115,0.000095,0.000084,0.000081,0.000080,0.000080,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000 | |||
giwavemapAhh ftgen 0,0,128,-27, 0,0, 43,0, 49,1, 55,2, 61,3, 67,4, 127,4 | |||
;GEN02 TABLE CONTAINING THE FUNCTION TABLE NUMBERS OF THE TABLES BETWEEN WHICH MORPHING WILL TAKE PLACE | |||
gitabs4morfAhh ftgen 0,0,8,-2,giahh43,giahh49,giahh55,giahh61,giahh67,giahh67,giahh67,giahh67 | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
; HORN P | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
giHornP38 ftgen 0,0,4096,10,0.045737,0.148188,0.335691,0.493464,0.710665,0.765723,0.694286,0.628629,0.521398,0.428206,0.365416,0.306040,0.298023,0.254152,0.201721,0.154086,0.161771,0.146790,0.124044,0.110268,0.091099,0.076808,0.057743,0.042724,0.042724 | |||
giHornP50 ftgen 0,0,4096,10,0.280951,0.717837,0.823404,0.588908,0.394696,0.286430,0.176355,0.118365,0.064524,0.033209,0.016001,0.004104,0.004396,0.002069,0.002350,0.001903,0.001098,0.001262,0.001129,0.000906,0.000543,0.000575,0.000427,0.000355,0.000355 | |||
giHornP62 ftgen 0,0,4096,10,0.495327,0.909763,0.613398,0.368832,0.202553,0.124640,0.046586,0.011810,0.012510,0.011370,0.006659,0.004564,0.002331,0.001790,0.000667,0.000538,0.000352,0.000302,0.000558,0.000794,0.000797,0.000331,0.000342,0.000389,0.000389 | |||
giHornP74 ftgen 0,0,4096,10,0.796534,0.226262,0.060526,0.013273,0.003161,0.001015,0.001071,0.000595,0.000191,0.000337,0.000199,0.000173,0.000183,0.000187,0.000105,0.000113,0.000156,0.000119,0.000098,0.000067,0.000066,0.000064,0.000054,0.000043,0.000043 | |||
;GEN02 TABLE CONTAINING THE FUNCTION TABLE NUMBERS OF THE TABLES BETWEEN WHICH MORPHING WILL TAKE PLACE | |||
giwavemapHornP ftgen 0,0,128,-27, 0,0, 38,0, 50,1, 62,2, 74,3, 127,3 | |||
gitabs4morfHornP ftgen 0,0,4,-2,giHornP38,giHornP50,giHornP62,giHornP74 | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
; HORN F | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
giHornF38 ftgen 0,0,4096,10,0.150333,0.205756,0.869097,0.723941,0.707935,0.116871,0.238125,0.330962,0.443031,0.325212,0.131256,0.267361,0.273576,0.146568,0.209758,0.158564,0.179271,0.084668,0.112177,0.118845,0.124993,0.096945,0.128906,0.125534,0.125534 | |||
giHornF50 ftgen 0,0,4096,10,0.348154,0.319965,0.418661,0.396206,0.046368,0.198167,0.035091,0.107400,0.035358,0.066696,0.053722,0.045581,0.066494,0.109943,0.059354,0.050001,0.123615,0.052990,0.032207,0.039448,0.051629,0.014079,0.014571,0.017523,0.017523 | |||
giHornF62 ftgen 0,0,4096,10,0.449507,0.544173,0.108516,0.300530,0.163030,0.351952,0.171674,0.202505,0.098101,0.066418,0.044492,0.071036,0.074224,0.064911,0.027430,0.041991,0.022245,0.017689,0.013130,0.020853,0.016891,0.038363,0.017524,0.016841,0.016841 | |||
giHornF74 ftgen 0,0,4096,10,0.923831,0.259141,0.262670,0.175552,0.089346,0.073056,0.055113,0.031968,0.027964,0.033656,0.035303,0.010920,0.019420,0.013447,0.012944,0.006111,0.007041,0.003864,0.005702,0.004615,0.003076,0.001589,0.002756,0.001234,0.001234 | |||
;GEN02 TABLE CONTAINING THE FUNCTION TABLE NUMBERS OF THE TABLES BETWEEN WHICH MORPHING WILL TAKE PLACE | |||
giwavemapHornF ftgen 0,0,128,-27, 0,0, 38,0, 50,1, 62,2, 74,3, 127,3 | |||
gitabs4morfHornF ftgen 0,0,4,-2,giHornF38,giHornF50,giHornF62,giHornF74 | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
; BASS TROMBONE (HARMON MUTE) | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
giharmon33 ftgen 0,0,4096,10,0.875348,0.155770,0.111939,0.181031,0.355046,0.044216,0.039025,0.036422,0.074587,0.050492,0.042464,0.079868,0.121542,0.243299,0.253642,0.263571,0.422410,0.624259,0.742333,0.514304,0.760971,0.444426,0.456583,0.195508,0.070084,0.032239,0.029621,0.058523,0.044442,0.057324,0.077997,0.047218,0.046215,0.023786,0.017859,0.017652,0.012055,0.009595,0.009020,0.006000,0.004077,0.004950,0.004543,0.003196,0.002659,0.003533,0.004156,0.003745,0.002471,0.002264,0.003050,0.002614,0.001944,0.001709,0.001717,0.001934,0.002458,0.003618,0.004915,0.004334,0.003733,0.003804,0.003489,0.002755,0.002427,0.002273,0.002577,0.002702,0.002483,0.002059,0.002016,0.002214,0.002215,0.001947,0.001952,0.002236,0.002357,0.002417,0.002406,0.002309,0.002176,0.002227,0.002527,0.002649,0.002448,0.002165,0.002175,0.002322,0.002371,0.002202,0.001845,0.001620,0.001626,0.001927,0.002537,0.003091,0.003220,0.003231,0.003453,0.003751 | |||
giharmon34 ftgen 0,0,4096,10,0.443604,0.040301,0.041393,0.115682,0.622143,0.055550,0.073493,0.090539,0.109410,0.039052,0.138611,0.161174,0.290931,0.212197,0.410393,0.749789,0.917784,1.375368,0.934044,0.781551,0.356416,0.290222,0.181279,0.061983,0.081959,0.039112,0.044805,0.058922,0.022274,0.022731,0.038966,0.025063,0.031263,0.030753,0.032383,0.045020,0.032652,0.027144,0.033411,0.020397,0.015121,0.017071,0.014804,0.013636,0.012149,0.012930,0.014231,0.012821,0.011342,0.009001,0.008587,0.006187,0.005928,0.008836,0.012118,0.012242,0.009968,0.009445,0.006852,0.004519,0.002870,0.001975,0.001680,0.001593,0.001930,0.002744,0.003798,0.003938,0.003311,0.003174,0.003465,0.004740,0.006267,0.006620,0.006071,0.005274,0.005318,0.005795,0.006440,0.007152,0.007792,0.008192,0.007304,0.005765,0.004397,0.003369,0.002855,0.003059,0.003731,0.004377,0.004923,0.005763,0.006567,0.006834,0.006780,0.006575,0.005922,0.004714,0.003481,0.002696 | |||
giharmon36 ftgen 0,0,4096,10,0.934870,0.094639,0.263729,0.103300,0.556951,0.047384,0.167404,0.119804,0.122737,0.048833,0.154640,0.111318,0.302046,0.230750,0.517436,0.259307,0.354474,0.152230,0.109031,0.091431,0.071065,0.027335,0.037383,0.048534,0.033460,0.066084,0.041563,0.049933,0.029361,0.032804,0.017292,0.018054,0.023006,0.019576,0.018461,0.008645,0.007040,0.005924,0.005415,0.003713,0.003447,0.002816,0.003594,0.003583,0.002658,0.001561,0.001446,0.002347,0.003707,0.005343,0.007152,0.006970,0.005630,0.004404,0.002749,0.002098,0.002393,0.001708,0.001255,0.001150,0.001263,0.001445,0.001397,0.001331,0.001510,0.001783,0.001849,0.001576,0.001508,0.001400,0.001153,0.000940,0.000797,0.000734,0.000677,0.000581,0.000531,0.000644,0.000829,0.000891,0.000846,0.000864,0.000921,0.000980,0.000945,0.000994,0.001078,0.001054,0.000936,0.000863,0.000855,0.000855,0.000757,0.000683,0.000687,0.000667,0.000654,0.000639,0.000610,0.000586 | |||
giharmon38 ftgen 0,0,4096,10,0.275894,0.119750,0.302577,0.931731,0.080509,0.210351,0.194035,0.223110,0.137304,0.197845,0.327194,0.349699,0.653623,0.881895,0.939789,0.691399,0.569520,0.195895,0.129254,0.040633,0.094914,0.073078,0.145254,0.105583,0.162773,0.080818,0.095817,0.054832,0.079542,0.059357,0.055196,0.036903,0.021942,0.019084,0.020925,0.014726,0.013288,0.012653,0.010311,0.008738,0.008159,0.006852,0.004697,0.006565,0.011392,0.016788,0.018297,0.017879,0.015021,0.009463,0.005643,0.005105,0.004046,0.004010,0.005012,0.004282,0.003406,0.003104,0.003782,0.005116,0.003975,0.002459,0.001720,0.001650,0.002105,0.002882,0.003694,0.004103,0.003070,0.001947,0.001446,0.001258,0.001170,0.001349,0.001876,0.002582,0.002853,0.002391,0.002009,0.001887,0.001808,0.001514,0.001333,0.001265,0.001131,0.001082,0.001169,0.001278,0.001225,0.001070,0.000913,0.000800,0.000767,0.000799,0.000824,0.000902,0.001003,0.001061,0.001115,0.001185 | |||
giharmon39 ftgen 0,0,4096,10,0.215899,0.043569,0.155862,0.915877,0.029041,0.085938,0.096861,0.027476,0.042161,0.045780,0.077178,0.073681,0.292899,0.268475,0.052870,0.047343,0.020451,0.005226,0.004051,0.013123,0.014796,0.018766,0.016900,0.010549,0.011430,0.006502,0.006649,0.009883,0.007521,0.005298,0.002202,0.001505,0.001267,0.001744,0.001762,0.001880,0.001510,0.001300,0.001551,0.001113,0.001344,0.002682,0.004692,0.003899,0.003280,0.002211,0.001351,0.000889,0.000702,0.000681,0.000890,0.000985,0.000873,0.001082,0.000955,0.001016,0.001084,0.000930,0.000860,0.000656,0.000607,0.000724,0.000840,0.000859,0.000735,0.000640,0.000553,0.000553,0.000664,0.000694,0.000736,0.000846,0.000794,0.000763,0.000690,0.000686,0.000654,0.000659,0.000732,0.000714,0.000736,0.000748,0.000741,0.000620,0.000514,0.000484,0.000540,0.000707,0.000958,0.001141,0.001115,0.001012,0.000967,0.000906,0.000789,0.000653,0.000550,0.000512,0.000523,0.000521 | |||
giharmon40 ftgen 0,0,4096,10,0.369055,0.131998,0.314332,0.267587,0.083279,0.197505,0.246057,0.188865,0.247543,0.447904,0.311578,0.951654,0.440089,0.497270,0.248691,0.084689,0.024288,0.043815,0.092522,0.149863,0.063883,0.137365,0.089276,0.106339,0.067676,0.038080,0.044355,0.030311,0.016710,0.009404,0.009432,0.010647,0.009912,0.005595,0.004133,0.004025,0.003963,0.005248,0.007884,0.011332,0.009707,0.007295,0.004440,0.003429,0.004551,0.003060,0.002116,0.001763,0.001514,0.002027,0.002310,0.003069,0.002321,0.001811,0.001688,0.002021,0.001926,0.001770,0.001680,0.001534,0.001470,0.001491,0.001508,0.001391,0.001324,0.001260,0.001327,0.001406,0.001495,0.001338,0.001292,0.001395,0.001369,0.001408,0.001332,0.001258,0.001360,0.001502,0.001505,0.001392,0.001389,0.001469,0.001354,0.001230,0.001168,0.001229,0.001270,0.001296,0.001299,0.001384,0.001495,0.001524,0.001735,0.002015,0.002003,0.001730,0.001490,0.001313,0.001201,0.001201 | |||
giharmon41 ftgen 0,0,4096,10,0.338560,0.097872,0.404630,0.072213,0.101149,0.122271,0.088489,0.206809,0.295859,0.455726,0.802773,0.963091,0.671085,0.510166,0.125095,0.028121,0.044968,0.022808,0.033809,0.020551,0.006760,0.009093,0.007270,0.015331,0.017393,0.011093,0.005257,0.003771,0.002662,0.001862,0.002670,0.003093,0.003083,0.002636,0.001647,0.002030,0.003615,0.005828,0.005317,0.003389,0.002213,0.002189,0.002077,0.001392,0.000953,0.000899,0.000930,0.001189,0.001829,0.001616,0.001463,0.001355,0.001413,0.001368,0.001472,0.001201,0.000951,0.000804,0.000750,0.000839,0.001162,0.001540,0.001515,0.001241,0.001296,0.001396,0.001129,0.000785,0.000579,0.000562,0.000702,0.000938,0.001154,0.001155,0.001088,0.001192,0.001489,0.001693,0.001713,0.001549,0.001472,0.001606,0.001560,0.001278,0.001057,0.001106,0.001217,0.001127,0.001002,0.000959,0.000869,0.000789,0.000751,0.000712,0.000744,0.000874,0.001032,0.001112,0.001055,0.001033 | |||
giharmon43 ftgen 0,0,4096,10,0.135645,0.120943,0.979143,0.023489,0.114683,0.114072,0.130730,0.180948,0.281652,0.683720,0.964428,0.306787,0.213682,0.058648,0.025209,0.025596,0.047105,0.038846,0.017756,0.006258,0.005601,0.010206,0.010689,0.004381,0.002744,0.002982,0.002040,0.002284,0.001570,0.001528,0.002115,0.001649,0.002514,0.003304,0.005338,0.002902,0.001301,0.000713,0.000665,0.000652,0.000695,0.000698,0.000700,0.001056,0.000728,0.000485,0.000534,0.000633,0.000450,0.000429,0.000625,0.000827,0.001012,0.001160,0.001256,0.001213,0.001133,0.001362,0.001533,0.001305,0.001367,0.001616,0.001627,0.001417,0.001458,0.001637,0.001588,0.001552,0.001476,0.001327,0.001247,0.001076,0.000857,0.000699,0.000670,0.000726,0.000750,0.000854,0.000976,0.000936,0.000830,0.000768,0.000683,0.000599,0.000530,0.000491,0.000451,0.000398,0.000378,0.000368,0.000380,0.000455,0.000533,0.000535,0.000501,0.000464,0.000470,0.000496,0.000480,0.000442 | |||
giharmon45 ftgen 0,0,4096,10,0.244591,0.267325,0.126930,0.136762,0.271635,0.312002,0.223921,0.477139,0.969260,0.621811,0.276235,0.133028,0.017955,0.053396,0.048589,0.033493,0.018488,0.024467,0.024072,0.021974,0.013672,0.005364,0.005982,0.003607,0.001893,0.001866,0.001242,0.001433,0.001334,0.002488,0.002930,0.001518,0.001627,0.002275,0.001495,0.001193,0.000972,0.000737,0.000811,0.001235,0.001057,0.000838,0.001036,0.001047,0.001114,0.001012,0.000995,0.001090,0.001298,0.001286,0.001257,0.001216,0.001222,0.001045,0.001114,0.001441,0.001842,0.001582,0.001233,0.001180,0.001395,0.001374,0.001319,0.001317,0.001143,0.001024,0.001053,0.001334,0.001740,0.001862,0.001603,0.001274,0.001051,0.001022,0.000939,0.000839,0.000784,0.000794,0.000787,0.000752,0.000772,0.000742,0.000760,0.000882,0.001044,0.001103,0.001124,0.001129,0.001259,0.001523,0.001689,0.001631,0.001499,0.001332,0.001219,0.001138,0.001037,0.000952,0.000828,0.000746 | |||
giharmon46 ftgen 0,0,4096,10,0.315815,0.844525,0.164412,0.451756,0.585703,0.518759,0.681565,0.411064,0.952335,0.494514,0.366224,0.049949,0.050057,0.056689,0.053659,0.035965,0.043860,0.032015,0.019827,0.005201,0.006601,0.005746,0.007203,0.005429,0.003518,0.004758,0.003756,0.007828,0.015721,0.006418,0.003773,0.007304,0.003491,0.004073,0.002821,0.001771,0.002371,0.001798,0.002341,0.002659,0.003029,0.001998,0.001673,0.001293,0.000985,0.001051,0.001602,0.002316,0.002076,0.001608,0.001182,0.001234,0.001509,0.002038,0.001745,0.001690,0.001788,0.002285,0.002474,0.002206,0.002242,0.002438,0.002520,0.003014,0.003823,0.004834,0.005921,0.005640,0.004222,0.003103,0.002822,0.003289,0.003754,0.003426,0.002719,0.002201,0.001856,0.001927,0.002461,0.002893,0.002831,0.002430,0.002388,0.002815,0.003393,0.003964,0.004124,0.003523,0.002801,0.002546,0.002599,0.002485,0.002105,0.001812,0.001794,0.001803,0.001606,0.001468,0.001509,0.001549 | |||
giharmon48 ftgen 0,0,4096,10,0.122676,0.220788,0.073432,0.127649,0.149907,0.310663,0.320023,0.888642,0.333339,0.133323,0.020148,0.021610,0.031312,0.019058,0.010338,0.008856,0.009259,0.004665,0.008040,0.006064,0.004765,0.002412,0.001080,0.002281,0.002107,0.003516,0.001246,0.000827,0.000714,0.001050,0.000701,0.000675,0.000523,0.000934,0.001128,0.001435,0.000766,0.000427,0.000568,0.000725,0.001140,0.001379,0.000939,0.000679,0.000677,0.000639,0.000687,0.000664,0.000490,0.000511,0.000557,0.000610,0.000728,0.001052,0.001004,0.000764,0.000789,0.000916,0.000909,0.001108,0.000978,0.000656,0.000487,0.000484,0.000484,0.000521,0.000592,0.000647,0.000545,0.000494,0.000588,0.000761,0.000868,0.000902,0.000912,0.000928,0.000781,0.000667,0.000669,0.000665,0.000649,0.000608,0.000541,0.000459,0.000419,0.000435,0.000481,0.000492,0.000493,0.000550,0.000622,0.000616,0.000575,0.000571,0.000566,0.000520,0.000445,0.000380,0.000345,0.000334 | |||
giharmon50 ftgen 0,0,4096,10,0.162293,0.952587,0.107970,0.148379,0.162877,0.302263,0.378248,0.526544,0.202053,0.019075,0.035439,0.025852,0.023804,0.025676,0.028522,0.013081,0.004084,0.002802,0.001949,0.002297,0.001565,0.001596,0.004229,0.004413,0.001504,0.001251,0.001021,0.001404,0.001139,0.001161,0.000682,0.000466,0.000926,0.000495,0.000656,0.000798,0.001105,0.000691,0.000515,0.000562,0.000460,0.000566,0.000474,0.000481,0.000452,0.000510,0.000694,0.000487,0.000439,0.000584,0.000605,0.000623,0.000670,0.000916,0.000792,0.000871,0.000636,0.000514,0.000540,0.000466,0.000488,0.000461,0.000448,0.000510,0.000642,0.000795,0.000743,0.000838,0.001039,0.001142,0.000966,0.000733,0.000659,0.000657,0.000595,0.000548,0.000480,0.000411,0.000427,0.000488,0.000580,0.000723,0.000773,0.000693,0.000563,0.000471,0.000412,0.000429,0.000481,0.000468,0.000408,0.000367,0.000352,0.000329,0.000288,0.000260,0.000253,0.000249,0.000251,0.000257 | |||
giharmon52 ftgen 0,0,4096,10,0.167672,0.198778,0.227405,0.284738,0.650198,0.940684,0.975647,0.268741,0.049829,0.071939,0.024052,0.019628,0.020109,0.016231,0.003867,0.003960,0.004551,0.001438,0.002545,0.005214,0.004055,0.001727,0.002282,0.002593,0.001856,0.002206,0.001924,0.000871,0.000924,0.001558,0.001059,0.001121,0.001112,0.001260,0.001747,0.001193,0.000757,0.001035,0.000862,0.000951,0.001089,0.001598,0.001563,0.001170,0.001427,0.001409,0.001130,0.001424,0.001095,0.000785,0.000800,0.001135,0.001025,0.001093,0.000966,0.001083,0.001357,0.001272,0.001103,0.001508,0.002036,0.001512,0.001143,0.001348,0.001716,0.001528,0.001151,0.000935,0.001007,0.001124,0.000930,0.000715,0.000611,0.000658,0.000759,0.000788,0.000734,0.000745,0.000773,0.000916,0.001069,0.001056,0.000942,0.000778,0.000676,0.000670,0.000675,0.000675,0.000644,0.000597,0.000550,0.000537,0.000555,0.000559,0.000525,0.000454,0.000404,0.000407,0.000442,0.000480 | |||
giharmon53 ftgen 0,0,4096,10,0.026511,0.043338,0.103983,0.172681,0.197084,0.979650,0.257547,0.017830,0.077807,0.064492,0.041376,0.053973,0.027216,0.006355,0.007006,0.001571,0.001221,0.001837,0.007442,0.004872,0.002662,0.002280,0.002188,0.001493,0.002889,0.002534,0.002305,0.002344,0.001085,0.001468,0.002010,0.002087,0.000876,0.000665,0.000602,0.000985,0.000607,0.000521,0.000609,0.000586,0.000566,0.000481,0.000501,0.000665,0.000626,0.000653,0.000579,0.000643,0.000690,0.000651,0.000432,0.000403,0.000504,0.000532,0.000598,0.000456,0.000369,0.000393,0.000370,0.000313,0.000265,0.000292,0.000299,0.000335,0.000381,0.000415,0.000449,0.000480,0.000399,0.000307,0.000245,0.000249,0.000338,0.000468,0.000545,0.000532,0.000495,0.000471,0.000476,0.000450,0.000388,0.000331,0.000297,0.000269,0.000233,0.000202,0.000188,0.000169,0.000158,0.000175,0.000208,0.000254,0.000316,0.000380,0.000433,0.000473,0.000499,0.000504,0.000472,0.000425 | |||
giharmon55 ftgen 0,0,4096,10,0.081729,0.021968,0.138971,0.239901,0.947997,0.478402,0.152261,0.093610,0.063734,0.039617,0.032944,0.006609,0.015447,0.010428,0.006706,0.002730,0.013404,0.010554,0.003963,0.002958,0.000885,0.000799,0.001120,0.001680,0.001729,0.001274,0.001362,0.000943,0.002299,0.001254,0.001112,0.000960,0.001034,0.000866,0.000912,0.000751,0.001101,0.000945,0.000888,0.000760,0.000758,0.000764,0.000797,0.000790,0.000657,0.000779,0.000816,0.000819,0.000797,0.000793,0.000830,0.000803,0.000678,0.000695,0.000912,0.000796,0.000686,0.000833,0.000798,0.000772,0.000941,0.000835,0.000815,0.000695,0.000533,0.000448,0.000405,0.000411,0.000492,0.000554,0.000576,0.000587,0.000573,0.000542,0.000560,0.000560,0.000557,0.000544,0.000547,0.000555,0.000551,0.000537,0.000544,0.000557,0.000533,0.000512,0.000499,0.000514,0.000548,0.000548,0.000539,0.000526,0.000511,0.000513,0.000513,0.000510,0.000506,0.000503,0.000507,0.000508 | |||
giharmon57 ftgen 0,0,4096,10,0.150966,0.141943,0.169272,0.391010,0.953809,0.119929,0.039950,0.075251,0.042294,0.016963,0.005858,0.005238,0.002857,0.003841,0.008582,0.001485,0.001148,0.002596,0.001639,0.001556,0.002197,0.001142,0.001112,0.001195,0.001136,0.001245,0.000909,0.001301,0.000937,0.000941,0.001212,0.001227,0.000900,0.000862,0.000883,0.000728,0.001073,0.001100,0.000883,0.001160,0.000948,0.000936,0.001199,0.000883,0.000791,0.000945,0.000697,0.000592,0.000626,0.000588,0.000617,0.000696,0.000684,0.000803,0.000743,0.000641,0.000514,0.000453,0.000480,0.000536,0.000586,0.000581,0.000619,0.000622,0.000602,0.000589,0.000589,0.000600,0.000582,0.000552,0.000553,0.000557,0.000549,0.000526,0.000512,0.000519,0.000533,0.000535,0.000547,0.000544,0.000539,0.000534,0.000524,0.000512,0.000502,0.000502,0.000502,0.000497,0.000480,0.000468,0.000466,0.000464,0.000461,0.000459,0.000463,0.000470,0.000477,0.000482,0.000483,0.000488 | |||
giharmon60 ftgen 0,0,4096,10,0.306985,0.126374,0.301596,0.969500,0.074344,0.009729,0.006039,0.004002,0.001666,0.001675,0.002331,0.000674,0.000730,0.000729,0.000758,0.000585,0.000577,0.000687,0.000657,0.001017,0.000768,0.000581,0.000549,0.000326,0.000290,0.000463,0.000666,0.000567,0.000312,0.000634,0.000665,0.000397,0.000264,0.000232,0.000286,0.000583,0.000629,0.000663,0.000354,0.000268,0.000259,0.000263,0.000303,0.000274,0.000231,0.000322,0.000471,0.000473,0.000488,0.000569,0.000596,0.000564,0.000445,0.000430,0.000473,0.000519,0.000490,0.000446,0.000488,0.000475,0.000372,0.000301,0.000312,0.000304,0.000374,0.000526,0.000614,0.000564,0.000443,0.000349,0.000321,0.000320,0.000292,0.000243,0.000210,0.000227,0.000301,0.000393,0.000452,0.000473,0.000454,0.000415,0.000375,0.000353,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000 | |||
giharmon62 ftgen 0,0,4096,10,0.969106,0.095726,0.196065,0.188016,0.005133,0.010386,0.004868,0.005030,0.003515,0.002819,0.002632,0.002361,0.001260,0.000235,0.000966,0.001186,0.001018,0.000871,0.001416,0.000300,0.000430,0.000824,0.000912,0.000810,0.000516,0.000452,0.000279,0.000463,0.000690,0.000443,0.000429,0.000374,0.000579,0.000876,0.000457,0.000456,0.000449,0.000577,0.000797,0.000538,0.000571,0.000564,0.000466,0.000418,0.000306,0.000321,0.000334,0.000294,0.000244,0.000204,0.000231,0.000265,0.000340,0.000422,0.000467,0.000400,0.000291,0.000221,0.000207,0.000236,0.000249,0.000246,0.000207,0.000188,0.000203,0.000210,0.000206,0.000193,0.000167,0.000155,0.000192,0.000247,0.000284,0.000296,0.000308,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000 | |||
giharmon64 ftgen 0,0,4096,10,0.361663,0.582855,0.979701,0.215161,0.118878,0.052107,0.013704,0.009061,0.004379,0.007958,0.002817,0.003129,0.003908,0.003040,0.002896,0.002083,0.002113,0.004424,0.003621,0.002331,0.002616,0.002100,0.002293,0.001878,0.002282,0.002077,0.002490,0.002088,0.001811,0.001576,0.001425,0.001407,0.001400,0.001482,0.001847,0.001816,0.001426,0.001730,0.001541,0.001272,0.001398,0.001231,0.001332,0.001350,0.001199,0.001258,0.001149,0.001243,0.001247,0.001156,0.001074,0.001049,0.001142,0.001143,0.001058,0.000978,0.000854,0.000777,0.000688,0.000751,0.000914,0.001100,0.001101,0.001029,0.001044,0.001018,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000 | |||
giharmon65 ftgen 0,0,4096,10,0.314097,0.342771,0.973682,0.028876,0.015118,0.012713,0.002418,0.005174,0.003787,0.002218,0.002249,0.001625,0.002664,0.001830,0.002581,0.001180,0.001626,0.001619,0.001315,0.001513,0.001344,0.001175,0.000964,0.001112,0.001416,0.001129,0.001190,0.001045,0.001248,0.001029,0.000799,0.000750,0.000815,0.000965,0.000955,0.000725,0.000652,0.000709,0.000801,0.000717,0.000786,0.000648,0.000597,0.000630,0.000744,0.000667,0.000613,0.000496,0.000535,0.000596,0.000603,0.000583,0.000599,0.000593,0.000594,0.000603,0.000579,0.000588,0.000623,0.000624,0.000595,0.000573,0.000574,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000 | |||
;GEN02 TABLE CONTAINING THE FUNCTION TABLE NUMBERS OF THE TABLES BETWEEN WHICH MORPHING WILL TAKE PLACE | |||
giwavemapharmon ftgen 0,0,128,-27, 0,0, 33,0, 34,1, 36,2, 38,3, 39,3, 40,4, 41,5, 43,6, 45,7, 46,8, 48,9, 50,10, 52,11, 53,12, 55,13, 57,14, 60,15, 62,16, 64,17, 65,18, 127,18 | |||
gitabs4morfharmon ftgen 0,0,32,-2, giharmon33,giharmon34,giharmon36,giharmon38,giharmon39,giharmon40,giharmon41,giharmon43,giharmon45,giharmon46,giharmon48,giharmon50,giharmon52,giharmon53,giharmon55,giharmon57,giharmon60,giharmon62,giharmon64,giharmon65,giharmon65,giharmon65,giharmon65,giharmon65,giharmon65,giharmon65,giharmon65,giharmon65,giharmon65,giharmon65,giharmon65,giharmon65 | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
; BASS TROMBONE (STRAIGHT MUTE) | |||
;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |||
giMute122 ftgen 0,0,4096,10,0.164339,0.102551,0.069563,0.138697,0.223728,0.265220,0.280256,0.332069,0.420578,0.494911,0.577300,0.438019,0.538305,0.547959,0.857117,0.773953,0.517366,0.523329,0.250443,0.159600,0.171983,0.125233,0.061672,0.045591,0.028822,0.029244,0.026342,0.016326,0.018016,0.016474,0.009454,0.006045,0.003657,0.004270,0.008585,0.014528,0.017452,0.019652,0.016908,0.013257,0.016063,0.015947,0.010616,0.009647,0.007357,0.006942,0.005472,0.008460,0.014247,0.013954,0.009828,0.009192,0.009759,0.008585,0.009964,0.012870,0.010975,0.007757,0.007624,0.008209,0.008005,0.007979,0.007726,0.007655,0.007795,0.007616,0.006725,0.005945,0.005229,0.004482,0.003678,0.003014,0.002618,0.002393,0.002731,0.003322,0.003436,0.002905,0.002194,0.001589,0.001214,0.001156,0.001328,0.001483,0.001561,0.001609,0.001696,0.001872,0.001908,0.002069,0.002367,0.002374,0.002130,0.001840,0.001674,0.001720,0.001812,0.001802,0.001732,0.001622 | |||
giMute123 ftgen 0,0,4096,10,0.168432,0.062246,0.078354,0.110195,0.129041,0.377921,0.282536,0.228004,0.524063,0.552904,0.492429,0.533439,0.241793,0.431759,0.960231,0.527526,0.457018,0.447269,0.173908,0.188096,0.117536,0.088623,0.038960,0.034631,0.040187,0.030976,0.019737,0.017966,0.018488,0.010201,0.006147,0.003826,0.005925,0.007905,0.007681,0.008607,0.015400,0.021169,0.020768,0.019478,0.013836,0.014839,0.014657,0.013690,0.013236,0.016605,0.019334,0.015552,0.016319,0.019658,0.016907,0.011550,0.009411,0.009522,0.010270,0.008678,0.008528,0.008212,0.007305,0.006920,0.008975,0.009992,0.007897,0.006576,0.006398,0.005486,0.004674,0.004082,0.003255,0.002525,0.001877,0.001735,0.002072,0.002316,0.002265,0.001877,0.001508,0.001299,0.001160,0.001268,0.001500,0.001614,0.001649,0.001544,0.001559,0.001869,0.002444,0.002837,0.002564,0.002224,0.002193,0.002264,0.002103,0.001864,0.001829,0.001964,0.001969,0.001708,0.001368,0.001146 | |||
giMute124 ftgen 0,0,4096,10,0.142996,0.083116,0.064144,0.232641,0.363109,0.345440,0.348866,0.301465,0.496059,0.590541,0.450344,0.611392,0.691633,0.939595,0.719155,0.655138,0.609154,0.236629,0.218778,0.154757,0.077033,0.074852,0.040400,0.038516,0.034596,0.023126,0.013779,0.015070,0.008541,0.005439,0.004834,0.008763,0.016084,0.025053,0.033607,0.047747,0.045648,0.045497,0.025409,0.021094,0.022069,0.038009,0.041759,0.063224,0.070253,0.055822,0.048910,0.048219,0.052210,0.039531,0.037339,0.030915,0.028370,0.038122,0.044865,0.047418,0.042297,0.039872,0.040218,0.036388,0.033231,0.028010,0.022884,0.020191,0.018026,0.013653,0.011148,0.010124,0.011725,0.014502,0.015977,0.012802,0.008969,0.006321,0.005229,0.005789,0.006897,0.007670,0.008699,0.009835,0.010769,0.010605,0.010601,0.010721,0.010749,0.010852,0.010291,0.009559,0.008597,0.007779,0.007284,0.006683,0.005906,0.005353,0.005322,0.005542,0.005543,0.005124,0.004449,0.003603 | |||
giMute125 ftgen 0,0,4096,10,0.044114,0.061305,0.127226,0.214587,0.248138,0.322022,0.289079,0.300066,0.219345,0.389034,0.679974,0.361926,0.905776,0.756147,0.724622,0.413971,0.233101,0.180408,0.145204,0.056539,0.046805,0.060866,0.050067,0.038355,0.032608,0.021983,0.011622,0.006955,0.011848,0.020388,0.023077,0.028897,0.039329,0.040006,0.051071,0.030060,0.035671,0.024931,0.038339,0.037708,0.058492,0.053593,0.037184,0.045630,0.043341,0.034029,0.031437,0.034031,0.025773,0.028039,0.030454,0.031458,0.031318,0.029135,0.028627,0.025452,0.021115,0.018088,0.014741,0.013689,0.012102,0.010087,0.009117,0.010501,0.012107,0.011147,0.008670,0.006054,0.004653,0.004909,0.005979,0.007571,0.008945,0.009279,0.009403,0.009990,0.010831,0.011229,0.011576,0.012198,0.011522,0.009582,0.007918,0.007133,0.006815,0.006874,0.006545,0.005823,0.005215,0.004793,0.004226,0.003549,0.002763,0.002034,0.001527,0.001275,0.001284,0.001501,0.001663,0.001513 | |||
giMute126 ftgen 0,0,4096,10,0.060196,0.079208,0.165018,0.403007,0.474143,0.259060,0.390988,0.369395,0.520597,0.147418,0.294315,0.719113,0.948583,0.911775,0.688364,0.284237,0.196457,0.197963,0.098875,0.075773,0.045829,0.020036,0.034330,0.015751,0.015028,0.009926,0.008781,0.011622,0.026268,0.030349,0.027636,0.033521,0.031042,0.039392,0.034047,0.037282,0.023269,0.035915,0.033496,0.040946,0.033303,0.030305,0.029753,0.029612,0.029870,0.024821,0.021197,0.017836,0.015201,0.014801,0.017255,0.016419,0.014400,0.014847,0.014196,0.013845,0.010243,0.007414,0.006884,0.005313,0.005125,0.006712,0.007001,0.005537,0.003835,0.002755,0.002847,0.003574,0.003940,0.004035,0.004370,0.004927,0.004830,0.004569,0.004559,0.004585,0.004513,0.003828,0.003072,0.002596,0.002377,0.002294,0.002087,0.001940,0.001859,0.001843,0.002114,0.002255,0.001844,0.001305,0.000970,0.000768,0.000670,0.000707,0.000807,0.000885,0.000924,0.000852,0.000694,0.000544 | |||
giMute127 ftgen 0,0,4096,10,0.052401,0.049320,0.080590,0.183766,0.164401,0.307439,0.388671,0.284459,0.318081,0.164443,0.441431,0.928201,0.876487,0.740904,0.324363,0.142732,0.081529,0.077495,0.028649,0.043648,0.038991,0.025075,0.013227,0.010195,0.011781,0.010501,0.016602,0.024255,0.023187,0.036495,0.057654,0.054268,0.048563,0.024903,0.054174,0.048040,0.071704,0.054365,0.049624,0.064806,0.092036,0.062098,0.048326,0.054051,0.039134,0.032416,0.036465,0.055694,0.042371,0.035750,0.021224,0.022257,0.011427,0.014694,0.009479,0.004552,0.013174,0.019261,0.013315,0.005818,0.001677,0.002772,0.003021,0.006297,0.007154,0.008171,0.010310,0.008506,0.007517,0.010904,0.006062,0.012403,0.007495,0.006084,0.005664,0.006058,0.004342,0.006256,0.008205,0.007899,0.006624,0.007878,0.003449,0.001680,0.000514,0.001804,0.002081,0.003443,0.004990,0.003472,0.003035,0.002319,0.001815,0.000843,0.001081,0.003090,0.002248,0.001877,0.002589,0.003743 | |||
giMute128 ftgen 0,0,4096,10,0.027923,0.100208,0.119497,0.305740,0.241671,0.283542,0.288061,0.232034,0.826888,0.407135,0.944943,0.754001,0.650071,0.360755,0.163788,0.199546,0.064667,0.047976,0.067193,0.033442,0.022636,0.018891,0.006473,0.006036,0.009904,0.016425,0.024814,0.044941,0.038557,0.069982,0.053960,0.007689,0.060655,0.019491,0.072831,0.052666,0.042308,0.055883,0.044001,0.027661,0.043229,0.023057,0.025173,0.028614,0.031240,0.027168,0.026598,0.023386,0.018674,0.009964,0.010171,0.008959,0.004421,0.009443,0.011811,0.008975,0.005444,0.002992,0.002577,0.004840,0.005217,0.007905,0.008254,0.008604,0.004473,0.009592,0.008601,0.005583,0.008098,0.005796,0.002345,0.007586,0.005015,0.004900,0.007488,0.005743,0.006825,0.002224,0.002742,0.001117,0.001857,0.001298,0.003169,0.002324,0.002382,0.001822,0.001779,0.001092,0.000752,0.001206,0.002075,0.000843,0.001972,0.001844,0.002893,0.002804,0.002542,0.001110,0.001376,0.000804 | |||
giMute129 ftgen 0,0,4096,10,0.014669,0.032320,0.102462,0.174664,0.169222,0.111331,0.339606,0.209754,0.217866,0.343088,0.891951,0.530957,0.472318,0.164643,0.165367,0.091601,0.090801,0.015419,0.039607,0.019025,0.012281,0.004714,0.002434,0.014861,0.038522,0.020090,0.049806,0.050949,0.061040,0.054492,0.035308,0.046103,0.018911,0.085037,0.066539,0.090037,0.115123,0.114020,0.059158,0.070988,0.070450,0.068910,0.054753,0.043435,0.030742,0.021866,0.024247,0.013293,0.017833,0.010515,0.011265,0.016382,0.023641,0.010420,0.007923,0.005015,0.009328,0.008929,0.010346,0.011125,0.009063,0.009311,0.010454,0.010758,0.009200,0.014939,0.006906,0.005195,0.007827,0.007531,0.008761,0.010132,0.008289,0.010958,0.004572,0.001934,0.001818,0.002642,0.002171,0.002199,0.002528,0.001704,0.001645,0.001110,0.000567,0.001256,0.000671,0.001415,0.003604,0.003233,0.002086,0.001933,0.001526,0.000662,0.001458,0.000497,0.000845,0.000680,0.001138,0.001279 | |||
giMute130 ftgen 0,0,4096,10,0.064908,0.079846,0.127850,0.445046,0.330968,0.420691,0.480533,0.374119,0.245280,0.729167,0.936260,0.749421,0.381456,0.247718,0.207617,0.116908,0.051373,0.019507,0.008564,0.025213,0.010576,0.007009,0.011265,0.017944,0.027208,0.040488,0.021178,0.046272,0.038151,0.021208,0.044463,0.023287,0.045981,0.030790,0.020921,0.015858,0.026172,0.019160,0.017080,0.011607,0.015955,0.006307,0.009311,0.006865,0.003784,0.003961,0.002271,0.002504,0.000904,0.002864,0.002378,0.001916,0.001531,0.000626,0.001045,0.001491,0.001672,0.000890,0.001666,0.001476,0.001501,0.000957,0.003007,0.001529,0.001037,0.001154,0.001031,0.000515,0.000881,0.000327,0.000467,0.000436,0.000280,0.000329,0.000454,0.000243,0.000168,0.000282,0.000948,0.000411,0.000184,0.000452,0.000360,0.000354,0.000193,0.000243,0.000591,0.000203,0.000418,0.000245,0.000193,0.000287,0.000162,0.000386,0.000147,0.000097,0.000291,0.000161,0.000222,0.000228 | |||
giMute131 ftgen 0,0,4096,10,0.068230,0.065611,0.217451,0.232412,0.188182,0.427625,0.292296,0.554990,0.340081,0.915514,0.522787,0.307999,0.162151,0.094669,0.056724,0.027329,0.011538,0.010489,0.008261,0.001997,0.007832,0.008040,0.029670,0.021346,0.029403,0.071206,0.042160,0.041297,0.059757,0.018923,0.105664,0.038842,0.027166,0.042666,0.031872,0.028802,0.030657,0.019773,0.024186,0.023554,0.016848,0.015145,0.013926,0.008132,0.010479,0.005103,0.002808,0.010621,0.007445,0.004301,0.001100,0.003068,0.003063,0.004833,0.003047,0.003019,0.003716,0.005204,0.002390,0.002979,0.001408,0.001568,0.001539,0.001833,0.002366,0.001838,0.000682,0.001960,0.000613,0.000686,0.000652,0.000399,0.000606,0.000602,0.000521,0.000455,0.000432,0.000091,0.000136,0.000332,0.000272,0.000302,0.000126,0.000375,0.000314,0.000203,0.000126,0.000237,0.000293,0.000291,0.000185,0.000182,0.000275,0.000263,0.000195,0.000151,0.000202,0.000294,0.000205,0.000198 | |||
giMute132 ftgen 0,0,4096,10,0.072458,0.092631,0.167684,0.302817,0.140977,0.255042,0.110714,0.344468,0.928686,0.667412,0.338258,0.200769,0.147649,0.065744,0.004582,0.023573,0.011837,0.008391,0.007660,0.014753,0.031615,0.027782,0.039431,0.047372,0.049448,0.013895,0.042049,0.032148,0.026316,0.026284,0.049745,0.043954,0.026083,0.037453,0.029582,0.022591,0.018017,0.013163,0.009816,0.004994,0.005845,0.002926,0.004507,0.007678,0.002757,0.002125,0.001498,0.002105,0.002073,0.003179,0.003552,0.003030,0.003107,0.003121,0.004471,0.001227,0.002877,0.002488,0.002740,0.003051,0.002796,0.002240,0.000296,0.000464,0.000414,0.001290,0.000687,0.001086,0.000537,0.000387,0.000130,0.000370,0.000092,0.000561,0.000559,0.000109,0.000094,0.000089,0.000290,0.000073,0.000183,0.000250,0.000318,0.000509,0.000515,0.000390,0.000503,0.000327,0.000338,0.000232,0.000327,0.000154,0.000173,0.000108,0.000092,0.000271,0.000089,0.000076,0.000105,0.000132 | |||
giMute133 ftgen 0,0,4096,10,0.171302,0.215302,0.554037,0.602813,0.500383,0.551353,0.792246,0.972277,0.915826,0.832314,0.393008,0.188469,0.087171,0.051938,0.057335,0.030089,0.018181,0.012795,0.030872,0.033984,0.097553,0.117375,0.088919,0.019750,0.074370,0.074970,0.077987,0.098699,0.118454,0.054334,0.051802,0.037932,0.045722,0.044228,0.016572,0.018704,0.013524,0.013398,0.003788,0.004323,0.010291,0.003069,0.001274,0.001330,0.002466,0.002824,0.003268,0.005612,0.003975,0.000819,0.002777,0.002460,0.002046,0.001584,0.002892,0.002346,0.003012,0.001881,0.000649,0.000801,0.000646,0.001523,0.001240,0.001310,0.000390,0.000248,0.000279,0.000518,0.000341,0.000512,0.000393,0.000190,0.000358,0.000126,0.000196,0.000125,0.000251,0.000327,0.000531,0.000833,0.000907,0.000336,0.000482,0.000237,0.000687,0.000266,0.000316,0.000368,0.000104,0.000129,0.000172,0.000171,0.000167,0.000055,0.000143,0.000116,0.000132,0.000198,0.000238,0.000318 | |||
giMute134 ftgen 0,0,4096,10,0.097133,0.173820,0.374605,0.474497,0.645937,0.376089,0.435327,0.976798,0.725285,0.297676,0.120366,0.069249,0.033502,0.014976,0.014214,0.011249,0.006081,0.003570,0.011892,0.014690,0.022764,0.024186,0.025001,0.044955,0.049727,0.048851,0.047898,0.053897,0.023052,0.038993,0.025427,0.027582,0.022350,0.021270,0.010750,0.009160,0.013099,0.002909,0.008796,0.006376,0.001857,0.001716,0.003061,0.001735,0.002918,0.004325,0.002877,0.003817,0.005184,0.003931,0.001995,0.004293,0.003739,0.003678,0.003158,0.002071,0.001133,0.000232,0.000323,0.001563,0.001268,0.000658,0.000426,0.000063,0.000421,0.000195,0.000767,0.000535,0.000446,0.000289,0.000184,0.000296,0.000288,0.000200,0.000535,0.000186,0.000733,0.000229,0.000412,0.000107,0.000166,0.000355,0.000312,0.000317,0.000354,0.000185,0.000132,0.000137,0.000206,0.000233,0.000262,0.000150,0.000123,0.000145,0.000145,0.000117,0.000140,0.000106,0.000135,0.000169 | |||
giMute135 ftgen 0,0,4096,10,0.179021,0.401691,0.729330,0.982922,0.746447,0.524380,0.900583,0.585038,0.953435,0.443166,0.289448,0.098763,0.031244,0.011392,0.020066,0.020371,0.036289,0.021837,0.044660,0.116353,0.070855,0.059093,0.066299,0.083923,0.069741,0.061417,0.033091,0.045547,0.029414,0.028975,0.021471,0.021629,0.010855,0.013960,0.004240,0.008225,0.009562,0.004312,0.001601,0.002687,0.001271,0.003054,0.004689,0.003158,0.006429,0.004058,0.005468,0.002640,0.001551,0.003253,0.003142,0.003027,0.001217,0.000340,0.000216,0.000471,0.000540,0.000381,0.000432,0.000182,0.000650,0.000176,0.000758,0.000323,0.000522,0.000156,0.000289,0.000185,0.000281,0.000179,0.000391,0.000461,0.000214,0.000356,0.000189,0.000425,0.000214,0.000172,0.000322,0.000195,0.000387,0.000323,0.000373,0.000170,0.000176,0.000048,0.000079,0.000049,0.000161,0.000129,0.000141,0.000083,0.000119,0.000204,0.000318,0.000410,0.000202,0.000283,0.000292,0.000127 | |||
giMute136 ftgen 0,0,4096,10,0.084007,0.199308,0.212901,0.389112,0.310014,0.209644,0.951984,0.633937,0.286005,0.146120,0.053652,0.047694,0.020100,0.016786,0.003816,0.018198,0.008332,0.020077,0.037293,0.016675,0.022299,0.027356,0.023496,0.049061,0.039132,0.026396,0.012922,0.017081,0.012583,0.010068,0.005525,0.002721,0.003104,0.004799,0.003308,0.002047,0.001239,0.002036,0.002197,0.002242,0.003547,0.004859,0.003272,0.001567,0.002063,0.002229,0.001760,0.001286,0.001961,0.000541,0.000366,0.000986,0.000730,0.000861,0.000630,0.000616,0.000358,0.001058,0.000464,0.000438,0.000450,0.000487,0.000193,0.000559,0.000479,0.000260,0.000259,0.000887,0.000529,0.000258,0.000611,0.000375,0.000388,0.000092,0.000430,0.000337,0.000138,0.000312,0.000579,0.000492,0.000207,0.000330,0.000350,0.000212,0.000159,0.000387,0.000350,0.000158,0.000191,0.000374,0.000113,0.000150,0.000260,0.000156,0.000117,0.000208,0.000235,0.000105,0.000074,0.000268 | |||
giMute137 ftgen 0,0,4096,10,0.121187,0.301409,0.437255,0.488546,0.532406,0.556320,0.940536,0.612558,0.171145,0.078278,0.033359,0.039980,0.019198,0.003684,0.014541,0.021902,0.025869,0.028022,0.020078,0.018008,0.063141,0.040559,0.061443,0.025176,0.045882,0.030795,0.027823,0.023490,0.015819,0.011054,0.004279,0.008778,0.007683,0.002850,0.002807,0.001837,0.004594,0.006832,0.003882,0.006682,0.004472,0.002359,0.002653,0.002120,0.002271,0.001366,0.001048,0.000977,0.001563,0.000795,0.000741,0.000197,0.000435,0.000663,0.000303,0.000697,0.000460,0.000621,0.000388,0.000298,0.000103,0.000484,0.000378,0.000376,0.000296,0.000134,0.000043,0.000150,0.000155,0.000176,0.000187,0.000055,0.000111,0.000091,0.000143,0.000129,0.000153,0.000171,0.000204,0.000159,0.000206,0.000139,0.000065,0.000078,0.000107,0.000102,0.000128,0.000113,0.000157,0.000150,0.000078,0.000128,0.000144,0.000084,0.000114,0.000188,0.000043,0.000106,0.000116,0.000128 | |||
giMute138 ftgen 0,0,4096,10,0.137239,0.608302,0.333203,0.546467,0.231739,0.766708,0.950744,0.327806,0.160412,0.060869,0.019878,0.003953,0.008113,0.006915,0.028018,0.027245,0.043331,0.020302,0.014454,0.025972,0.026882,0.018782,0.017822,0.013846,0.010287,0.009995,0.005808,0.004941,0.003243,0.000812,0.002013,0.001670,0.000819,0.000666,0.000772,0.000298,0.000436,0.000772,0.000741,0.000154,0.001321,0.000422,0.000226,0.000631,0.000439,0.000344,0.000337,0.000336,0.000616,0.000238,0.000312,0.000215,0.000181,0.000430,0.000292,0.000227,0.000331,0.000311,0.000246,0.000311,0.000279,0.000324,0.000208,0.000103,0.000266,0.000302,0.000310,0.000240,0.000310,0.000296,0.000228,0.000305,0.000203,0.000181,0.000235,0.000154,0.000238,0.000155,0.000185,0.000226,0.000170,0.000202,0.000202,0.000228,0.000150,0.000178,0.000239,0.000187,0.000194,0.000253,0.000070,0.000165,0.000223,0.000127,0.000156,0.000160,0.000180,0.000163,0.000129,0.000224 | |||
giMute139 ftgen 0,0,4096,10,0.061443,0.238708,0.356688,0.269787,0.339649,0.912187,0.776022,0.165931,0.073909,0.021161,0.016878,0.008990,0.003708,0.022300,0.041143,0.038233,0.004859,0.023579,0.053718,0.052003,0.042268,0.022601,0.022660,0.029648,0.019517,0.017414,0.011974,0.004870,0.011305,0.003101,0.000546,0.002006,0.003619,0.004048,0.005624,0.003647,0.002198,0.002634,0.003291,0.001943,0.000613,0.000545,0.000250,0.000451,0.000789,0.000299,0.000410,0.000212,0.000138,0.000424,0.000415,0.000404,0.000244,0.000269,0.000335,0.000329,0.000230,0.000373,0.000400,0.000370,0.000260,0.000376,0.000293,0.000187,0.000119,0.000256,0.000177,0.000244,0.000278,0.000293,0.000302,0.000158,0.000215,0.000196,0.000203,0.000167,0.000136,0.000170,0.000168,0.000137,0.000166,0.000168,0.000160,0.000177,0.000247,0.000183,0.000197,0.000135,0.000162,0.000164,0.000186,0.000121,0.000206,0.000166,0.000144,0.000145,0.000141,0.000122,0.000131,0.000148 | |||
giMute140 ftgen 0,0,4096,10,0.171458,0.486737,0.414556,0.287720,0.507039,0.974434,0.387302,0.180263,0.044683,0.029233,0.014770,0.003589,0.009392,0.033786,0.054370,0.010033,0.024497,0.035533,0.046495,0.020949,0.024322,0.023346,0.018462,0.011212,0.009184,0.003515,0.005537,0.002905,0.001147,0.001777,0.002912,0.002534,0.003007,0.002041,0.002109,0.001352,0.001160,0.001111,0.000145,0.000433,0.000205,0.000056,0.000347,0.000268,0.000294,0.000170,0.000469,0.000118,0.000167,0.000252,0.000207,0.000132,0.000371,0.000145,0.000293,0.000072,0.000271,0.000135,0.000201,0.000141,0.000204,0.000171,0.000237,0.000126,0.000167,0.000093,0.000231,0.000074,0.000160,0.000043,0.000250,0.000055,0.000217,0.000066,0.000199,0.000066,0.000231,0.000104,0.000233,0.000061,0.000246,0.000078,0.000219,0.000099,0.000254,0.000073,0.000200,0.000053,0.000175,0.000057,0.000197,0.000066,0.000126,0.000068,0.000163,0.000069,0.000139,0.000114,0.000270,0.000106 | |||
giMute141 ftgen 0,0,4096,10,0.096700,0.501938,0.304973,0.388545,0.605784,0.973491,0.310298,0.166062,0.031823,0.020041,0.008197,0.018099,0.031406,0.032118,0.028621,0.035283,0.026152,0.031724,0.045821,0.032749,0.023933,0.009329,0.006590,0.003520,0.002035,0.005414,0.003178,0.001420,0.002462,0.001216,0.000800,0.002760,0.002395,0.001093,0.001088,0.001647,0.001527,0.000979,0.001163,0.001119,0.001071,0.001064,0.001131,0.001297,0.001070,0.001080,0.000990,0.000967,0.000985,0.001105,0.000916,0.000726,0.000869,0.000896,0.000931,0.000845,0.000797,0.000762,0.000805,0.000802,0.000683,0.000685,0.000708,0.000714,0.000719,0.000727,0.000634,0.000711,0.000686,0.000637,0.000694,0.000701,0.000592,0.000664,0.000534,0.000558,0.000681,0.000688,0.000614,0.000609,0.000647,0.000479,0.000513,0.000489,0.000396,0.000420,0.000504,0.000454,0.000492,0.000467,0.000503,0.000515,0.000470,0.000401,0.000502,0.000592,0.000567,0.000411,0.000453,0.000449 | |||
giMute142 ftgen 0,0,4096,10,0.079836,0.330689,0.372144,0.493873,0.925375,0.694151,0.118777,0.028983,0.015396,0.009622,0.001526,0.002627,0.008783,0.011024,0.010140,0.015272,0.009621,0.006265,0.004497,0.003760,0.002472,0.001108,0.000363,0.000521,0.000643,0.000834,0.000511,0.000843,0.000434,0.000735,0.001056,0.000991,0.001287,0.000997,0.000751,0.000669,0.000309,0.000891,0.000656,0.000613,0.000705,0.000663,0.000676,0.000561,0.000583,0.000611,0.000611,0.000702,0.000495,0.000478,0.000451,0.000393,0.000461,0.000506,0.000433,0.000473,0.000465,0.000454,0.000425,0.000361,0.000423,0.000458,0.000385,0.000422,0.000473,0.000380,0.000405,0.000421,0.000338,0.000379,0.000351,0.000358,0.000335,0.000353,0.000378,0.000372,0.000313,0.000331,0.000343,0.000315,0.000320,0.000280,0.000296,0.000226,0.000364,0.000296,0.000272,0.000282,0.000254,0.000289,0.000277,0.000204,0.000220,0.000269,0.000299,0.000321,0.000450,0.000259,0.000266,0.000435 | |||
giMute143 ftgen 0,0,4096,10,0.093603,0.658042,0.988507,0.565236,0.957972,0.360885,0.102049,0.051660,0.027922,0.005483,0.010335,0.012495,0.003673,0.003952,0.012964,0.008898,0.005397,0.006281,0.001252,0.006122,0.003828,0.000827,0.003226,0.002089,0.001925,0.000243,0.002872,0.002421,0.003325,0.002270,0.001755,0.001168,0.001149,0.000770,0.000928,0.000937,0.000720,0.000406,0.000688,0.000732,0.000790,0.000819,0.000398,0.000728,0.000703,0.001198,0.000151,0.000857,0.000600,0.000571,0.000660,0.000529,0.000450,0.000520,0.000520,0.000470,0.000463,0.000462,0.000454,0.000347,0.000590,0.000427,0.000210,0.000402,0.000401,0.000381,0.000525,0.000294,0.000410,0.000335,0.000296,0.000348,0.000580,0.000399,0.000186,0.000198,0.000288,0.000442,0.000411,0.000234,0.000356,0.000386,0.000271,0.000338,0.000271,0.000303,0.000385,0.000352,0.000226,0.000193,0.000103,0.000388,0.000349,0.000222,0.000208,0.000266,0.000232,0.000314,0.000425,0.000268 | |||
giMute144 ftgen 0,0,4096,10,0.127739,0.412859,0.669901,0.617303,0.972749,0.358440,0.065748,0.045528,0.010129,0.008737,0.005631,0.028396,0.004839,0.008872,0.006019,0.011096,0.006903,0.003885,0.004722,0.003204,0.000936,0.002573,0.001532,0.001369,0.001172,0.001160,0.002432,0.000544,0.000609,0.001867,0.000966,0.001039,0.001031,0.000884,0.000753,0.000848,0.000659,0.000749,0.000579,0.000769,0.000665,0.000754,0.000781,0.000490,0.000653,0.000626,0.000524,0.000572,0.000539,0.000566,0.000514,0.000414,0.000441,0.000453,0.000417,0.000478,0.000444,0.000495,0.000551,0.000346,0.000475,0.000442,0.000477,0.000269,0.000501,0.000483,0.000442,0.000267,0.000338,0.000368,0.000470,0.000382,0.000335,0.000358,0.000341,0.000354,0.000345,0.000310,0.000359,0.000228,0.000299,0.000348,0.000336,0.000319,0.000275,0.000294,0.000244,0.000271,0.000232,0.000358,0.000237,0.000269,0.000247,0.000360,0.000301,0.000208,0.000223,0.000248,0.000270,0.000258 | |||
giMute145 ftgen 0,0,4096,10,0.172584,0.253006,0.499844,0.963093,0.599448,0.063091,0.027923,0.009556,0.005430,0.007267,0.030576,0.010839,0.007632,0.008691,0.007373,0.004773,0.004338,0.006857,0.003189,0.000319,0.002787,0.001103,0.001002,0.001076,0.001129,0.001241,0.000702,0.000657,0.000919,0.000769,0.000959,0.000576,0.000715,0.000619,0.000732,0.000611,0.000499,0.000600,0.000491,0.000700,0.000580,0.000348,0.000432,0.000611,0.000489,0.000494,0.000446,0.000425,0.000537,0.000395,0.000420,0.000348,0.000423,0.000452,0.000417,0.000289,0.000444,0.000331,0.000335,0.000289,0.000366,0.000340,0.000289,0.000333,0.000336,0.000346,0.000297,0.000305,0.000318,0.000278,0.000199,0.000327,0.000258,0.000240,0.000298,0.000311,0.000247,0.000309,0.000274,0.000297,0.000343,0.000148,0.000267,0.000204,0.000326,0.000251,0.000194,0.000230,0.000250,0.000186,0.000238,0.000251,0.000196,0.000238,0.000292,0.000233,0.000162,0.000197,0.000198,0.000193 | |||
giMute146 ftgen 0,0,4096,10,0.169930,0.357871,0.478870,0.971148,0.103667,0.027577,0.012460,0.004728,0.004455,0.018143,0.018903,0.009745,0.013588,0.009707,0.007034,0.005601,0.003105,0.000981,0.000341,0.001493,0.000631,0.000446,0.000832,0.000522,0.000996,0.001277,0.000334,0.000333,0.000435,0.000326,0.000323,0.000353,0.000202,0.000214,0.000190,0.000284,0.000171,0.000339,0.000329,0.000183,0.000124,0.000342,0.000303,0.000128,0.000091,0.000224,0.000255,0.000167,0.000148,0.000089,0.000154,0.000248,0.000151,0.000141,0.000149,0.000108,0.000284,0.000121,0.000121,0.000193,0.000201,0.000123,0.000226,0.000223,0.000154,0.000094,0.000194,0.000058,0.000146,0.000232,0.000097,0.000224,0.000132,0.000062,0.000163,0.000214,0.000246,0.000418,0.000139,0.000221,0.000100,0.000095,0.000131,0.000152,0.000158,0.000051,0.000077,0.000080,0.000061,0.000131,0.000109,0.000055,0.000120,0.000091,0.000080,0.000081,0.000120,0.000053,0.000045,0.000123 | |||
giMute147 ftgen 0,0,4096,10,0.175950,0.306151,0.921267,0.803899,0.232506,0.029817,0.015312,0.002411,0.010177,0.008768,0.003962,0.004998,0.003485,0.001495,0.002390,0.001727,0.000838,0.000237,0.000572,0.000579,0.000740,0.001153,0.000286,0.000378,0.000226,0.000269,0.000314,0.000265,0.000200,0.000117,0.000250,0.000150,0.000183,0.000079,0.000168,0.000177,0.000049,0.000188,0.000111,0.000136,0.000108,0.000088,0.000122,0.000076,0.000110,0.000119,0.000091,0.000137,0.000123,0.000074,0.000144,0.000146,0.000077,0.000035,0.000056,0.000085,0.000020,0.000095,0.000092,0.000051,0.000122,0.000063,0.000147,0.000073,0.000076,0.000045,0.000098,0.000114,0.000063,0.000075,0.000037,0.000125,0.000019,0.000072,0.000077,0.000087,0.000132,0.000061,0.000112,0.000071,0.000050,0.000051,0.000054,0.000046,0.000107,0.000026,0.000027,0.000021,0.000035,0.000042,0.000030,0.000041,0.000038,0.000047,0.000015,0.000021,0.000032,0.000120,0.000147,0.000238 | |||
giMute148 ftgen 0,0,4096,10,0.546831,0.588315,0.974745,0.966438,0.134855,0.030603,0.009346,0.000932,0.030580,0.012583,0.020113,0.009766,0.016236,0.007109,0.004226,0.002316,0.001376,0.000358,0.001380,0.001135,0.000319,0.000940,0.000401,0.000703,0.000385,0.000515,0.000292,0.000252,0.000145,0.000137,0.000403,0.000278,0.000292,0.000275,0.000222,0.000110,0.000160,0.000085,0.000217,0.000270,0.000172,0.000158,0.000177,0.000095,0.000182,0.000067,0.000232,0.000159,0.000178,0.000150,0.000206,0.000086,0.000273,0.000112,0.000141,0.000195,0.000084,0.000079,0.000246,0.000201,0.000063,0.000129,0.000125,0.000117,0.000158,0.000162,0.000192,0.000121,0.000175,0.000267,0.000096,0.000179,0.000039,0.000074,0.000268,0.000160,0.000033,0.000069,0.000065,0.000055,0.000088,0.000054,0.000142,0.000087,0.000045,0.000095,0.000026,0.000039,0.000075,0.000073,0.000067,0.000054,0.000068,0.000091,0.000101,0.000092,0.000171,0.000084,0.000049,0.000055 | |||
giMute149 ftgen 0,0,4096,10,0.294629,0.975075,0.694387,0.796446,0.188314,0.013147,0.006022,0.018607,0.064160,0.026936,0.065686,0.065969,0.031796,0.020120,0.015238,0.003443,0.002738,0.001360,0.003362,0.001182,0.001135,0.002047,0.001013,0.000558,0.000429,0.000717,0.000504,0.000555,0.000624,0.000479,0.000343,0.000421,0.000606,0.000462,0.000385,0.000445,0.000230,0.000176,0.000301,0.000222,0.000323,0.000195,0.000306,0.000246,0.000307,0.000237,0.000215,0.000210,0.000380,0.000241,0.000377,0.000152,0.000491,0.000197,0.000367,0.000186,0.000204,0.000108,0.000304,0.000260,0.000093,0.000231,0.000163,0.000112,0.000185,0.000239,0.000226,0.000179,0.000200,0.000203,0.000175,0.000088,0.000156,0.000218,0.000201,0.000222,0.000100,0.000212,0.000151,0.000114,0.000168,0.000167,0.000170,0.000170,0.000116,0.000205,0.000116,0.000133,0.000139,0.000176,0.000154,0.000145,0.000119,0.000095,0.000085,0.000125,0.000145,0.000106,0.000145,0.000141 | |||
giMute150 ftgen 0,0,4096,10,0.594912,0.608509,0.961469,0.229985,0.033626,0.009789,0.002734,0.011904,0.013878,0.018699,0.018956,0.006098,0.006134,0.002889,0.000518,0.000310,0.000591,0.000264,0.000257,0.000698,0.000478,0.000286,0.000276,0.000212,0.000349,0.000257,0.000272,0.000224,0.000177,0.000174,0.000082,0.000176,0.000161,0.000172,0.000230,0.000066,0.000165,0.000161,0.000152,0.000109,0.000094,0.000130,0.000185,0.000186,0.000258,0.000200,0.000154,0.000204,0.000184,0.000157,0.000047,0.000131,0.000123,0.000097,0.000062,0.000144,0.000118,0.000149,0.000134,0.000157,0.000198,0.000063,0.000156,0.000144,0.000094,0.000105,0.000096,0.000093,0.000113,0.000081,0.000076,0.000079,0.000049,0.000061,0.000040,0.000104,0.000079,0.000022,0.000068,0.000078,0.000072,0.000063,0.000085,0.000086,0.000053,0.000080,0.000082,0.000054,0.000046,0.000081,0.000075,0.000056,0.000061,0.000025,0.000072,0.000042,0.000050,0.000054,0.000053,0.000068 | |||
giMute151 ftgen 0,0,4096,10,0.206347,0.510370,0.950258,0.127507,0.010206,0.002549,0.001810,0.012483,0.004635,0.004683,0.005187,0.003165,0.001760,0.000999,0.000554,0.000268,0.000624,0.000195,0.000027,0.000147,0.000141,0.000163,0.000117,0.000060,0.000105,0.000099,0.000067,0.000093,0.000160,0.000103,0.000140,0.000060,0.000090,0.000115,0.000051,0.000073,0.000045,0.000055,0.000143,0.000072,0.000114,0.000130,0.000048,0.000106,0.000081,0.000052,0.000096,0.000074,0.000050,0.000088,0.000108,0.000167,0.000065,0.000093,0.000168,0.000053,0.000085,0.000083,0.000061,0.000128,0.000058,0.000064,0.000040,0.000027,0.000100,0.000081,0.000054,0.000030,0.000036,0.000081,0.000048,0.000047,0.000067,0.000034,0.000037,0.000030,0.000021,0.000028,0.000043,0.000106,0.000063,0.000019,0.000039,0.000057,0.000021,0.000037,0.000026,0.000041,0.000039,0.000032,0.000024,0.000048,0.000021,0.000064,0.000037,0.000065,0.000049,0.000031,0.000048,0.000014 | |||
giMute152 ftgen 0,0,4096,10,0.718310,0.828992,0.971094,0.089148,0.007432,0.001882,0.006326,0.016275,0.013664,0.005083,0.004192,0.002987,0.000575,0.000244,0.000598,0.000195,0.000566,0.000394,0.000580,0.000162,0.000255,0.000166,0.000116,0.000132,0.000146,0.000108,0.000133,0.000237,0.000251,0.000229,0.000158,0.000127,0.000139,0.000150,0.000119,0.000043,0.000076,0.000198,0.000147,0.000151,0.000075,0.000073,0.000078,0.000098,0.000125,0.000095,0.000098,0.000053,0.000180,0.000068,0.000097,0.000168,0.000085,0.000055,0.000094,0.000084,0.000102,0.000047,0.000079,0.000083,0.000046,0.000050,0.000047,0.000066,0.000081,0.000049,0.000040,0.000040,0.000068,0.000075,0.000057,0.000054,0.000024,0.000106,0.000054,0.000084,0.000044,0.000058,0.000034,0.000045,0.000058,0.000029,0.000068,0.000046,0.000029,0.000029,0.000066,0.000045,0.000077,0.000038,0.000027,0.000035,0.000043,0.000036,0.000049,0.000024,0.000024,0.000045,0.000046,0.000034 | |||
giMute153 ftgen 0,0,4096,10,0.551061,0.501444,0.953401,0.068491,0.008520,0.012056,0.020903,0.021636,0.008585,0.007399,0.006298,0.001414,0.000788,0.000891,0.000358,0.000686,0.001110,0.000613,0.000691,0.000460,0.000664,0.000614,0.000565,0.000426,0.000472,0.000397,0.000391,0.000456,0.000378,0.000437,0.000434,0.000310,0.000368,0.000415,0.000400,0.000343,0.000353,0.000349,0.000357,0.000326,0.000313,0.000231,0.000257,0.000212,0.000281,0.000273,0.000286,0.000207,0.000174,0.000326,0.000097,0.000332,0.000115,0.000149,0.000211,0.000305,0.000186,0.000198,0.000220,0.000141,0.000131,0.000182,0.000188,0.000186,0.000182,0.000117,0.000163,0.000173,0.000185,0.000121,0.000186,0.000073,0.000203,0.000192,0.000150,0.000147,0.000131,0.000138,0.000145,0.000135,0.000111,0.000135,0.000109,0.000125,0.000126,0.000121,0.000105,0.000083,0.000102,0.000109,0.000069,0.000107,0.000148,0.000139,0.000126,0.000096,0.000101,0.000123,0.000104,0.000104 | |||
giMute154 ftgen 0,0,4096,10,0.965465,0.238341,0.801452,0.050222,0.006640,0.011475,0.012533,0.012724,0.004704,0.006848,0.004228,0.001130,0.001409,0.001463,0.000398,0.000800,0.000513,0.001091,0.001100,0.000393,0.000445,0.000310,0.000446,0.000589,0.000358,0.000505,0.000369,0.000525,0.000346,0.000322,0.000437,0.000435,0.000262,0.000286,0.000307,0.000308,0.000358,0.000350,0.000347,0.000237,0.000076,0.000385,0.000217,0.000215,0.000278,0.000200,0.000335,0.000203,0.000329,0.000194,0.000066,0.000171,0.000388,0.000178,0.000305,0.000205,0.000231,0.000150,0.000228,0.000249,0.000070,0.000179,0.000201,0.000134,0.000138,0.000151,0.000193,0.000156,0.000150,0.000137,0.000132,0.000132,0.000128,0.000118,0.000138,0.000126,0.000141,0.000133,0.000148,0.000184,0.000137,0.000131,0.000138,0.000107,0.000100,0.000116,0.000121,0.000092,0.000099,0.000106,0.000080,0.000101,0.000102,0.000073,0.000094,0.000104,0.000107,0.000106,0.000093,0.000085 | |||
giMute155 ftgen 0,0,4096,10,0.938142,0.970313,0.508740,0.021568,0.001864,0.002894,0.002724,0.002263,0.003861,0.001793,0.000443,0.001267,0.000409,0.000899,0.000541,0.000180,0.000417,0.000464,0.000377,0.000359,0.000247,0.000485,0.000254,0.000339,0.000219,0.000319,0.000168,0.000254,0.000251,0.000160,0.000021,0.000183,0.000145,0.000251,0.000161,0.000219,0.000034,0.000174,0.000112,0.000219,0.000100,0.000130,0.000289,0.000226,0.000368,0.000095,0.000094,0.000122,0.000072,0.000121,0.000126,0.000143,0.000135,0.000153,0.000050,0.000099,0.000080,0.000071,0.000089,0.000079,0.000117,0.000090,0.000082,0.000068,0.000126,0.000073,0.000077,0.000094,0.000076,0.000063,0.000056,0.000070,0.000076,0.000063,0.000036,0.000059,0.000040,0.000039,0.000031,0.000048,0.000048,0.000066,0.000072,0.000047,0.000057,0.000058,0.000066,0.000033,0.000044,0.000035,0.000051,0.000038,0.000039,0.000047,0.000046,0.000052,0.000050,0.000033,0.000052,0.000039 | |||
giMute156 ftgen 0,0,4096,10,0.625565,0.965980,0.202403,0.024063,0.002481,0.005337,0.005024,0.008205,0.003554,0.001210,0.000983,0.001570,0.000901,0.000291,0.000664,0.000883,0.000489,0.000671,0.000602,0.000605,0.000552,0.000393,0.000580,0.000544,0.000508,0.000536,0.000523,0.000420,0.000400,0.000436,0.000414,0.000508,0.000302,0.000362,0.000336,0.000489,0.000355,0.000362,0.000320,0.000350,0.000246,0.000251,0.000326,0.000214,0.000175,0.000260,0.000273,0.000224,0.000202,0.000232,0.000185,0.000237,0.000245,0.000169,0.000199,0.000160,0.000153,0.000211,0.000161,0.000157,0.000165,0.000177,0.000207,0.000214,0.000158,0.000167,0.000146,0.000138,0.000161,0.000162,0.000163,0.000138,0.000160,0.000141,0.000113,0.000139,0.000144,0.000099,0.000091,0.000160,0.000120,0.000102,0.000131,0.000108,0.000113,0.000114,0.000113,0.000111,0.000105,0.000113,0.000123,0.000107,0.000110,0.000112,0.000110,0.000106,0.000122,0.000112,0.000105,0.000101 | |||
giMute157 ftgen 0,0,4096,10,0.314475,0.959696,0.048444,0.004582,0.006574,0.012611,0.005426,0.002115,0.000604,0.000404,0.000356,0.000685,0.001096,0.000409,0.000072,0.000321,0.000329,0.000236,0.000403,0.000240,0.000158,0.000233,0.000268,0.000168,0.000154,0.000209,0.000165,0.000121,0.000111,0.000136,0.000085,0.000217,0.000086,0.000083,0.000149,0.000151,0.000115,0.000148,0.000123,0.000087,0.000095,0.000113,0.000089,0.000044,0.000137,0.000116,0.000130,0.000027,0.000101,0.000085,0.000121,0.000079,0.000106,0.000042,0.000011,0.000071,0.000080,0.000029,0.000039,0.000081,0.000041,0.000060,0.000040,0.000068,0.000066,0.000052,0.000050,0.000031,0.000056,0.000054,0.000039,0.000051,0.000037,0.000059,0.000054,0.000037,0.000046,0.000043,0.000038,0.000041,0.000031,0.000049,0.000033,0.000040,0.000038,0.000035,0.000050,0.000040,0.000043,0.000039,0.000051,0.000035,0.000045,0.000020,0.000038,0.000032,0.000026,0.000030,0.000031,0.000030 | |||
giMute158 ftgen 0,0,4096,10,0.428817,0.965152,0.013016,0.001790,0.004347,0.004997,0.005604,0.002582,0.000836,0.000569,0.000599,0.000465,0.000517,0.000563,0.000538,0.000350,0.000281,0.000361,0.000460,0.000274,0.000209,0.000199,0.000249,0.000304,0.000340,0.000213,0.000240,0.000152,0.000238,0.000157,0.000200,0.000196,0.000164,0.000118,0.000156,0.000141,0.000124,0.000105,0.000108,0.000150,0.000140,0.000124,0.000109,0.000104,0.000111,0.000096,0.000120,0.000092,0.000094,0.000103,0.000077,0.000064,0.000066,0.000111,0.000094,0.000093,0.000082,0.000078,0.000073,0.000096,0.000082,0.000079,0.000075,0.000072,0.000085,0.000068,0.000072,0.000053,0.000069,0.000054,0.000057,0.000058,0.000058,0.000065,0.000055,0.000063,0.000066,0.000063,0.000063,0.000058,0.000053,0.000052,0.000046,0.000046,0.000050,0.000049,0.000047,0.000045,0.000043,0.000050,0.000047,0.000052,0.000050,0.000049,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000 | |||
;GEN02 TABLE CONTAINING THE FUNCTION TABLE NUMBERS OF THE TABLES BETWEEN WHICH MORPHING WILL TAKE PLACE | |||
giwavemapMute1 ftgen 0,0,128,-27, 0,0, 22,0, 23,1, 24,2, 25,3, 26,4, 27,5, 28,6, 29,7, 30,8, 31,9, 32,10, 33,11, 34,12, 35,13, 36,14, 37,15, 38,16, 39,17, 40,18, 41,19, 42,20, 43,21, 44,22, 45,23, 46,24, 47,25, 48,26, 49,27, 50,28, 51,29, 52,30, 53,31, 54,32, 55,33, 56,34, 57,35, 58,36, 127,36 | |||
gitabs4morfMute1 ftgen 0,0,64,-2, giMute122,giMute123,giMute124,giMute125,giMute126,giMute127,giMute128,giMute129,giMute130,giMute131,giMute132,giMute133,giMute134,giMute135,giMute136,giMute137,giMute138,giMute139,giMute140,giMute141,giMute142,giMute143,giMute144,giMute145,giMute146,giMute147,giMute148,giMute149,giMute150,giMute151,giMute152,giMute153,giMute154,giMute155,giMute156,giMute157,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158,giMute158 | |||