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