#N canvas 202 22 1367 883 12; #X obj 49 220 *~ 2; #X obj 49 244 -~ 1; #X obj 49 273 tabsend~ sawtooth; #N canvas 0 22 450 278 (subpatch) 0; #X array sawtooth 64 float 1; #A 0 0.294856 0.362883 0.43091 0.498938 0.566965 0.634992 0.703019 0.771047 0.839074 0.907101 0.975128 -0.956845 -0.888817 -0.82079 -0.752763 -0.684736 -0.616709 -0.548681 -0.480654 -0.412627 -0.3446 -0.276572 -0.208545 -0.140518 -0.0724908 -0.00446361 0.0635636 0.131591 0.199618 0.267645 0.335672 0.4037 0.471727 0.539754 0.607781 0.675809 0.743836 0.811863 0.87989 0.947917 -0.984055 -0.916028 -0.848001 -0.779974 -0.711947 -0.643919 -0.575892 -0.507865 -0.439838 -0.37181 -0.303783 -0.235756 -0.167729 -0.0997016 -0.0316744 0.0363528 0.10438 0.172407 0.240434 0.308462 0.376489 0.444516 0.512543 0.58057; #X coords 0 1.25 63 -1.25 128 101 1 0 0; #X restore 49 42 graph; #X obj 49 191 phasor~ 1500; #X obj 229 302 tabsend~ square; #N canvas 0 22 450 278 (subpatch) 0; #X array square 64 float 1; #A 0 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1; #X coords 0 1.25 63 -1.25 128 101 1 0 0; #X restore 229 41 graph; #X obj 229 249 *~ 1000; #X obj 229 191 phasor~ 1500; #X obj 229 273 clip~ -1 1; #X text 89 231 <- normalize; #X text 319 260 <- clip; #X obj 29 161 cnv 7 7 140 empty empty Sawtooth 12 8 0 16 #ffffff #ffffff 0; #X obj 209 161 cnv 7 7 140 empty empty Square 12 8 0 16 #ffffff #ffffff 0; #N canvas 0 22 450 278 (subpatch) 0; #X array square-2 64 float 1; #A 0 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 1; #X coords 0 1.25 63 -1.25 128 101 1 0 0; #X restore 489 41 graph; #X obj 489 191 phasor~ 1500; #X obj 469 161 cnv 7 7 140 empty empty Other\ Square 12 8 0 16 #ffffff #ffffff 0; #X obj 519 264 wrap~; #X obj 489 294 -~; #X obj 571 401 tabsend~ square-2; #X obj 571 347 *~ 2; #X obj 571 371 -~ 1; #X obj 571 323 +~; #X obj 519 240 +~; #N canvas 0 22 450 278 (subpatch) 0; #X array triangle 64 float 1; #A 0 -0.410288 -0.274233 -0.138179 -0.00212455 0.13393 0.269984 0.406039 0.542093 0.678148 0.814202 0.950256 0.913689 0.777635 0.64158 0.505526 0.369471 0.233417 0.0973626 -0.0386918 -0.174746 -0.310801 -0.446855 -0.58291 -0.718964 -0.855018 -0.991073 -0.872873 -0.736818 -0.600764 -0.46471 -0.328655 -0.192601 -0.0565462 0.0795083 0.215563 0.351617 0.487671 0.623726 0.75978 0.895835 0.968111 0.832056 0.696002 0.559947 0.423893 0.287839 0.151784 0.0157298 -0.120325 -0.256379 -0.392433 -0.528488 -0.664542 -0.800597 -0.936651 -0.927294 -0.79124 -0.655185 -0.519131 -0.383077 -0.247022 -0.110968 0.0250866 0.161141; #X coords 0 1.25 63 -1.25 128 101 1 0 0; #X restore 779 41 graph; #X obj 779 191 phasor~ 1500; #X obj 759 161 cnv 7 7 140 empty empty Triangle 12 8 0 16 #ffffff #ffffff 0; #X obj 779 244 abs~; #X obj 779 273 *~ 4; #X obj 779 297 -~ 1; #X obj 779 220 -~ 0.5; #X text 289 220 <- pulse width (0 to 1); #X obj 229 220 -~ 0.25; #X obj 589 211 sig~ 0.5; #X obj 779 326 tabsend~ triangle; #X obj 36 558 phasor~ 1500; #N canvas 299 349 450 300 saw 0; #X obj 37 37 inlet~; #X obj 37 61 outlet~; #X connect 0 0 1 0; #X restore 36 602 pd saw; #N canvas 299 349 450 300 square 0; #X obj 37 37 inlet~; #X obj 37 61 outlet~; #X connect 0 0 1 0; #X restore 96 602 pd square; #N canvas 299 349 450 300 triangle 0; #X obj 37 37 inlet~; #X obj 37 61 outlet~; #X connect 0 0 1 0; #X restore 176 602 pd triangle; #X obj 396 558 phasor~ 1500; #N canvas 299 349 450 300 saw 0; #X obj 37 37 inlet~; #X obj 37 61 outlet~; #X connect 0 0 1 0; #X restore 396 602 pd saw; #X text 611 347 <- normalize; #X text 559 264 <–––––––– phase shift; #X text 589 191 ↓ pulse width (0 to 1); #X text 829 231 <- invert negative values; #X text 819 283 <- normalize; #X obj 496 558 phasor~ 1500; #X obj 596 558 phasor~ 1500; #N canvas 299 349 450 300 square 0; #X obj 37 37 inlet~; #X obj 37 61 outlet~; #X connect 0 0 1 0; #X restore 496 602 pd square; #N canvas 299 349 450 300 triangle 0; #X obj 37 37 inlet~; #X obj 37 61 outlet~; #X connect 0 0 1 0; #X restore 596 602 pd triangle; #X text 571 421 // Plot waveform; #X text 229 322 // Plot waveform; #X text 49 293 // Plot waveform; #X text 779 346 // Plot waveform; #X text 36 508 Best Practice ––––––; #X text 36 528 Single phasor~ \, parallel waveshapers; #X text 396 528 One phasor~ per waveshaper; #X text 396 508 Bad habit ––––––; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 4 0 0 0; #X connect 7 0 9 0; #X connect 8 0 32 0; #X connect 9 0 5 0; #X connect 15 0 18 0; #X connect 15 0 23 0; #X connect 17 0 18 1; #X connect 18 0 22 0; #X connect 20 0 21 0; #X connect 21 0 19 0; #X connect 22 0 20 0; #X connect 23 0 17 0; #X connect 25 0 30 0; #X connect 27 0 28 0; #X connect 28 0 29 0; #X connect 29 0 34 0; #X connect 30 0 27 0; #X connect 32 0 7 0; #X connect 33 0 23 1; #X connect 33 0 22 1; #X connect 35 0 36 0; #X connect 35 0 37 0; #X connect 35 0 38 0; #X connect 39 0 40 0; #X connect 46 0 48 0; #X connect 47 0 49 0;