#N canvas 185 50 290 282 10; #N canvas 0 0 626 647 oscilllator~ 0; #N canvas 314 100 514 407 number_of_harmonics_allowed 0; #X obj 135 68 / 2; #X obj 62 163 /; #X obj 15 195 int; #X obj 135 44 samplerate~; #X obj 15 261 * 0.5; #X obj 15 281 int; #X obj 15 302 * 2; #X obj 15 241 - 1; #X obj 15 325 + 1; #X obj 15 348 change; #X obj 15 219 change; #X obj 62 118 t b f; #X text 241 49 sr / 2 = nyquist frequency; #X obj 15 373 outlet; #X obj 14 18 inlet~; #X obj 62 141 f; #X obj 135 21 loadbang; #X text 119 216 harmonics never should exceed the nyquist frequency ; #X obj 15 49 snapshot~; #X obj 78 21 bang~; #X obj 15 72 change; #X obj 15 95 sel 0; #X obj 15 140 f; #X connect 0 0 15 1; #X connect 0 0 22 1; #X connect 1 0 2 0; #X connect 2 0 10 0; #X connect 3 0 0 0; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 6 0 8 0; #X connect 7 0 4 0; #X connect 8 0 9 0; #X connect 9 0 13 0; #X connect 10 0 7 0; #X connect 11 0 15 0; #X connect 11 1 1 1; #X connect 14 0 18 0; #X connect 15 0 1 0; #X connect 16 0 3 0; #X connect 18 0 20 0; #X connect 19 0 18 0; #X connect 20 0 21 0; #X connect 21 0 22 0; #X connect 21 1 11 0; #X connect 22 0 2 0; #X restore 161 113 pd number_of_harmonics_allowed; #X obj 40 33 inlet~; #X obj 39 463 outlet~; #X obj 177 192 * 2; #X obj 322 360 snapshot~; #X obj 161 143 t f f f; #X obj 218 273 == 0; #X obj 218 377 f; #X obj 218 356 sel 1; #X obj 270 302 change; #X obj 322 334 sel 1; #X text 33 494 number of harmononics; #X text 32 512 without exceeding nyquist; #X text 31 531 at given frequeny:; #X text 251 520 best method:; #X obj 559 178 inlet; #X text 565 150 phase; #X text 375 332 sync phase \, when switching dsp on; #X text 199 221 switch to raw square \, when number of allowed harmonics exceeds num_of_tables*2; #X msg 408 69 get_num_of_tables; #X obj 408 132 route num_of_tables; #X obj 40 272 phasor~; #X text 196 81 get the number of tables ->; #X text 227 496 |; #X text 227 505 |; #X text 227 514 |; #X text 227 523 |; #X text 227 533 |; #X text 227 542 |; #X text 227 551 |; #X text 227 560 |; #X text 227 567 |; #X text 227 576 |; #X text 227 585 |; #X text 227 594 |; #X text 227 604 |; #X text 25 541 __________________________________________________; #X text 25 575 __________________________________________________; #X obj 161 223 >; #X text 40 596 n > num_of_tables*2; #X text 32 565 0 < n < num_of_tables*2; #X obj 408 91 s BLTRIANGLE; #X obj 408 111 r BLTRIANGLE; #N canvas 499 174 200 210 raw_triangle 0; #X obj 19 13 inlet~; #X obj 18 159 outlet~; #X obj 102 18 inlet; #X obj 102 43 switch~; #X obj 43 41 *~ -1; #X obj 43 63 +~ 1; #X obj 19 86 min~; #X obj 18 110 *~ 4; #X obj 18 136 -~ 1; #X connect 0 0 6 0; #X connect 0 0 4 0; #X connect 2 0 3 0; #X connect 4 0 5 0; #X connect 5 0 6 1; #X connect 6 0 7 0; #X connect 7 0 8 0; #X connect 8 0 1 0; #X restore 40 411 pd raw_triangle; #N canvas 0 0 448 226 bandlimited_triangle 0; #X obj 16 31 inlet~; #X obj 71 33 inlet; #X obj 261 34 inlet; #X obj 17 192 outlet~; #X msg 71 96 set \$1; #X obj 261 124 switch~; #X obj 347 36 inlet; #X text 69 14 choose table; #X text 346 17 set phase; #X text 256 14 switch dsp; #X obj 71 71 makefilename BLTRIANGLE%d; #X obj 17 134 tabosc4~; #X connect 0 0 11 0; #X connect 1 0 10 0; #X connect 2 0 5 0; #X connect 4 0 11 0; #X connect 6 0 11 1; #X connect 10 0 4 0; #X connect 11 0 3 0; #X restore 166 412 pd bandlimited_triangle; #X text 246 563 bandlimited triangle; #X text 245 595 raw triangle; #X obj 84 247 + 0.25; #X obj 322 385 + 0.75; #X obj 161 91 abs~; #X obj 408 37 r \$0.loadbang.3; #X connect 0 0 5 0; #X connect 1 0 44 0; #X connect 1 0 21 0; #X connect 1 0 49 0; #X connect 3 0 38 1; #X connect 4 0 48 0; #X connect 5 0 38 0; #X connect 5 1 7 1; #X connect 6 0 8 0; #X connect 6 0 9 0; #X connect 7 0 44 1; #X connect 8 0 7 0; #X connect 9 0 10 0; #X connect 9 0 44 2; #X connect 10 0 4 0; #X connect 15 0 44 3; #X connect 15 0 47 0; #X connect 19 0 41 0; #X connect 20 0 3 0; #X connect 21 0 43 0; #X connect 21 0 4 0; #X connect 38 0 43 1; #X connect 38 0 6 0; #X connect 42 0 20 0; #X connect 43 0 2 0; #X connect 44 0 2 0; #X connect 47 0 21 1; #X connect 48 0 44 3; #X connect 49 0 0 0; #X connect 50 0 19 0; #X restore 22 155 pd oscilllator~; #X obj 21 124 inlet~; #X obj 122 124 inlet; #X obj 21 183 outlet~; #N canvas 270 201 596 370 lookup-table-creation 0; #X obj 13 48 until; #X obj 48 70 + 1; #X obj 13 91 * 2; #X obj 13 113 - 1; #X obj 78 198 pack f s; #X obj 78 170 * 10; #X obj 13 135 t b f f; #X obj 13 260 f; #X msg 78 227 obj 10 \$1 table \$2 515; #X text 108 79 occur. ( 1 \, 3 \, 5 \, 7 \, etc.); #X text 304 239 create the necessary tables; #X text 236 292 fill each table with the appropriate sinesum \,; #X text 235 310 respectively the appropriate number of harmonics.; #X obj 129 171 makefilename BLTRIANGLE%d; #N canvas 535 94 364 553 bandlimited_triangle_sinesum 0; #X obj 43 67 until; #X obj 21 38 t b f b; #X obj 84 67 1; #X obj 43 99 f 1; #X obj 43 415 list prepend; #X obj 142 416 list; #X obj 21 444 list; #X obj 21 489 list trim; #X obj 21 16 inlet; #X obj 21 511 outlet; #X obj 21 467 list prepend sinesum 512; #X obj 191 274 b; #X obj 83 99 + 1; #X obj 43 175 sel 0 1; #X obj 43 200 0; #X obj 70 201 f; #X obj 43 125 t f f; #X obj 43 151 mod 2; #X obj 100 245 mod 4; #X obj 70 222 t f f; #X obj 100 267 sel 3; #X obj 136 290 b; #X obj 100 290 -1; #X obj 136 312 1; #X obj 70 323 pow -2; #X obj 70 349 *; #X obj 70 376 * 0.810571; #X text 163 375 = 8 / (pi^2); #X connect 0 0 3 0; #X connect 1 0 6 0; #X connect 1 1 0 0; #X connect 1 2 2 0; #X connect 1 2 11 0; #X connect 2 0 3 1; #X connect 3 0 12 0; #X connect 3 0 16 0; #X connect 4 0 5 0; #X connect 4 0 6 1; #X connect 5 0 4 1; #X connect 6 0 10 0; #X connect 7 0 9 0; #X connect 8 0 1 0; #X connect 10 0 7 0; #X connect 11 0 6 1; #X connect 11 0 4 1; #X connect 12 0 3 1; #X connect 13 0 14 0; #X connect 13 1 15 0; #X connect 14 0 4 0; #X connect 15 0 19 0; #X connect 16 0 17 0; #X connect 16 1 15 1; #X connect 17 0 13 0; #X connect 18 0 20 0; #X connect 19 0 24 0; #X connect 19 1 18 0; #X connect 20 0 22 0; #X connect 20 1 21 0; #X connect 21 0 23 0; #X connect 22 0 25 1; #X connect 23 0 25 1; #X connect 24 0 25 0; #X connect 25 0 26 0; #X connect 26 0 4 0; #X restore 13 295 pd bandlimited_triangle_sinesum; #X text 106 55 for synthesizing a triangle only odd numbered of harmonics ; #X obj 78 263 s pd-\$0-lookup-tables-triangle; #X obj 13 70 1; #X obj 13 13 r \$0.create_tables; #X obj 13 327 send; #X connect 0 0 17 0; #X connect 1 0 17 1; #X connect 2 0 3 0; #X connect 3 0 6 0; #X connect 4 0 8 0; #X connect 5 0 4 0; #X connect 6 0 7 0; #X connect 6 1 5 0; #X connect 6 2 7 1; #X connect 6 2 13 0; #X connect 7 0 14 0; #X connect 8 0 16 0; #X connect 13 0 4 1; #X connect 13 0 19 1; #X connect 14 0 19 0; #X connect 17 0 1 0; #X connect 17 0 2 0; #X connect 18 0 0 0; #X restore 21 61 pd lookup-table-creation; #N canvas 402 20 247 234 singleton-communication 0; #X obj 7 8 loadbang; #N canvas 0 0 214 242 get_num_of_tables 0; #X msg 13 186 num_of_tables \$1; #X obj 13 213 s BLTRIANGLE; #X obj 13 14 r BLTRIANGLE; #X obj 13 56 spigot; #X obj 13 80 route get_num_of_tables; #X obj 50 35 r \$0.enable; #X obj 44 107 r BLTRIANGLE; #X obj 44 128 route num_of_tables; #X obj 13 155 f; #X connect 0 0 1 0; #X connect 2 0 3 0; #X connect 3 0 4 0; #X connect 4 0 8 0; #X connect 5 0 3 1; #X connect 6 0 7 0; #X connect 7 0 8 1; #X connect 8 0 0 0; #X restore 7 184 pd get_num_of_tables; #N canvas 379 355 499 470 become_singleton 0; #X obj 38 87 s BLTRIANGLE; #X obj 37 121 r BLTRIANGLE; #X obj 37 185 spigot; #X obj 74 164 r \$0.enable; #X msg 38 66 singletonthere?; #X obj 37 143 route singletonthere?; #X msg 37 206 yesthere; #X obj 37 228 s BLTRIANGLE; #X obj 37 253 r BLTRIANGLE; #X obj 37 275 route yesthere; #X obj 16 31 t b b b; #X obj 37 295 b; #X obj 16 341 f; #X obj 16 403 s \$0.enable; #X text 69 348 if no singleton is existent \, enable communication \, which in return creates the necessary lookup-tables and makes itself to the singleton instance.; #X obj 16 8 r \$0.loadbang.1; #X obj 60 317 1; #X obj 37 317 0; #X obj 270 18 flow.send.destroy \$0.destroyed; #X obj 270 45 r \$0.destroyed; #X obj 270 93 spigot; #X obj 307 72 r \$0.enable; #X msg 270 117 createnewsingleton; #X obj 270 138 s BLTRIANGLE; #X connect 1 0 5 0; #X connect 2 0 6 0; #X connect 3 0 2 1; #X connect 4 0 0 0; #X connect 5 0 2 0; #X connect 6 0 7 0; #X connect 8 0 9 0; #X connect 9 0 11 0; #X connect 10 0 12 0; #X connect 10 1 4 0; #X connect 10 2 16 0; #X connect 11 0 17 0; #X connect 12 0 13 0; #X connect 15 0 10 0; #X connect 16 0 12 1; #X connect 17 0 12 1; #X connect 19 0 20 0; #X connect 20 0 22 0; #X connect 21 0 20 1; #X connect 22 0 23 0; #X restore 7 164 pd become_singleton; #N canvas 272 171 481 368 how_many_tables_to_create 0; #X obj 11 160 sel 1; #X obj 11 182 f; #X obj 11 114 t f f f; #X obj 12 296 moses 1; #X obj 11 9 r BLTRIANGLE; #X obj 11 64 spigot; #X msg 105 267 num_of_tables \$1; #X obj 105 295 s BLTRIANGLE; #X obj 48 39 r \$0.enable; #X obj 233 36 \$1; #X obj 233 57 sel 0; #X obj 233 79 40; #X obj 233 121 s BLTRIANGLE; #X obj 11 137 >; #X obj 11 92 route needtables; #X obj 12 272 -; #X obj 13 330 s \$0.create_tables; #X text 59 186 if new value is bigger \, use increased number_of_tables and create additional tables; #X obj 233 16 r \$0.loadbang.2; #X msg 233 100 needtables \$1; #X obj 223 305 print; #X connect 0 0 1 0; #X connect 1 0 6 0; #X connect 1 0 13 1; #X connect 1 0 15 1; #X connect 2 0 13 0; #X connect 2 1 1 1; #X connect 2 2 15 0; #X connect 3 1 16 0; #X connect 4 0 5 0; #X connect 5 0 14 0; #X connect 6 0 7 0; #X connect 6 0 20 0; #X connect 8 0 5 1; #X connect 9 0 10 0; #X connect 10 0 11 0; #X connect 10 1 19 0; #X connect 11 0 19 0; #X connect 13 0 0 0; #X connect 14 0 2 0; #X connect 15 0 3 0; #X connect 18 0 9 0; #X connect 19 0 12 0; #X restore 7 204 pd how_many_tables_to_create; #X obj 7 128 s \$0.loadbang.3; #X obj 29 107 s \$0.loadbang.2; #X obj 51 86 s \$0.loadbang.1; #X obj 7 63 t b b b; #X obj 70 7 r BLTRIANGLE; #X obj 70 29 route createnewsingleton; #X connect 0 0 7 0; #X connect 7 0 4 0; #X connect 7 1 5 0; #X connect 7 2 6 0; #X connect 8 0 9 0; #X connect 9 0 7 0; #X restore 21 36 pd singleton-communication; #N canvas 647 5 291 900 \$0-lookup-tables-triangle 0; #X restore 21 86 pd \$0-lookup-tables-triangle; #X text 120 253 Author: Roman Haefeli; #X msg 169 227 version 0.1.1; #X connect 0 0 3 0; #X connect 1 0 0 0; #X connect 2 0 0 1;