#N canvas 410 23 559 723 10;
#X declare -stdpath ./;
#X obj 2 701 cnv 15 552 21 empty empty empty 20 12 0 14 #e0e0e0 #202020 0;
#X obj 5 495 cnv 3 550 3 empty empty inlets 8 12 0 13 #dcdcdc #000000 0;
#X obj 2 588 cnv 3 550 3 empty empty outlets 8 12 0 13 #dcdcdc #000000 0;
#X obj 2 625 cnv 3 550 3 empty empty arguments 8 12 0 13 #dcdcdc #000000 0;
#X obj 98 504 cnv 17 3 53 empty empty 0 5 9 0 16 #dcdcdc #9c9c9c 0;
#X obj 98 599 cnv 17 3 17 empty empty 0 5 9 0 16 #dcdcdc #9c9c9c 0;
#X text 144 506 signal;
#X obj 98 563 cnv 17 3 17 empty empty 1 5 9 0 16 #dcdcdc #9c9c9c 0;
#X text 144 561 signal;
#X text 144 600 signal;
#X text 198 600 - the triangle wavetable output based on args;
#X text 133 635 1) float;
#X text 198 561 - variable duty (peak position) from 0-1;
#X text 199 634 - peak position from 0 to 1 (default 0.5);
#X obj 4 659 cnv 3 550 3 empty empty attributes 8 12 0 13 #dcdcdc #000000 0;
#X text 170 681 @hi <f> (default 1) - same as "hi" message;
#X text 120 523 lo <float>;
#X text 120 540 hi <float>;
#X text 198 539 - changes highest point (default 1);
#X text 198 506 - phase input signal;
#X text 198 524 - changes lowest point (default -1);
#X text 170 666 @lo <f> (default -1) - same as "lo" message;
#X obj 493 69 cyclone/dsponoff~;
#X obj 5 4 ./header triangle~;
#X text 16 61 Variable duty triangular wavetable;
#X text 25 85 [triangle~] is a triangular wavetable that is read with phase values from 0 to 1 into the first inlet- a [phasor~] input turns it into a wavetable oscillator. A second inlet changes the position of the peak value (variable duty \, from 0 to 1) \, going from sawtooth like waveforms to triangular ones. The default lo/hi points are -1 and 1 \, but may be changed using the lo/hi messages to any given range., f 70;
#X floatatom 187 219 6 0 0 0 - - - 0;
#X floatatom 237 242 6 0 0 0 - - - 0;
#X obj 385 293 line~;
#X obj 388 216 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 #dcdcdc #000000 #000000 0 1;
#X floatatom 385 244 5 0 0 0 - - - 0;
#X obj 190 196 hsl 128 15 -1 1 0 0 empty empty empty -2 -8 0 10 #f0f0f0 #000000 #000000 0 1;
#X obj 240 219 hsl 128 15 -1 1 0 0 empty empty empty -2 -8 0 10 #f0f0f0 #000000 #000000 0 1;
#X msg 385 267 \$1 50;
#X msg 187 241 lo \$1;
#X msg 237 264 hi \$1;
#X obj 152 292 cyclone/triangle~ @lo -0.5 @hi 0.5;
#X obj 23 363 output~;
#X obj 150 405 declare -stdpath ./;
#X obj 307 332 cnv 19 200 80 empty empty empty 20 12 0 12 #e0e0e0 #404040 0;
#N canvas 0 50 450 250 (subpatch) 0;
#X array \$0-tri 441 float 0;
#X coords 0 1 440 -1 202 82 1 0 0;
#X restore 306 331 graph;
#X obj 162 350 metro 100;
#X obj 162 327 loadbang;
#X obj 152 378 tabwrite~ \$0-tri;
#X obj 150 170 phasor~ 110;
#X obj 395 467 open-else;
#X text 434 439 click;
#X text 68 449 see also:;
#X msg 395 439 vsaw~;
#X text 138 446 Plugdata users or those with ELSE can also use [else/vsaw~] as an alternative., f 40;
#X connect 26 0 34 0;
#X connect 27 0 35 0;
#X connect 28 0 36 1;
#X connect 29 0 30 0;
#X connect 30 0 33 0;
#X connect 31 0 26 0;
#X connect 32 0 27 0;
#X connect 33 0 28 0;
#X connect 34 0 36 0;
#X connect 35 0 36 0;
#X connect 36 0 37 0;
#X connect 36 0 43 0;
#X connect 41 0 43 0;
#X connect 42 0 41 0;
#X connect 44 0 36 0;
#X connect 48 0 45 0;
