#N canvas 257 128 333 328 10; #X text 137 277 copyright by Roman Haefeli; #X text 53 304 Published under the GNU Public License; #N canvas 0 0 655 649 oscillator 0; #N canvas 314 100 514 407 number_of_harmonics_allowed 0; #X obj 135 68 / 2; #X obj 15 151 /; #X obj 15 174 int; #X obj 135 44 samplerate~; #X obj 15 241 * 0.5; #X obj 15 261 int; #X obj 15 282 * 2; #X obj 15 221 - 1; #X obj 15 305 + 1; #X obj 15 328 change; #X obj 15 199 change; #X obj 15 98 t b f; #X text 241 49 sr / 2 = nyquist frequency; #X obj 15 353 outlet; #X obj 14 18 inlet~; #X obj 15 121 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 connect 0 0 15 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 11 0; #X restore 150 113 pd number_of_harmonics_allowed; #N canvas 499 174 190 222 raw_square 0; #X obj 19 13 inlet~; #X obj 19 180 outlet~; #X obj 102 18 inlet; #X obj 102 43 switch~; #X obj 19 122 -~; #X obj 19 48 -~ 0.5; #X obj 18 76 wrap~; #X obj 18 99 -~ 0.5; #X obj 19 148 *~ 2; #X connect 0 0 5 0; #X connect 2 0 3 0; #X connect 4 0 8 0; #X connect 5 0 6 0; #X connect 5 0 4 1; #X connect 6 0 7 0; #X connect 7 0 4 0; #X connect 8 0 1 0; #X restore 29 404 pd raw_square; #N canvas 0 0 448 226 bandlimited_square 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 BLSQUARE%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 155 405 pd bandlimited_square; #X obj 166 192 * 2; #X obj 297 374 snapshot~; #X obj 150 143 t f f f; #X obj 202 273 == 0; #X obj 202 377 f; #X obj 202 356 sel 1; #X obj 249 319 change; #X obj 297 348 sel 1; #X obj 548 178 inlet; #X text 550 151 phase; #X text 350 346 sync phase \, when switching dsp on; #X text 188 221 switch to raw square \, when number of allowed harmonics exceeds num_of_tables*2; #X msg 397 69 get_num_of_tables; #X obj 397 91 s BLSQUARE; #X obj 397 111 r BLSQUARE; #X obj 397 132 route num_of_tables; #X obj 397 11 loadbang; #X obj 29 272 phasor~; #X text 185 81 get the number of tables ->; #X obj 150 223 >; #X obj 30 7 inlet~; #X obj 28 456 outlet~; #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 text 245 595 raw square; #X text 246 563 bandlimited square; #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 text 40 596 n > num_of_tables*2; #X text 32 565 0 < n < num_of_tables*2; #X obj 397 42 del 0; #X connect 0 0 5 0; #X connect 1 0 24 0; #X connect 2 0 24 0; #X connect 3 0 22 1; #X connect 4 0 2 3; #X connect 5 0 22 0; #X connect 5 1 7 1; #X connect 6 0 8 0; #X connect 6 0 9 0; #X connect 7 0 2 1; #X connect 8 0 7 0; #X connect 9 0 10 0; #X connect 9 0 2 2; #X connect 10 0 4 0; #X connect 11 0 2 3; #X connect 11 0 20 1; #X connect 15 0 16 0; #X connect 17 0 18 0; #X connect 18 0 3 0; #X connect 19 0 48 0; #X connect 20 0 1 0; #X connect 20 0 4 0; #X connect 22 0 1 1; #X connect 22 0 6 0; #X connect 23 0 20 0; #X connect 23 0 0 0; #X connect 23 0 2 0; #X connect 48 0 15 0; #X restore 20 188 pd oscillator; #X obj 19 161 inlet~; #X obj 106 161 inlet; #X obj 20 214 outlet~; #X msg 221 246 version 0.2.0; #N canvas 555 327 605 504 lookup-table-creation 0; #N canvas 535 94 265 461 bandlimited_square_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 84 99 + 1; #X obj 43 125 t f f; #X obj 43 153 % 2; #X obj 43 176 sel 0 1; #X obj 43 203 0; #X obj 69 203 f; #X obj 69 227 t b f; #X obj 69 249 pack 1 f; #X obj 69 274 /; #X obj 43 334 list prepend; #X obj 142 335 list; #X obj 21 363 list; #X obj 154 252 b; #X obj 21 408 list trim; #X obj 21 16 inlet; #X obj 21 430 outlet; #X obj 21 386 list prepend sinesum 512; #X obj 69 299 * 1.27324; #X text 145 298 = 4 / pi; #X connect 0 0 3 0; #X connect 1 0 15 0; #X connect 1 1 0 0; #X connect 1 2 2 0; #X connect 1 2 16 0; #X connect 2 0 3 1; #X connect 3 0 4 0; #X connect 3 0 5 0; #X connect 4 0 3 1; #X connect 5 0 6 0; #X connect 5 1 9 1; #X connect 6 0 7 0; #X connect 7 0 8 0; #X connect 7 1 9 0; #X connect 8 0 13 0; #X connect 9 0 10 0; #X connect 10 0 11 0; #X connect 10 1 11 1; #X connect 11 0 12 0; #X connect 12 0 21 0; #X connect 13 0 14 0; #X connect 13 0 15 1; #X connect 14 0 13 1; #X connect 15 0 20 0; #X connect 16 0 15 1; #X connect 16 0 13 1; #X connect 17 0 19 0; #X connect 18 0 1 0; #X connect 20 0 17 0; #X connect 21 0 13 0; #X restore 15 442 pd bandlimited_square_sinesum; #X obj 15 195 until; #X obj 15 217 f; #X obj 50 217 + 1; #X obj 58 195 1; #X obj 15 238 * 2; #X obj 15 260 - 1; #X obj 80 345 pack f s; #X obj 15 100 t f b b; #X msg 136 270 clear; #X obj 80 317 * 10; #X obj 15 282 t b f f; #X obj 15 407 f; #X obj 15 474 send; #X msg 80 374 obj 10 \$1 table \$2 515; #X obj 131 318 makefilename BLSQUARE%d; #X text 131 214 for synthesizing a square only odd numbers of harmonics ; #X text 131 231 occur. ( 1 \, 3 \, 5 \, 7 \, etc.); #X text 282 374 create the necessary tables; #X text 238 439 fill each table with the appropriate sinesum \,; #X text 237 457 respectively the appropriate number of harmonics.; #X obj 138 123 r \$0-create_additional_tables; #X obj 15 33 r \$0-create_tables; #X obj 15 66 \$1; #X obj 80 396 s pd-\$0-lookup-tables-square; #X connect 0 0 13 0; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 2 0 5 0; #X connect 3 0 2 1; #X connect 4 0 2 1; #X connect 5 0 6 0; #X connect 6 0 11 0; #X connect 7 0 14 0; #X connect 8 0 1 0; #X connect 8 1 4 0; #X connect 8 2 9 0; #X connect 9 0 24 0; #X connect 10 0 7 0; #X connect 11 0 12 0; #X connect 11 1 10 0; #X connect 11 2 12 1; #X connect 11 2 15 0; #X connect 12 0 0 0; #X connect 14 0 24 0; #X connect 15 0 7 1; #X connect 15 0 13 1; #X connect 21 0 1 0; #X connect 22 0 23 0; #X connect 23 0 8 0; #X restore 21 70 pd lookup-table-creation; #N canvas 647 5 291 900 \$0-lookup-tables-square 0; #X restore 21 105 pd \$0-lookup-tables-square; #N canvas 169 33 537 620 singleton-communication 0; #X obj 16 69 r BLSQUARE; #X obj 127 22 loadbang; #X obj 171 77 value BLSQUARE.instance; #X obj 171 100 + 1; #X obj 149 131 value BLSQUARE.instance; #X obj 16 96 spigot; #X obj 149 153 == 1; #X obj 16 120 s \$0-BLSQUARE; #X obj 18 319 r \$0-BLSQUARE; #X obj 127 47 t b b b; #X obj 270 225 \$1; #X obj 127 184 t b b; #X msg 270 246 newdollar1 \$1; #X obj 270 267 s BLSQUARE; #X obj 125 396 > \$1; #X obj 134 419 sel 1; #X obj 134 441 f; #X text 189 397 if new is bigger \, use new number_of_tables; #X obj 134 373 t f f f; #X obj 178 502 - \$1; #X obj 178 526 moses 1; #X obj 222 549 s \$0-create_additional_tables; #X obj 127 214 f; #X obj 127 240 sel 1; #X obj 127 264 s \$0-create_tables; #X obj 18 348 route get_num_of_tables newdollar1; #X obj 18 423 \$1; #X msg 18 461 num_of_tables \$1; #X obj 18 488 s BLSQUARE; #X connect 0 0 5 0; #X connect 1 0 9 0; #X connect 2 0 3 0; #X connect 3 0 4 0; #X connect 4 0 6 0; #X connect 5 0 7 0; #X connect 6 0 5 1; #X connect 6 0 22 1; #X connect 8 0 25 0; #X connect 9 0 11 0; #X connect 9 1 4 0; #X connect 9 2 2 0; #X connect 10 0 12 0; #X connect 11 0 22 0; #X connect 11 1 10 0; #X connect 12 0 13 0; #X connect 14 0 15 0; #X connect 15 0 16 0; #X connect 16 0 14 1; #X connect 16 0 19 1; #X connect 16 0 26 1; #X connect 18 0 14 0; #X connect 18 1 16 1; #X connect 18 2 19 0; #X connect 19 0 20 0; #X connect 20 1 21 0; #X connect 22 0 23 0; #X connect 23 0 24 0; #X connect 25 0 26 0; #X connect 25 1 18 0; #X connect 26 0 27 0; #X connect 27 0 28 0; #X restore 21 36 pd singleton-communication; #X connect 2 0 5 0; #X connect 3 0 2 0; #X connect 4 0 2 1;