1/*
2    YC-20 divider circuit implementation in Faust
3    Copyright(C) 2010 Sampo Savolainen <v2@iki.fi>
4
5    This program is free software: you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation, either version 3 of the License, or
8    (at your option) any later version.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
18*/
19
20// 8 dividers => 9 octaves
21
22dividers = par(i, 12, divider);
23
24divider(antialias) = _,
25	(divide : _,
26	(divide : _,
27	(divide : _,
28	(divide : _,
29	(divide : _,
30	(divide : _,
31	(divide : _, !)
32	))))))
33with {
34	divide = phase_divisor <: polyblep_square_slave(antialias), _;
35};
36
37phase_divisor(ph) = slow_accumulator(ph) / 2.0
38with {
39        slow_accumulator(x) = (prevphase(x) ~ _) + x;
40
41        prevphase(x, whichphase) = select2( (x - x@1) < 0, whichphase, 1-whichphase);
42
43
44};
45
46