<info>
Transposer with amplitude and frequency modulation
Uses gen01 - maximum size of input file  =~ 4Mb (RAM)

Jean Piche, 1996
</info>
<tk_interface>
cgraph 		transpose 			-label "Transposition\nFactor" -rel log -min 0.1 -max 10 -init 1
csepar
csepar -label "ring\nmodulation"
cgraph 		ampmodran 			-label "Range" -rel lin -min 0 -max 1 -init .5 
cgraph 		ampmodfreq  			-label "Freq" -unit Hz -rel log -min 0.001 -max 2000 -init 5 
csepar
csepar -label "frequency\nmodulation"
cgraph 		freqmoddepth 	 		-label "Range" -rel lin   -min 0 -max 1 -init .5  
cgraph 		freqmodfreq 			-label "Frequency"  -unit Hz -rel log -min 0.001 -max 2000 -init 5 
csepar
cgraph 		gain 			-label Gain -unit x -rel log -min .05 -max 20  -init 1 
ctoggle 		modamp  			-label "Amp modulation"
ctoggle 		modfreq 			-label "Freq modulation"
ctoggle 		antialias 			-label "Anti-alias filter"
ctoggle 		loop 			-label "Loop sound"
cfilein 		source 			-label "Source sound"
cslider  		total_time 			-label "Total duration" -max 500 -in 30 -min 1
cslider 		xtrans 			-label "Transpose" -ra k -u :1 -rel log -ori h -res .001 -min 0.1 -c lightpink1 -max 10 -init 1
</tk_interface>
<mono>
instr	1 

kiamp	= gkmodamp
kifreq 	= gkmodfreq
kialias 	= gkantialias
ktrans	= gktranspose
ktrsum	= 	ktrans*gkxtrans *[sinfo source sr]/sr
iloop	= 	i(gkloop)  

amplitude:
amp = 1
if (kiamp == 0) goto frequency
amp	oscili	gkampmodran, 	gkampmodfreq, 	11
frequency:
kpit = 0
if (kifreq == 0) goto ok
kpit	oscili	gkfreqmoddepth, gkfreqmodfreq , 11

ok:
ag	diskin		"[source]" , (1+kpit)*ktrsum , [offsource], iloop 
ag	= 	ag*gkgain*(amp)

if (kialias == 0) goto noaalias

kalias	=	sr * ktrsum * 0.4
if (ktrsum >= 1) goto noaalias

aliasd1	butterlp	ag, kalias
aliasd2	butterlp	aliasd1, kalias
aliasd3	butterlp	aliasd2, kalias
ag	butterlp	aliasd3, kalias
noaalias:
	 out ag		
								 endin
</mono>
<stereo>
instr	1   

kiamp	=	gkmodamp  
kifreq 	= 	gkmodfreq
kialias 	= 	gkantialias
ktrans	= 	gktranspose
ktrsum	= 	ktrans*gkxtrans *[sinfo source sr]/sr
iloop	= 	i(gkloop)  



amplitude:
amp = 1
if (kiamp == 0) goto frequency
amp		oscili		gkampmodran, 	gkampmodfreq, 	11

frequency:
kpit = 0
if (kifreq == 0) goto ok
kpit		oscili		gkfreqmoddepth, gkfreqmodfreq , 11

ok:
ag, ad 		diskin		"[source]" , (1+kpit)*ktrsum , [offsource], iloop 
ad 		= 	ad*gkgain*(amp)
ag 		= 	ag*gkgain*(1+amp)
if (kialias == 0)		goto noaalias
kalias		=	sr * ktrsum * 0.4
if (ktrsum >= 1) 				goto noaalias

aliasd1		butterlp		ad, kalias
aliasg1		butterlp		ag, kalias
aliasd2		butterlp		aliasd1, kalias
aliasg2		butterlp		aliasg1, kalias
aliasd3		butterlp		aliasd2, kalias
aliasg3		butterlp		aliasg2, kalias
ag		butterlp		aliasg3, kalias
ad		butterlp		aliasd3, kalias
noaalias:
	 	outs 		ag, ad		
								 endin
</stereo>
<quad>

</quad>
<score>
f11 0 8192 10 1
i1 0 [total_time]
e
</score>
