#N canvas 403 23 559 723 10;
#X obj 4 697 cnv 15 552 21 empty empty empty 20 12 0 14 #e0e0e0 #202020 0;
#X obj 5 350 cnv 3 550 3 empty empty inlets 8 12 0 13 #dcdcdc #000000 0;
#X obj 6 598 cnv 3 550 3 empty empty outlets 8 12 0 13 #dcdcdc #000000 0;
#X obj 4 624 cnv 3 550 3 empty empty arguments 8 12 0 13 #dcdcdc #000000 0;
#X obj 68 357 cnv 17 3 208 empty empty 0 5 9 0 16 #dcdcdc #9c9c9c 0;
#X text 150 357 signal;
#X text 205 603 (none);
#X text 156 371 float;
#X obj 68 569 cnv 17 3 24 empty empty 1 5 9 0 16 #dcdcdc #9c9c9c 0;
#X text 150 567 signal;
#X text 156 581 float;
#X text 194 567 - signal to be displayed on the Y axis, f 58;
#X text 194 357 - signal to be displayed in the X axis, f 58;
#X text 205 629 (none);
#X obj 4 649 cnv 3 550 3 empty empty attributes 8 12 0 13 #dcdcdc #000000 0;
#X text 194 581 - sets "bufsize": number of lines in buffer, f 58;
#X text 194 535 - onset time delay between displays (default 0), f 58;
#X text 194 372 - sets "calccount": samples per line (2-8192 \, default 256);
#X text 194 402 - sets "calccount" (samples per line), f 58;
#X text 194 417 - sets number of lines in buffer (8-256 \, default 128), f 58;
#X text 194 433 - sets vertical range (default -1 1), f 58;
#X text 194 449 - sets front/signal RGB color (values 0-1), f 58;
#X text 194 464 - sets background RGB color (values 0-1), f 58;
#X text 194 478 - sets grid RGB color (values 0-1), f 58;
#X text 194 507 - sets trigger mode: 0 (none \, default) \, 1 (up) or 2 (down);
#X text 194 521 - sets threshold level for the trigger mode (default 0), f 58;
#X text 194 492 - <1> sets alternate drawing style (default 0), f 58;
#N canvas 127 29 841 388 X-Y_Mode 0;
#X obj 640 78 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 #dcdcdc #000000 #000000 0 1;
#X obj 637 97 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 #dcdcdc #000000 #000000 0 256;
#X msg 567 24 588;
#X msg 531 24 550;
#X msg 500 24 441;
#X msg 471 24 220;
#X msg 601 24 660;
#X msg 633 24 1760;
#X text 21 102 When in X-Y mode \, [scope~] plots points whose horizontal axis (X) corresponds to the signal's values coming into the left inlet and whose vertical axis (Y) corresponds to the signal's values coming into the right inlet. If the two signals are identical and in phase \, a straight line increasing from left to right will be seen. If the two signals are identical and 180 degrees out of phase \, a straight line decreasing from left to right will be seen. Other combinations may produce circles \, ellipses \, and Lissajous figures., f 47;
#X text 21 243 When in X-Y mode \, there's an averaging algorithm for the calccount parameter \, where a representative sample from this period is used. So it requires small values for a better representation (only 2 in the examples below)., f 47;
#X obj 339 77 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 #dcdcdc #000000 #000000 0 256;
#X obj 532 73 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 #dcdcdc #000000 #000000 0 256;
#X msg 439 24 1;
#X obj 339 159 cyclone/scope~ 200 200 5 3 200 -1 1 50 0 0 0 205 229 232 74 79 77 96 98 102 0 empty;
#X text 21 70 If signals are connected to both the left and right inlets \, [scope~] operates in X-Y mode., f 47;
#X text 21 309 Change the phase of the oscillator to check how it affects the plot \, then try different frequencies., f 47;
#X text 665 77 change phase;
#X obj 532 119 cyclone/cycle~ 440;
#X obj 339 118 cyclone/cycle~ 440;
#X obj 593 230 cyclone/scope~ 130 130 11 3 128 -1 1 0 0 0 0 205 229 232 74 79 77 96 98 102 0 empty;
#X text 583 156 If a signal is only fed to the second inlet \, [scope~] displays in "Y Mode" only., f 31;
#X obj 716 198 osc~ 60;
#X connect 0 0 1 0;
#X connect 1 0 17 1;
#X connect 2 0 11 0;
#X connect 3 0 11 0;
#X connect 4 0 11 0;
#X connect 5 0 11 0;
#X connect 6 0 11 0;
#X connect 7 0 11 0;
#X connect 10 0 18 0;
#X connect 11 0 17 0;
#X connect 12 0 11 0;
#X connect 17 0 13 1;
#X connect 18 0 13 0;
#X connect 21 0 19 1;
#X restore 441 193 pd X-Y_Mode;
#X obj 46 110 hsl 100 17 2 30 1 0 empty empty empty 5 8 1 10 #dcdcdc #000000 #000000 0 0;
#X floatatom 43 132 5 0 0 0 - - - 0;
#X obj 31 192 cnv 5 5 5 empty empty 1 0 0 0 16 #fcfcfc #9c9c9c 0;
#X obj 19 277 cnv 5 5 5 empty empty -1 0 0 0 16 #fcfcfc #9c9c9c 0;
#X obj 30 233 cnv 5 5 5 empty empty 0 0 0 0 16 #fcfcfc #9c9c9c 0;
#X text 268 138 Samples per line (2-8192);
#X text 268 160 Number of lines in buffer (8-256);
#X text 65 111 frequency;
#N canvas 504 130 767 456 appearance_others 0;
#X msg 176 171 delay 1000;
#X text 183 199 vertical range;
#X msg 163 147 delay 0;
#X text 164 125 onset delay;
#X text 243 171 once a second;
#X msg 196 240 range -1 1;
#X text 216 147 (default);
#X text 266 242 (default);
#X msg 355 247 drawstyle \$1;
#X obj 355 207 tgl 25 0 empty empty empty 17 7 0 10 #dcdcdc #000000 #000000 0 1;
#X msg 186 217 range -1.2 1.2;
#X text 35 57 The "drawstyle 1" message or attribute changes [scope~] to analternate drawing style \, that affects some kinds of signals \, such as this bandlimited square wave (try it with the range -1.2 1.2).;
#X text 38 21 You can set the vertical (signal amplitude) range and the onset delay (time between displays) with messages.;
#X obj 582 257 cyclone/scope~ 100 50 256 3 128 -1 1 0 0 0 0 205 229 232 74 79 77 96 98 102 0 empty;
#X obj 554 106 tgl 25 0 empty empty empty 17 7 0 10 #dcdcdc #000000 #000000 0 1;
#X obj 554 149 select 0 1;
#X obj 582 179 bng 15 250 50 0 empty empty empty 17 7 0 10 #dcdcdc #000000 #000000;
#X obj 507 179 bng 15 250 50 0 empty empty empty 17 7 0 10 #dcdcdc #000000 #000000;
#N canvas 338 119 577 204 square 0;
#X obj 55 132 outlet~;
#X msg 188 80 sinesum 4096 1 0 0.333333 0 0.2 0 0.142857 0 0.111111 0 0.0909091 0 0.0769231 0 0.0666667 0 0.0588235 0 \, normalize 1;
#X obj 188 56 loadbang;
#X obj 188 113 send \$0-square;
#X obj 213 143 table \$0-square 4099;
#X obj 55 105 tabosc4~ \$0-square;
#X obj 55 76 sig~ 123;
#X connect 1 0 3 0;
#X connect 2 0 1 0;
#X connect 5 0 0 0;
#X connect 6 0 5 0;
#X restore 81 231 pd square;
#X obj 163 297 cyclone/scope~ 219 108 10 3 185 -1.2 1.2 0 0 0 -0.333333 205 229 232 74 79 77 96 98 102 0 empty;
#X msg 507 204 dim 100 50;
#X msg 582 204 dim 50 100;
#X text 435 23 Inconsistency note:;
#X text 471 49 There's a "dim" message/attribute \, not available in the original MAX object \, for setting the size of your [scope~]., f 39;
#X connect 0 0 19 0;
#X connect 2 0 19 0;
#X connect 5 0 19 0;
#X connect 8 0 19 0;
#X connect 9 0 8 0;
#X connect 10 0 19 0;
#X connect 14 0 15 0;
#X connect 15 0 17 0;
#X connect 15 1 16 0;
#X connect 16 0 21 0;
#X connect 17 0 20 0;
#X connect 18 0 19 0;
#X connect 20 0 13 0;
#X connect 21 0 13 0;
#X restore 382 237 pd appearance_others;
#N canvas 820 129 427 442 mouse 0;
#X obj 135 96 cyclone/rand~ 40;
#X obj 135 134 cyclone/scope~ 130 130 47 3 128 -1 1 0 0 0 0 205 229 232 74 79 77 96 98 102 0 empty;
#X text 61 359 And as noted \, if you right click on it (in edit mode or not) you can access its properties., f 50;
#X text 44 36 When you click on [scope~] with your mouse \, the display freezes for as long as you hold the mouse button down.;
#X text 54 312 When in edit mode \, you can resize the object by clicking and dragging on its bottom right corner., f 51;
#X connect 0 0 1 0;
#X restore 381 193 pd mouse;
#X obj 43 188 scope~ 182 89 256 3 128 -1 1 0 0 0 0 205 229 232 74 79 77 96 98 102 0 empty;
#X text 200 77 [scope~] displays a signal in the style of an oscilloscope., f 29;
#X text 114 432 range <f \, f>;
#X text 84 449 fgcolor <f \, f \, f>;
#X text 84 464 bgcolor <f \, f \, f>;
#X text 72 478 gridcolor <f \, f \, f>;
#X obj 217 139 nbx 4 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 #dcdcdc #000000 #000000 0 256;
#X obj 218 161 nbx 4 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 #dcdcdc #000000 #000000 0 256;
#X obj 499 69 cyclone/dsponoff~;
#X text 126 386 dim <f \, f>;
#X text 194 387 - sets width/height (default 130 130), f 58;
#X obj 43 152 osc~ 2;
#X text 90 549 receive <symbol>;
#X text 84 401 calccount <float>;
#X text 96 417 bufsize <float>;
#X text 84 492 drawstyle <float>;
#X text 96 506 trigger <float>;
#X text 84 521 triglevel <float>;
#X text 108 535 delay <float>;
#X text 194 549 - receive symbol (default empty), f 58;
#X text 98 655 @fgcolor <f f f> | @bgcolor <f f f> | @gridcolor <f f f> | @range <f f> | @trigger <f> | @triglevel <f> | @bufsize <f> @calccount <f> | @delay <f> | drawstyle <f> | @dim <f f> | @receive <sym>, f 74;
#N canvas 739 203 501 352 receive 0;
#X obj 67 175 cyclone/scope~ 130 130 2 3 128 -1 1 100 0 0 0 205 229 232 74 79 77 96 98 102 0 \$0-rcv;
#X obj 311 272 s \$0-rcv;
#X obj 67 130 noise~;
#X msg 311 205 2 128;
#X msg 331 233 64 12;
#X text 236 112 You can send any kind of message that scope~ accepts. Note that if you send it a list of two floats. Then the values are spread via both inlets and set samples per line and lines per buffer \, respectively., f 36;
#X text 30 25 When in edit mode \, [scope~] shows its inlets. The [scope~] object below has a receive symbol \, so you can send messages to it via a [send] object (but not audio). In this case \, the inlets are suppressed \, so we don't see it. The receive symbol can be set with the receive message or the @receive attribute. If you set a receive name as "empty" then it can't receive messages anymore and the inlets are shown., f 73;
#X connect 2 0 0 0;
#X connect 3 0 1 0;
#X connect 4 0 1 0;
#X restore 381 214 pd receive;
#N canvas 572 158 652 420 delay_trigger 0;
#X obj 333 194 vsl 15 126 -1 1 0 1 empty empty empty 0 -9 0 10 #dcdcdc #000000 #000000 6400 1;
#X obj 462 57 vradio 20 1 1 3 empty empty empty 0 -8 0 10 #dcdcdc #000000 #000000 1;
#X msg 462 148 trigger \$1;
#X floatatom 462 127 5 0 0 0 - - - 0;
#X msg 367 120 triglevel \$1;
#X obj 333 340 nbx 8 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 #dcdcdc #000000 #000000 0 256;
#X obj 333 365 s \$0-slider;
#X obj 367 66 r \$0-slider;
#X floatatom 367 92 5 0 0 0 - - - 0;
#X text 486 58 0) none;
#X text 487 78 1) Up;
#X text 487 99 2) Down;
#X text 42 86 The default mode is "trigger 0" \, which is "none mode" \, where the signal is displayed the way it is., f 43;
#X text 42 130 "trigger 1" is "up mode" \, in which - following the delay period - a new display is triggered only when the signal goes from below the trigger level to being equal to it or above it., f 43;
#X text 42 195 "trigger 2" sets to down mode \, in which - following the delay period - a new display is shown only when the signal goes from above the trigger level to being equal to it or below it., f 43;
#X text 42 261 The "triglevel <float>" message sets the threshold for the trigger modes "1" (up) and "2" (down). In these cases \, as described above \, the waveform must increase or decrease past this value to trigger a new display. If you are displaying a periodic waveform \, some changes to the trigger level will shift the waveform to the left or right., f 43;
#X obj 351 193 cyclone/scope~ 201 129 2 3 256 -1 1 110 0 1 0.024 205 229 232 74 79 77 96 98 102 0 empty;
#X msg 557 159 delay \$1;
#X floatatom 557 134 5 0 500 0 - - - 0;
#X text 42 29 The delay determines when to display a new waveform. In conjunction to it \, the trigger mode determines when a new waveform trace begins (following the delay period)., f 43;
#X obj 351 29 cyclone/rand~ 300;
#X connect 0 0 5 0;
#X connect 1 0 3 0;
#X connect 2 0 16 0;
#X connect 3 0 2 0;
#X connect 4 0 16 0;
#X connect 5 0 6 0;
#X connect 7 0 8 0;
#X connect 8 0 4 0;
#X connect 17 0 16 0;
#X connect 18 0 17 0;
#X connect 20 0 16 0;
#X restore 439 260 pd delay_trigger;
#N canvas 480 173 824 342 buffer_size 0;
#X floatatom 507 119 5 0 0 0 - - - 0;
#X floatatom 678 120 5 8 256 0 - - - 0;
#X obj 507 93 unpack float float, f 29;
#X msg 507 38 256 10;
#X obj 534 149 osc~ 20;
#X msg 521 66 10 256;
#X text 715 114 lines per display, f 9;
#X text 442 115 samples per line, f 8;
#X text 33 134 Therefore \, the number of samples (or period) displayed in the oscilloscope is equal to: bufsize * calccount. The number of samples also affect the time between displays. If the number of samples is small \, the refresh rate speed is high \, so you may want to use the "onset delay" message to decrease the speed between displays.;
#X text 34 228 bufsize & calccount are similar \, but they have different effects. Lets check the example in this subpatch with two settings. Both have the same display period in samples (2560) \, but one is displayed as a buffer made of 10 lines and 256 samples per line and the other as a buffer made of 256 lines and 10 samples per line.;
#X text 564 66 10 samples per line \, 256 lines;
#X text 554 38 256 samples per line \, 10 lines;
#X text 32 30 "bufsize" sets the number of lines in the display (possible values from 8 to 256 - default is 128). The number of samples represented by each line is set by "calccount" (possible values from 2 to 8192 - default is 256). For each line \, the maximum and minimum values within the period in samples are used to generate the line. So the smallest line is 2 samples/points long.;
#X obj 507 180 cyclone/scope~ 178 126 10 3 256 -1 1 0 0 0 -0.333333 205 229 232 74 79 77 96 98 102 0 empty;
#X connect 0 0 13 0;
#X connect 1 0 13 1;
#X connect 2 0 0 0;
#X connect 2 1 1 0;
#X connect 3 0 2 0;
#X connect 4 0 13 0;
#X connect 5 0 2 0;
#X restore 346 260 pd buffer_size;
#X obj 5 2 ./header scope~;
#X text 24 59 Oscilloscope display;
#X text 239 199 <= Right click for properties!, f 15;
#N canvas 475 78 825 575 colors 0;
#X obj 46 96 vsl 15 128 0 1 0 0 rjhfkjfbws \$0-Rf empty 0 -9 0 10 #fc0000 #fcfcfc #000000 0 1;
#X floatatom 46 238 5 0 0 0 - - - 0;
#X msg 41 327 fgcolor \$1 \$2 \$3;
#X obj 84 96 vsl 15 128 0 1 0 0 xaslkdjla \$0-Gf empty 0 -9 0 10 #00fc00 #fcfcfc #000000 0 1;
#X floatatom 84 238 5 0 0 0 - - - 0;
#X obj 124 96 vsl 15 128 0 1 0 0 qdaskjlf \$0-Bf empty 0 -9 0 10 #0000fc #fcfcfc #000000 0 1;
#X floatatom 124 238 5 0 0 0 - - - 0;
#X obj 185 96 vsl 15 128 0 1 0 0 rjhfkjfbws \$0-Rb empty 0 -9 0 10 #fc0000 #fcfcfc #000000 0 1;
#X floatatom 185 238 5 0 0 0 - - - 0;
#X obj 223 96 vsl 15 128 0 1 0 0 xaslkdjla \$0-Gb empty 0 -9 0 10 #00fc00 #fcfcfc #000000 0 1;
#X floatatom 223 238 5 0 0 0 - - - 0;
#X obj 263 96 vsl 15 128 0 1 0 0 qdaskjlf \$0-Bb empty 0 -9 0 10 #0000fc #fcfcfc #000000 0 1;
#X floatatom 263 238 5 0 0 0 - - - 0;
#X msg 177 329 bgcolor \$1 \$2 \$3;
#X obj 318 96 vsl 15 128 0 1 0 0 rjhfkjfbws \$0-Rg empty 0 -9 0 10 #fc0000 #fcfcfc #000000 0 1;
#X floatatom 318 238 5 0 0 0 - - - 0;
#X obj 356 96 vsl 15 128 0 1 0 0 xaslkdjla \$0-Gg empty 0 -9 0 10 #00fc00 #fcfcfc #000000 0 1;
#X floatatom 356 238 5 0 0 0 - - - 0;
#X obj 396 96 vsl 15 128 0 1 0 0 qdaskjlf \$0-Bg empty 0 -9 0 10 #0000fc #fcfcfc #000000 0 1;
#X floatatom 396 238 5 0 0 0 - - - 0;
#X msg 325 329 gridcolor \$1 \$2 \$3;
#X msg 610 269 frgb 205 229 232 \, brgb 74 79 77;
#N canvas 217 96 326 446 x 0;
#X obj 101 101 cnv 15 63 78 empty empty empty 20 12 0 14 #484c4c #404040 0;
#X obj 107 121 bng 50 250 50 0 sdfsd sfgsg Default -2 -10 0 14 #cce4e8 #000000 #cce4e8;
#X obj 124 191 loadbang;
#X obj 107 217 f \$0;
#X msg 107 240 \; \$1-Rf 0.803922 \; \$1-Gf 0.898039 \; \$1-Bf 0.909804 \; \$1-Rb 0.290196 \; \$1-Gb 0.309804 \; \$1-Bb 0.301961 \; \$1-Rg 0.376471 \; \$1-Gg 0.384314 \; \$1-Bg 0.4;
#X connect 1 0 3 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X coords 0 -1 1 1 65 80 1 100 100;
#X restore 72 427 pd x;
#X obj 307 370 osc~ 24;
#X obj 578 321 scope~ 130 130 256 3 128 -1 1 0 0 0 0 0 255 0 7 31 7 96 98 102 0 empty;
#X msg 578 238 frgb 0 255 0 \, brgb 7 31 7;
#X obj 578 214 loadbang;
#X text 460 38 Backwards compatibility note:;
#X text 478 72 Old color messages for front / signal and background are \, respectively \, frgb and brgb - they are RGB with values from 0-255., f 52;
#X text 478 114 These are still included in Max and Pd for backwards compatibility. You can also set them as attributes (@frgb and @brgb). Check the messages below, f 52;
#X text 45 30 RGB colors (values from 0-1) for fgcolor (front/signal) \, bgcolor (background) & grid (gridcolor). In Max \, these are RGBA \, but the alpha channel is not implemented in Pd.;
#X obj 177 405 cyclone/scope~ 250 133 10 3 185 -1 1 0 0 0 -0.333333 205 228 232 73 79 77 96 98 102 0 empty;
#X obj 41 267 cyclone/pak 0.803922 0.898039 0.909804, f 15;
#X obj 177 267 cyclone/pak 0.290196 0.309804 0.301961, f 16;
#X obj 325 267 cyclone/pak 0.376471 0.384314 0.4, f 11;
#X connect 0 0 1 0;
#X connect 1 0 32 0;
#X connect 2 0 31 0;
#X connect 3 0 4 0;
#X connect 4 0 32 1;
#X connect 5 0 6 0;
#X connect 6 0 32 2;
#X connect 7 0 8 0;
#X connect 8 0 33 0;
#X connect 9 0 10 0;
#X connect 10 0 33 1;
#X connect 11 0 12 0;
#X connect 12 0 33 2;
#X connect 13 0 31 0;
#X connect 14 0 15 0;
#X connect 15 0 34 0;
#X connect 16 0 17 0;
#X connect 17 0 34 1;
#X connect 18 0 19 0;
#X connect 19 0 34 2;
#X connect 20 0 31 0;
#X connect 21 0 24 0;
#X connect 23 0 31 0;
#X connect 25 0 24 0;
#X connect 26 0 25 0;
#X connect 32 0 2 0;
#X connect 33 0 13 0;
#X connect 34 0 20 0;
#X restore 452 214 pd colors;
#X obj 103 148 sig~ 0;
#X obj 435 319 open-else;
#X text 479 296 click;
#X msg 435 297 scope~;
#X text 35 301 Note that Plugdata users actually get a similar alternative from ELSE with the same name instead that is not 100% compatible., f 64;
#X connect 28 0 29 0;
#X connect 29 0 49 0;
#X connect 44 0 38 0;
#X connect 45 0 38 1;
#X connect 49 0 38 0;
#X connect 66 0 38 0;
#X connect 69 0 67 0;
