<info>
Additive synthesizer
16 harmonics with envelopes

Mathieu Bezkorowagny, 1996
</info>
<tk_interface>
cslider total_time -max 300 -min .1 -init 30
cslider gain -rel lin -res  .01 -min 0 -max 4 -init 1
cslider fund -rel log -uni Hz  -res .001 -min 0.0005 -max 1000 -init .03
cgraph waveshape -rel  line  -min -1 -max 1 -init 0  -gen 31
cslider freqshift -rel lin -unit Hz  -res  .01 -min -4000 -max 4000 -init 100.0 
csepar

cgraph harm1   -min 30    -max 90 -init 70.0 -gen 11 
cgraph harm2   -min 30    -max 90 -init 70.0  -gen 12 
cgraph harm3   -min 30    -max 90  -init 70.0  -gen 13 
cgraph harm4   -min 30    -max 90  -init 70.0  -gen 14 
cgraph harm5   -min 30    -max 90  -init 70.0  -gen 15 
cgraph harm6   -min 30    -max 90  -init 70.0  -gen 16 
cgraph harm7   -min 30    -max 90  -init 70.0  -gen 17 
cgraph harm8   -min 30    -max 90  -init 70.0  -gen 18 
cgraph harm9   -min 30    -max 90  -init 70.0  -gen 19 
cgraph harm10   -min 30    -max 90  -init 70.0  -gen 20 
cgraph harm11   -min 30    -max 90  -init 70.0  -gen 21
cgraph harm12   -min 30    -max 90  -init 70.0  -gen 22
cgraph harm13   -min 30    -max 90  -init 70.0  -gen 23 
cgraph harm14   -min 30    -max 90  -init 70.0  -gen 24 
cgraph harm15   -min 30    -max 90  -init 70.0  -gen 25
cgraph harm16   -min 30    -max 90  -init 70.0  -gen 26
csepar
cgraph envelope  -rel li -min 0  -max 1 -func "0 0 .01 .8 .99 .8 1 0"   -gen 29

ctoggle sinus -init 1
ctoggle balance -init 0
</tk_interface>
<mono>
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
</mono>
<stereo>
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)
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
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    asommed* knorm*gkenvelope, asommeg* knorm*gkenvelope
	    endin
</stereo>
<quad>

</quad>
<score>
f1 0 8192 10 1 0 .2 0 .1 0 0 .2 .1 .5 2
i1 0.001 [total_time]
</score>
