<info>
Mask filter - with upper and lower cut-offs
gain is post-balance

Alexandre Burton, 1996
</info>
<tk_interface>
cfilein source
ctoggle balance -label "Restore Power" -init 1
ctoggle butter -label "ButterWorth Filters"
cgraph freqsup -uni Hz -label "Upper\nFrequency" -rel log -min 20 -max 20000 -func "0 10000 1 100"
cgraph freqinf -label  "Lower\nFrequency" -uni Hz -rel log -min 20 -max 20000 -func "0 5000 1 50 "
csepar
cgraph gain -label Gain -uni x -rel log -min 0.1 -max 10 -init 1
</tk_interface>
<mono>
	instr 1

kibal	= gkbalance
kibut	= gkbutter

kfac	=	[sinfo source sr]/sr

aing diskin "[source]", kfac, [offsource]

ok:
    if (kibut == 1) igoto butter
	afiltg00	tone	aing, gkfreqsup
	afiltg01	tone	afiltg00, gkfreqsup
	afiltg02	tone	afiltg01, gkfreqsup
	afiltg03	tone	afiltg02, gkfreqsup
	
	afiltg07	atone	afiltg03, gkfreqinf
	afiltg08	atone	afiltg07, gkfreqinf
	afiltg09	atone	afiltg08, gkfreqinf
	afiltg10	atone	afiltg09, gkfreqinf
	goto bal
    
    butter:
	afiltg00	butterlp	aing, gkfreqsup
	afiltg01	butterlp	afiltg00, gkfreqsup
	afiltg02	butterlp	afiltg01, gkfreqsup
	afiltg03	butterlp	afiltg02, gkfreqsup
	
	afiltg07	butterhp	afiltg03, gkfreqinf
	afiltg08	butterhp	afiltg07, gkfreqinf
	afiltg09	butterhp	afiltg08, gkfreqinf
	afiltg10	butterhp	afiltg09, gkfreqinf
	goto bal

bal:
    if 	(kibal == 0 ) goto nobal
	afiltg10	balance afiltg10, aing

nobal:
	out	afiltg10*gkgain	
		endin
</mono>
<stereo>
	instr 1

kibal	= gkbalance	
kibut	= gkbutter
kfac	=	[sinfo source sr]/sr

aing, aind diskin "[source]", kfac, [offsource]

    if (kibut == 1) igoto butter
	afiltg00	tone	aing, gkfreqsup
	afiltd00	tone	aind, gkfreqsup
	afiltg01	tone	afiltg00, gkfreqsup
	afiltd01	tone	afiltd00, gkfreqsup
	afiltg02	tone	afiltg01, gkfreqsup
	afiltd02	tone	afiltd01, gkfreqsup
	afiltg03	tone	afiltg02, gkfreqsup
	afiltd03	tone	afiltd02, gkfreqsup
	
	afiltg07	atone	afiltg03, gkfreqinf
	afiltd07	atone	afiltd03, gkfreqinf
	afiltg08	atone	afiltg07, gkfreqinf
	afiltd08	atone	afiltd07, gkfreqinf
	afiltg09	atone	afiltg08, gkfreqinf
	afiltd09	atone	afiltd08, gkfreqinf
	afiltg10	atone	afiltg09, gkfreqinf
	afiltd10	atone	afiltd09, gkfreqinf
	goto bal
    
butter:
	afiltg00	butterlp	aing, gkfreqsup
	afiltd00	butterlp	aind, gkfreqsup
	afiltg01	butterlp	afiltg00, gkfreqsup
	afiltd01	butterlp	afiltd00, gkfreqsup
	afiltg02	butterlp	afiltg01, gkfreqsup
	afiltd02	butterlp	afiltd01, gkfreqsup
	afiltg03	butterlp	afiltg02, gkfreqsup
	afiltd03	butterlp	afiltd02, gkfreqsup
	
	afiltg07	butterhp	afiltg03, gkfreqinf
	afiltd07	butterhp	afiltd03, gkfreqinf
	afiltg08	butterhp	afiltg07, gkfreqinf
	afiltd08	butterhp	afiltd07, gkfreqinf
	afiltg09	butterhp	afiltg08, gkfreqinf
	afiltd09	butterhp	afiltd08, gkfreqinf
	afiltg10	butterhp	afiltg09, gkfreqinf
	afiltd10	butterhp	afiltd09, gkfreqinf

bal:
    if 	(kibal == 0 ) goto nobal
	afiltg10	balance afiltg10, aing
	afiltd10	balance afiltd10, aind

nobal:
	outs	afiltg10*gkgain, afiltd10*gkgain
	
		endin
</stereo>
<quad>

</quad>
<score>
#minimum
</score>
