Additive synthesizer
16 harmonics with envelopes
Mathieu Bezkorowagny, 1996
Adjusted by Mike O'Donnell, 3 March 2003 - 21 April 2003
Modified by Eric Heller to get rid of split stereo output and to add a frequency modulator to the main graph. Mon Apr 28 2003
cslider total_time -max 300 -min 0 -init 2
cslider gain -rel lin -res .01 -min 0 -max 4 -init 1
cslider fund -rel lin -unit Hz -res .001 -min 20 -max 1000 -init 110
cgraph waveshape -rel lin -min -1 -max 1 -init 0 -gen 31
csepar
cgraph harm1 -min 0 -max 100 -init 0.0 -gen 11
cgraph harm2 -min 0 -max 100 -init 0.0 -gen 12
cgraph harm3 -min 0 -max 100 -init 0.0 -gen 13
cgraph harm4 -min 0 -max 100 -init 0.0 -gen 14
cgraph harm5 -min 0 -max 100 -init 0.0 -gen 15
cgraph harm6 -min 0 -max 100 -init 0.0 -gen 16
cgraph harm7 -min 0 -max 100 -init 0.0 -gen 17
cgraph harm8 -min 0 -max 100 -init 0.0 -gen 18
cgraph harm9 -min 0 -max 100 -init 0.0 -gen 19
cgraph harm10 -min 0 -max 100 -init 0.0 -gen 20
cgraph harm11 -min 0 -max 100 -init 0.0 -gen 21
cgraph harm12 -min 0 -max 100 -init 0.0 -gen 22
cgraph harm13 -min 0 -max 100 -init 0.0 -gen 23
cgraph harm14 -min 0 -max 100 -init 0.0 -gen 24
cgraph harm15 -min 0 -max 100 -init 0.0 -gen 25
cgraph harm16 -min 0 -max 100 -init 0.0 -gen 26
csepar
cgraph freqmod -unit Hz -rel lin -min -50 -max 50 -init 0.0
cgraph envelope -rel li -min 0 -max 1 -func "0 0 .01 .8 .99 .8 1 0" -gen 29
ctoggle sinus -init 0
ctoggle balance -init 0
gkbanjo init 76
instr 1
anorma oscil 10000, 1000, 1
knorm= gkgain
kfund= gkfund
isina=i(gksinus)
if isina = 1 goto sinp
iform = 31
goto gof
sinp:
iform = 1
gof:
kamp1 = gkharm1
kamp2 = gkharm2
kamp3 = gkharm3
kamp4 = gkharm4
kamp5 = gkharm5
kamp6 = gkharm6
kamp7 = gkharm7
kamp8 = gkharm8
kamp9 = gkharm9
kamp10 = gkharm10
kamp11 = gkharm11
kamp12 = gkharm12
kamp13 = gkharm13
kamp14 = gkharm14
kamp15 = gkharm15
kamp16 = gkharm16
kshift = gkfreqshift
ah1 oscili kamp1, kfund*1+kshift, iform
ah2 oscili kamp2, kfund*2+kshift, iform
ah3 oscili kamp3, kfund*3+kshift, iform
ah4 oscili kamp4, kfund*4+kshift, iform
ah5 oscili kamp5, kfund*5+kshift, iform
ah6 oscili kamp6, kfund*6+kshift, iform
ah7 oscili kamp7, kfund*7+kshift, iform
ah8 oscili kamp8, kfund*8+kshift, iform
ah9 oscili kamp9, kfund*9+kshift, iform
ah10 oscili kamp10, kfund*10+kshift, iform
ah11 oscili kamp11, kfund*11+kshift, iform
ah12 oscili kamp12, kfund*12+kshift, iform
ah13 oscili kamp13, kfund*13+kshift, iform
ah14 oscili kamp14, kfund*14+kshift, iform
ah15 oscili kamp15, kfund*15+kshift, iform
ah16 oscili kamp16, kfund*16+kshift, iform
asomme= (ah1+ah2+ah3+ah4+ah5+ah6+ah7+ah8+ah9+ah10+ah11+ah12+ah13+ah14+ah15+ah16)
if gkbalance == 0 goto outer
asomme balance asomme, anorma
outer:
out asomme* knorm*gkenvelope
endin
gkbanjo init 76
instr 1
anorma oscil 10000, 1000, 1
knorm= gkgain
kfund= gkfund
isina=i(gksinus)
if isina = 1 goto sinp
iform = 31
goto gof
sinp:
iform = 1
gof:
kamp1 = ampdb(gkharm1)
kamp2 = ampdb(gkharm2)
kamp3 = ampdb(gkharm3)
kamp4 = ampdb(gkharm4)
kamp5 = ampdb(gkharm5)
kamp6 = ampdb(gkharm6)
kamp7 = ampdb(gkharm7)
kamp8 = ampdb(gkharm8)
kamp9 = ampdb(gkharm9)
kamp10 = ampdb(gkharm10)
kamp11 = ampdb(gkharm11)
kamp12 = ampdb(gkharm12)
kamp13 = ampdb(gkharm13)
kamp14 = ampdb(gkharm14)
kamp15 = ampdb(gkharm15)
kamp16 = ampdb(gkharm16)
ah1 oscili kamp1, (kfund+gkfreqmod)*1, iform
ah2 oscili kamp2, (kfund+gkfreqmod)*2, iform
ah3 oscili kamp3, (kfund+gkfreqmod)*3, iform
ah4 oscili kamp4, (kfund+gkfreqmod)*4, iform
ah5 oscili kamp5, (kfund+gkfreqmod)*5, iform
ah6 oscili kamp6, (kfund+gkfreqmod)*6, iform
ah7 oscili kamp7, (kfund+gkfreqmod)*7, iform
ah8 oscili kamp8, (kfund+gkfreqmod)*8, iform
ah9 oscili kamp9, (kfund+gkfreqmod)*9, iform
ah10 oscili kamp10, (kfund+gkfreqmod)*10, iform
ah11 oscili kamp11, (kfund+gkfreqmod)*11, iform
ah12 oscili kamp12, (kfund+gkfreqmod)*12, iform
ah13 oscili kamp13, (kfund+gkfreqmod)*13, iform
ah14 oscili kamp14, (kfund+gkfreqmod)*14, iform
ah15 oscili kamp15, (kfund+gkfreqmod)*15, iform
ah16 oscili kamp16, (kfund+gkfreqmod)*16, iform
asomme= (ah1+ah2+ah3+ah4+ah5+ah6+ah7+ah8+ah9+ah10+ah11+ah12+ah13+ah14+ah15+ah16)
asommed= (ah1+ah3+ah5+ah7+ah9+ah11+ah13+ah15)
asommeg= (ah2+ah4+ah6+ah8+ah10+ah12+ah14+ah16)
if gkbalance == 0 goto outer
asommed balance asommed, anorma
asommeg balance asommeg, anorma
outer:
outs asomme* knorm*gkenvelope, asomme* knorm*gkenvelope
endin
f1 0 8192 10 1 0 .2 0 .1 0 0 .2 .1 .5 2
i1 0.001 [total_time]