1Vocode {
2	*ar {arg src, harm, noise, anabwscale = 0.5, outbw = 0.01, freqmul = 1, mul = 1, add = 0;
3		var freqArray, bwArray, ana, amps, freqs, pch, haspch, sigout;
4		freqArray = [50, 150, 250, 350, 450, 570, 700, 840, 1000, 1170, 1370, 1600, 1850, 2150,
5			2500, 2900, 3400, 4000, 4800];
6		bwArray = [50, 50, 50, 50, 60, 70, 80, 80, 100, 110, 130, 150, 180, 200, 250, 400, 500,
7			600, 700] * anabwscale;
8		ana = BPF.ar(src, freqArray, bwArray / freqArray);
9		amps = Amplitude.ar(ana); //should be ana
10		freqs = Array.fill(freqArray.size,
11			{arg i;
12				Pitch.kr(ana[i], freqArray[i], freqArray[i] - bwArray[i],
13					freqArray[i] + bwArray[i])[0]}
14			);
15		#pch, haspch = Pitch.kr(src, 100, 60, 440);
16		haspch = Lag2.kr(haspch, 0.01);
17		sigout = (harm * haspch) + (noise * (1 - haspch)) ;
18		^(Resonz.ar(sigout, freqs * freqmul, outbw) * amps).sum.madd(mul, add);
19	}
20}
21
22VocodeBand {
23	*ar {arg src, band = 0, harm, noise, anabwscale = 0.5, outbw = 0.01, freqmul = 1, mul = 1,
24			add = 0;
25		var freqArray, bwArray, ana, amps, freqs, pch, haspch, sigout, freq, bw;
26		freqArray = [50, 150, 250, 350, 450, 570, 700, 840, 1000, 1170, 1370, 1600, 1850, 2150,
27			2500, 2900, 3400, 4000, 4800];
28		bwArray = [50, 50, 50, 50, 60, 70, 80, 80, 100, 110, 130, 150, 180, 200, 250, 400, 500,
29			600, 700] * anabwscale;
30		freq = freqArray[band];
31		bw = bwArray[band];
32		ana = BPF.ar(src, freq, bw / freq);
33		amps = Amplitude.ar(ana); //should be ana
34		freqs = Pitch.kr(ana, freq, freq - bw, freq + bw)[0];
35		#pch, haspch = Pitch.kr(src, 100, 60, 440);
36		haspch = Lag2.kr(haspch, 0.01);
37		sigout = (harm * haspch) + (noise * (1 - haspch)) ;
38		^(Resonz.ar(sigout, freq * freqmul, outbw) * amps).madd(mul, add);
39	}
40}