<info>
Simple band-pass filter.
Gain is post-balance.

Alexandre Burton , 1996
(rev.2/12/97 for 1.8)
</info>
<tk_interface>
cfilein source    -label "Input Soundfile"
cpopup name -label "Filter type" -value "lowpass highpass bandpass" 
cpopup type -label "Modulation waveform" -value "sine square saw ramp samp&hold" 
ctoggle balance   -label "balance output with input (pre-gain)" -init 1
cgraph center -label "frequency" -unit Hz  -relation log   -min 20 -max 15000 -init 1000
csepar 
cslider reso -label "resonance" -unit x -min 1   -max 20  -init 2 
cslider data1 -label " Random seed" -rat i -res .01 -min 0 -max 1 -init .5

cslider total_time -unit s -ori h -min 1 -res .01 -max 300 -init 30
csepar 
cgraph gain -label "output\ngain" -unit x -rel log -min .1 -max 10 -init 1
ctoggle loop -label loop -init 1
ctoggle nodc -label "Remove DC" -init 1
csepar -label "Modulation"
cgraph modepth -unit x -rel lin -min 0 -max 1 -init .4
cgraph modhz -unit x -rel log -min .1 -max 100 -init 6
</tk_interface>
<mono>
; stereo passband filter

					     instr 1
igo	=	i(gkname)
iloop	=	i(gkloop)
kmodd	init	gkcenter 

kfac	=  [sinfo source sr]/sr 
aing diskin "[source]", kfac, [offsource] ,iloop 

if i(gknodc) == 0 goto nodc

aing	dcblock	aing


nodc: 


kcent	=	octcps(gkcenter)
kmodep	=	( kcent*gkmodepth) *.5   
kmran	expseg 	1,p3,0.001  


kmod1	oscili	kmodep ,gkmodhz, 100   
kmod2	oscili	kmodep, gkmodhz, 13  
kmod3	oscili	kmodep, gkmodhz, 14  
kmod4	oscili	kmodep, gkmodhz, 15  
kmod5	randh   	kmodep , gkmodhz, .365 * gidata1

if gktype 	== 	0  		goto sine  
if gktype 	== 	1  		goto square  
if gktype 	== 	2  		goto saw
if gktype  	== 	3  	 goto ramp 
if gktype  	== 	4  	 goto randip 
 

sine: 
kmodd = kmod1
goto filt
square:
kmodd = kmod2
goto filt
saw:
kmodd = kmod3
goto filt
ramp:
kmodd = kmod4
goto filt 
randip: 
kmodd = kmod5 

filt: 
kmodd = cpsoct(kmodd+kcent)
kfr	=	(kmodd>sr/4 ?sr/4  :kmodd) 
kfr	port	(kfr<30?30:kfr)  ,.0015  
alowg, ahig, abang	  svfilter	aing, kfr, gireso, 1

 
if igo==1 goto hi  
if igo==2 goto band

	aoug	=	alowg  
	goto outer

hi:

	aoug	=	ahig
	goto outer
band:

	aoug	=	abang 
outer:
if gkbalance == 0 goto nobal

aoug	balance	aoug, aing 

nobal:
 	     out	aoug *gkgain
					     endin
</mono>
<stereo>
; stereo passband filter

					     instr 1
igo	=	i(gkname)
iloop	=	i(gkloop)
kmodd	init	gkcenter 

kfac	=  [sinfo source sr]/sr 
aing, aind diskin "[source]", kfac, [offsource] ,iloop 

if i(gknodc) == 0 goto nodc

aind	dcblock	aind
aing	dcblock	aing

nodc: 


kcent	=	octcps(gkcenter)
kmodep	=	( kcent*gkmodepth) *.5   
kmran	expseg 	1,p3,0.001  


kmod1	oscili	kmodep ,gkmodhz, 100   
kmod2	oscili	kmodep, gkmodhz, 13  
kmod3	oscili	kmodep, gkmodhz, 14  
kmod4	oscili	kmodep, gkmodhz, 15  
kmod5	randh   	kmodep , gkmodhz, .365 * gidata1

if gktype 	== 	0  		goto sine  
if gktype 	== 	1  		goto square  
if gktype 	== 	2  		goto saw
if gktype  	== 	3  	 goto ramp 
if gktype  	== 	4  	 goto randip 
 

sine: 
kmodd = kmod1
goto filt
square:
kmodd = kmod2
goto filt
saw:
kmodd = kmod3
goto filt
ramp:
kmodd = kmod4
goto filt 
randip: 
kmodd = kmod5 

filt: 
kmodd = cpsoct(kmodd+kcent)
kfr	=	(kmodd>sr/4 ?sr/4  :kmodd) 
kfr	port	(kfr<30?30:kfr)  ,.0015  
alowg, ahig, abang	  svfilter	aing, kfr, gireso, 1
alowd, ahid, aband	  svfilter	aind, kfr  , gireso  , 1   
 
if igo==1 goto hi  
if igo==2 goto band
	aoud	=	alowd
	aoug	=	alowg  
	goto outer

hi:
	aoud	=	ahid
	aoug	=	ahig
	goto outer
band:
	aoud	=	aband
	aoug	=	abang 
outer:
if gkbalance == 0 goto nobal
aoud	balance	aoud, aind
aoug	balance	aoug, aing 

nobal:
 	     outs	aoud*gkgain, aoug *gkgain
					     endin
</stereo>
<quad>

</quad>
<score>
f100 0 8193  10 1
f13 0 8193 7 0 5 -1 4081 -1 10 1 4081  1 5 0
f14 0 8193 7 -1 5 1 8187 -1
f15 0 8193 7 -1 5 -1 8187 1
i1 0 [total_time]
</score>
