aboutsummaryrefslogtreecommitdiff
path: root/doc/help
diff options
context:
space:
mode:
Diffstat (limited to 'doc/help')
-rw-r--r--doc/help/cyclone/Clip-help.pd59
-rw-r--r--doc/help/cyclone/Snapshot~-help.pd45
-rw-r--r--doc/help/cyclone/Table-help.pd55
-rw-r--r--doc/help/cyclone/abs~-help.pd34
-rw-r--r--doc/help/cyclone/acos-help.pd35
-rw-r--r--doc/help/cyclone/acosh~-help.pd32
-rw-r--r--doc/help/cyclone/acos~-help.pd61
-rw-r--r--doc/help/cyclone/asin-help.pd35
-rw-r--r--doc/help/cyclone/asinh-help.pd27
-rw-r--r--doc/help/cyclone/asin~-help.pd57
-rw-r--r--doc/help/cyclone/atan2~-help.pd5
-rw-r--r--doc/help/cyclone/atanh~-help.pd30
-rw-r--r--doc/help/cyclone/atan~-help.pd26
-rw-r--r--doc/help/cyclone/average~-help.pd41
-rw-r--r--doc/help/cyclone/avg~-help.pd34
-rw-r--r--doc/help/cyclone/bitand~-help.pd192
-rw-r--r--doc/help/cyclone/bitnot~-help.pd42
-rw-r--r--doc/help/cyclone/bitor~-help.pd190
-rw-r--r--doc/help/cyclone/bitshift~-help.pd52
-rw-r--r--doc/help/cyclone/bitxor~-help.pd191
-rw-r--r--doc/help/cyclone/buffir~-help.pd90
-rw-r--r--doc/help/cyclone/capture~-help.pd34
-rw-r--r--doc/help/cyclone/cartopol~-help.pd20
-rw-r--r--doc/help/cyclone/change~-help.pd54
-rw-r--r--doc/help/cyclone/click~-help.pd21
-rw-r--r--doc/help/cyclone/cosh~-help.pd21
-rw-r--r--doc/help/cyclone/cosx~-help.pd19
-rw-r--r--doc/help/cyclone/curve~-help.pd62
-rw-r--r--doc/help/cyclone/cycle~-help.pd84
-rw-r--r--doc/help/cyclone/deltaclip~-help.pd50
-rw-r--r--doc/help/cyclone/delta~-help.pd45
-rw-r--r--doc/help/cyclone/edge~-help.pd26
-rw-r--r--doc/help/cyclone/frameaccum~-help.pd18
-rw-r--r--doc/help/cyclone/framedelta~-help.pd27
-rw-r--r--doc/help/cyclone/kink~-help.pd57
-rw-r--r--doc/help/cyclone/log~-help.pd50
-rw-r--r--doc/help/cyclone/lores~-help.pd38
-rw-r--r--doc/help/cyclone/maximum~-help.pd22
-rw-r--r--doc/help/cyclone/minimum~-help.pd22
-rw-r--r--doc/help/cyclone/mstosamps~-help.pd26
-rw-r--r--doc/help/cyclone/mtr-help.pd52
-rw-r--r--doc/help/cyclone/onepole~-help.pd20
-rw-r--r--doc/help/cyclone/phasewrap~-help.pd15
-rw-r--r--doc/help/cyclone/pink~-help.pd18
-rw-r--r--doc/help/cyclone/poke~-help.pd44
-rw-r--r--doc/help/cyclone/poltocar~-help.pd16
-rw-r--r--doc/help/cyclone/pong~-help.pd60
-rw-r--r--doc/help/cyclone/pow~-help.pd51
-rw-r--r--doc/help/cyclone/rampsmooth~-help.pd39
-rw-r--r--doc/help/cyclone/reson~-help.pd36
-rw-r--r--doc/help/cyclone/sah~-help.pd40
-rw-r--r--doc/help/cyclone/sampstoms~-help.pd28
-rw-r--r--doc/help/cyclone/sinh~-help.pd29
-rw-r--r--doc/help/cyclone/sinx~-help.pd19
-rw-r--r--doc/help/cyclone/slide~-help.pd32
-rw-r--r--doc/help/cyclone/spike~-help.pd28
-rw-r--r--doc/help/cyclone/svf~-help.pd114
-rw-r--r--doc/help/cyclone/tanh~-help.pd46
-rw-r--r--doc/help/cyclone/tanx~-help.pd18
-rw-r--r--doc/help/cyclone/train~-help.pd44
-rw-r--r--doc/help/cyclone/trapezoid~-help.pd34
-rw-r--r--doc/help/cyclone/vectral~-help.pd81
62 files changed, 2820 insertions, 73 deletions
diff --git a/doc/help/cyclone/Clip-help.pd b/doc/help/cyclone/Clip-help.pd
index ac85e38..753cfd2 100644
--- a/doc/help/cyclone/Clip-help.pd
+++ b/doc/help/cyclone/Clip-help.pd
@@ -1,36 +1,25 @@
-#N canvas 135 111 437 358 10;
-#X text 17 308 docs based on the MAX/MSP reference (c) cycling'74;
-#X text 16 322 ___________________________________________________
+#N canvas 1354 293 542 335 10;
+#X declare -lib cyclone;
+#X text 15 35 Constrains an int \, float or list within a certain range
;
-#X floatatom 38 182 5 0 0 0 - - -;
-#X obj 36 18 Clip min max;
-#X text 137 20 limit numbers in a range;
-#X floatatom 67 109 5 0 0 0 - - -;
-#X floatatom 96 136 5 0 0 0 - - -;
-#X text 114 109 lower limit;
-#X text 140 134 upper limit;
-#X text 111 160 creation args set min/max;
-#X floatatom 38 79 5 0 0 0 - - -;
-#X obj 128 177 unpack f f f f f f;
-#X floatatom 128 198 5 0 0 0 - - -;
-#X floatatom 152 217 5 0 0 0 - - -;
-#X floatatom 176 237 5 0 0 0 - - -;
-#X floatatom 200 218 5 0 0 0 - - -;
-#X floatatom 224 200 5 0 0 0 - - -;
-#X floatatom 249 218 5 0 0 0 - - -;
-#X text 218 71 in a list each value is clipped \,;
-#X text 218 83 the result is sent out as a list;
-#X msg 105 76 1 2 3 4 -10 5 6;
-#X obj 38 160 Clip 0 10;
-#X connect 5 0 21 1;
-#X connect 6 0 21 2;
-#X connect 10 0 21 0;
-#X connect 11 0 12 0;
-#X connect 11 1 13 0;
-#X connect 11 2 14 0;
-#X connect 11 3 15 0;
-#X connect 11 4 16 0;
-#X connect 11 5 17 0;
-#X connect 20 0 21 0;
-#X connect 21 0 2 0;
-#X connect 21 0 11 0;
+#X floatatom 312 116 0 0 0 0 - - -;
+#X floatatom 190 116 0 0 0 0 - - -;
+#X text 322 138 set max (int or float);
+#X floatatom 26 82 0 0 0 0 - - -;
+#X msg 106 64 0 20 40 60 80 100 120;
+#X msg 118 97 set 100 200;
+#X floatatom 68 81 0 0 0 0 - - -;
+#X obj 68 183 print;
+#X text 126 184 Optional arguments set the range. Default is 0 \, 0
+;
+#X text 187 98 changes the clipping range;
+#X text 201 138 set min (int or float);
+#X obj 380 6 import cyclone;
+#X obj 68 153 Clip 10 50;
+#X connect 1 0 13 2;
+#X connect 2 0 13 1;
+#X connect 4 0 13 0;
+#X connect 5 0 13 0;
+#X connect 6 0 13 0;
+#X connect 7 0 13 0;
+#X connect 13 0 8 0;
diff --git a/doc/help/cyclone/Snapshot~-help.pd b/doc/help/cyclone/Snapshot~-help.pd
new file mode 100644
index 0000000..b8e1860
--- /dev/null
+++ b/doc/help/cyclone/Snapshot~-help.pd
@@ -0,0 +1,45 @@
+#N canvas 147 184 829 453 10;
+#X declare -lib cyclone;
+#X text 23 19 Report sample values from a signal;
+#X floatatom 281 196 0 0 0 0 - - -;
+#X msg 281 217 offset \$1;
+#X obj 164 147 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X msg 493 234 100;
+#X msg 468 234 20;
+#X obj 34 136 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X msg 217 147 stop;
+#X msg 182 147 start;
+#X floatatom 39 319 0 0 0 0 - - -;
+#X floatatom 468 255 0 0 0 0 - - -;
+#X obj 64 139 cycle~ 440;
+#X text 522 247 interval (for self-clocking);
+#X text 466 190 change to a value above 0 for self-clocking reports
+of signal values;
+#X text 48 302 float signal value out;
+#X text 178 304 Optional arguments set self-clocking interval (default
+0--clock off) and sample offset within a vector (default 0).;
+#X text 81 379 Snapshot~'s internal clock runs only when the audio
+is on.;
+#X text 154 116 turn clock on/off (by default \, the clock will be
+on if a non-zero interval is supplied);
+#X text 21 38 when it receives a bang \, snapshot~ outputs a value
+from the most recent signal vector.;
+#X text 301 150 change offset within vector of sample output. range
+is from 0 (least recent \, default) to the signal vector size - 1 (most
+recent);
+#X obj 535 28 import cyclone;
+#X obj 38 283 Snapshot~ 100;
+#X text 23 119 trigger an output;
+#X connect 1 0 2 0;
+#X connect 2 0 21 0;
+#X connect 3 0 21 0;
+#X connect 4 0 10 0;
+#X connect 5 0 10 0;
+#X connect 6 0 21 0;
+#X connect 7 0 21 0;
+#X connect 8 0 21 0;
+#X connect 10 0 21 1;
+#X connect 11 0 21 0;
+#X connect 21 0 9 0;
diff --git a/doc/help/cyclone/Table-help.pd b/doc/help/cyclone/Table-help.pd
new file mode 100644
index 0000000..5892d80
--- /dev/null
+++ b/doc/help/cyclone/Table-help.pd
@@ -0,0 +1,55 @@
+#N canvas 1445 138 682 329 10;
+#X declare -lib cyclone;
+#X text 24 24 Store and graphically edit an array of numbers;
+#X obj 19 143 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X text 104 62 store;
+#X text 0 127 random;
+#X msg 195 170 quantile \$1;
+#X msg 30 62 open;
+#X msg 103 170 \$1 \$1;
+#X obj 103 78 vsl 15 80 0 79 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 3600 1;
+#X obj 73 78 vsl 15 80 0 79 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 3400 1;
+#X msg 150 170 inv \$1;
+#X text 69 62 read;
+#X obj 150 78 vsl 15 80 0 79 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 1;
+#X text 145 62 inv read;
+#X floatatom 73 229 0 0 0 0 - - -;
+#X obj 112 229 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X floatatom 195 153 0 0 0 0 - - -;
+#X obj 195 134 << 9;
+#X obj 195 60 vsl 15 65 0 64 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 1;
+#X text 211 57 read quantile;
+#X text 130 224 The right outlet sends a bang when the table has been
+changed by editing with the mouse;
+#X text 56 255 You may name the table with an argument. Many boxes
+may share the same table by using the same name. If there is a file
+by that name it will be read into the table if possible.;
+#X msg 29 86 sum;
+#X msg 29 107 length;
+#X text 291 108 You can close the table window by clicking its close
+box \, and reopen it by double-clicking the "table" box or sending
+it the open message.;
+#X obj 396 53 import cyclone;
+#X obj 74 201 Table;
+#C restore;
+#X connect 1 0 25 0;
+#X connect 4 0 25 0;
+#X connect 5 0 25 0;
+#X connect 6 0 25 0;
+#X connect 7 0 6 0;
+#X connect 8 0 25 0;
+#X connect 9 0 25 0;
+#X connect 11 0 9 0;
+#X connect 15 0 4 0;
+#X connect 16 0 15 0;
+#X connect 17 0 16 0;
+#X connect 21 0 25 0;
+#X connect 22 0 25 0;
+#X connect 25 0 13 0;
+#X connect 25 1 14 0;
diff --git a/doc/help/cyclone/abs~-help.pd b/doc/help/cyclone/abs~-help.pd
new file mode 100644
index 0000000..f8e9892
--- /dev/null
+++ b/doc/help/cyclone/abs~-help.pd
@@ -0,0 +1,34 @@
+#N canvas 26 158 798 481 10;
+#X declare -lib cyclone;
+#X text 15 35 Absolute value of a signal;
+#X obj 323 215 *~ 0.2;
+#X obj 323 193 *~;
+#X obj 394 165 abs~;
+#X text -65 208 no arguments;
+#X text 0 388 absolute value of sine wave;
+#X obj 20 206 abs~;
+#X text 178 388 original sine wave;
+#X obj 323 257 dac~;
+#X text 14 63 The abs~ object converts negative signal values to their
+corresponding positive values. This can be used for a rough instantaneous
+measure of signal amplitude \, among other things.;
+#X text 367 197 Signal multiplication where the modulator wave is limited
+to a positive range produces amplitude modulation (as opposed to ring
+modulation).;
+#X obj 533 32 import cyclone;
+#X obj 443 136 cycle~ 220;
+#X obj 317 137 cycle~ 200;
+#X obj 20 250 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 162 250 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 20 160 cycle~ 1;
+#X connect 1 0 8 0;
+#X connect 1 0 8 1;
+#X connect 2 0 1 0;
+#X connect 3 0 2 1;
+#X connect 6 0 14 0;
+#X connect 12 0 3 0;
+#X connect 13 0 2 0;
+#X connect 16 0 6 0;
+#X connect 16 0 15 0;
diff --git a/doc/help/cyclone/acos-help.pd b/doc/help/cyclone/acos-help.pd
index 0788a00..6763ebe 100644
--- a/doc/help/cyclone/acos-help.pd
+++ b/doc/help/cyclone/acos-help.pd
@@ -1,19 +1,16 @@
-#N canvas 217 155 421 323 10;
-#X obj 4 4 cnv 15 400 40 empty empty empty 20 12 0 14 -262130 -66577 0;
-#X text 21 278 docs based on the MAX/MSP reference (c) cycling'74
-;
-#X text 20 292 ___________________________________________________ ;
-#X obj 41 22 acos 4;
-#X text 98 24 calculate arc cosine function;
-#X floatatom 46 216 8 0 0 0 - - -;
-#X msg 46 83 bang;
-#X obj 46 183 acos 0.2;
-#X obj 67 152 / 100;
-#X floatatom 67 132 5 0 0 0 - - -;
-#X text 96 84 output acos of current val;
-#X text 121 130 calculate and output acos;
-#X text 123 185 arg sets initial value;
-#X connect 6 0 7 0;
-#X connect 7 0 5 0;
-#X connect 8 0 7 0;
-#X connect 9 0 8 0;
+#N canvas 1253 344 435 229 10;
+#X declare -lib cyclone;
+#X text 15 35 Arccosine(x);
+#X obj 189 69 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X floatatom 189 145 0 0 0 0 - - -;
+#X floatatom 84 145 0 0 0 0 - - -;
+#X floatatom 84 69 0 0 0 0 - - -;
+#X text 259 96 optional arg;
+#X obj 290 12 import cyclone;
+#X obj 84 100 acos;
+#X obj 189 100 acos 0.5;
+#X connect 1 0 8 0;
+#X connect 4 0 7 0;
+#X connect 7 0 3 0;
+#X connect 8 0 2 0;
diff --git a/doc/help/cyclone/acosh~-help.pd b/doc/help/cyclone/acosh~-help.pd
new file mode 100644
index 0000000..da908c4
--- /dev/null
+++ b/doc/help/cyclone/acosh~-help.pd
@@ -0,0 +1,32 @@
+#N canvas 1194 277 635 410 10;
+#X declare -lib cyclone;
+#X text 239 79 this is probably only useful for mathematical calculations
+;
+#X msg 222 136 range 0 2;
+#X obj 147 110 +~ 1;
+#X obj 147 87 *~ 2;
+#X obj 147 65 phasor~ 2;
+#X text 15 35 Arc Hyperbolic cosine function (acosh(x)) for signals
+;
+#X obj 15 93 +~ 2;
+#X obj 15 64 cycle~ 2;
+#X text 49 90 input values must be greater than 1;
+#X text 18 316 very expensive windowing?;
+#X obj 15 162 Scope~ 130 130 256 3 128 0 2 0 0 0 0 102 255 51 135 135
+135 0;
+#X obj 440 35 import cyclone;
+#X obj 156 166 Scope~ 130 130 256 3 128 0 2 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 146 134 acosh~;
+#X obj 15 124 acosh~;
+#X obj 226 114 loadbang;
+#X connect 1 0 10 0;
+#X connect 1 0 12 0;
+#X connect 2 0 13 0;
+#X connect 3 0 2 0;
+#X connect 4 0 3 0;
+#X connect 6 0 14 0;
+#X connect 7 0 6 0;
+#X connect 13 0 12 0;
+#X connect 14 0 10 0;
+#X connect 15 0 1 0;
diff --git a/doc/help/cyclone/acos~-help.pd b/doc/help/cyclone/acos~-help.pd
new file mode 100644
index 0000000..1270a12
--- /dev/null
+++ b/doc/help/cyclone/acos~-help.pd
@@ -0,0 +1,61 @@
+#N canvas 1129 269 809 467 10;
+#X declare -lib cyclone;
+#X declare -lib zexy;
+#X text 17 371 input signal values outside the -1 to 1 range cause
+acos~ to output the value zero;
+#X text 8 357 outputs signal from 0 to pi when input is -1 to 1;
+#X obj 545 228 -~ 1.5708;
+#X text 396 73 select waveform:;
+#X text 408 116 sawtooth;
+#X text 425 154 triangle;
+#X msg 469 152 2;
+#X msg 457 126 1;
+#X msg 462 93 0;
+#X text 138 68 or create a sawtooth wave using phasor;
+#X obj 545 271 *~ 0.2;
+#X obj 545 249 /~ 1.5708;
+#X obj 669 156 cycle~ 130;
+#X obj 576 157 -~ 1;
+#X obj 576 135 *~ 2;
+#X obj 576 113 phasor~ 130;
+#X obj 15 137 cycle~ 2;
+#X msg 196 177 range 0 3.14159;
+#X obj 147 138 -~ 1;
+#X text 15 35 Arc-cosine function (acos(x)) for signals;
+#X obj 147 115 *~ 2;
+#X obj 147 93 phasor~ 2;
+#X obj 545 308 dac~;
+#X text 1 49 turn a sine wave into a triangle wave:;
+#X text 437 98 off;
+#X text 582 201 outputs signal from 0 to pi;
+#X obj 574 17 import cyclone;
+#X obj 676 17 import zexy;
+#X obj 14 203 Scope~ 130 130 256 3 128 0 3.14159 0 0 0 0 102 255 51
+135 135 135 0;
+#X obj 157 205 Scope~ 130 130 256 3 128 0 3.14159 0 0 0 0 102 255 51
+135 135 135 0;
+#X obj 15 168 acos~;
+#X obj 146 168 acos~;
+#X obj 545 180 zexy/multiplex~ 0 1 2;
+#X obj 545 202 acos~;
+#X connect 2 0 11 0;
+#X connect 6 0 32 0;
+#X connect 7 0 32 0;
+#X connect 8 0 32 0;
+#X connect 10 0 22 0;
+#X connect 10 0 22 1;
+#X connect 11 0 10 0;
+#X connect 12 0 32 2;
+#X connect 13 0 32 1;
+#X connect 14 0 13 0;
+#X connect 15 0 14 0;
+#X connect 16 0 30 0;
+#X connect 17 0 28 0;
+#X connect 17 0 29 0;
+#X connect 18 0 31 0;
+#X connect 20 0 18 0;
+#X connect 21 0 20 0;
+#X connect 30 0 28 0;
+#X connect 31 0 29 0;
+#X connect 32 0 33 0;
+#X connect 33 0 2 0;
diff --git a/doc/help/cyclone/asin-help.pd b/doc/help/cyclone/asin-help.pd
index 580f1df..7219cc4 100644
--- a/doc/help/cyclone/asin-help.pd
+++ b/doc/help/cyclone/asin-help.pd
@@ -1,19 +1,16 @@
-#N canvas 217 155 421 323 10;
-#X obj 4 4 cnv 15 400 40 empty empty empty 20 12 0 14 -262130 -66577 0;
-#X text 21 278 docs based on the MAX/MSP reference (c) cycling'74
-;
-#X text 20 292 ___________________________________________________ ;
-#X floatatom 46 216 8 0 0 0 - - -;
-#X msg 46 83 bang;
-#X obj 67 152 / 100;
-#X floatatom 67 132 5 0 0 0 - - -;
-#X text 123 185 arg sets initial value;
-#X obj 41 22 asin 0.2;
-#X text 108 24 calculate arc sine function;
-#X obj 46 183 asin 0.2;
-#X text 96 84 output acsin of current val;
-#X text 121 130 calculate and output asin;
-#X connect 4 0 10 0;
-#X connect 5 0 10 0;
-#X connect 6 0 5 0;
-#X connect 10 0 3 0;
+#N canvas 1255 431 632 315 10;
+#X declare -lib cyclone;
+#X text 15 35 Arcsine(x);
+#X obj 198 84 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X floatatom 198 160 0 0 0 0 - - -;
+#X floatatom 93 160 0 0 0 0 - - -;
+#X floatatom 93 84 0 0 0 0 - - -;
+#X text 264 117 optional arg;
+#X obj 405 27 import cyclone;
+#X obj 93 115 asin;
+#X obj 198 115 asin 0.5;
+#X connect 1 0 8 0;
+#X connect 4 0 7 0;
+#X connect 7 0 3 0;
+#X connect 8 0 2 0;
diff --git a/doc/help/cyclone/asinh-help.pd b/doc/help/cyclone/asinh-help.pd
new file mode 100644
index 0000000..8d4099f
--- /dev/null
+++ b/doc/help/cyclone/asinh-help.pd
@@ -0,0 +1,27 @@
+#N canvas 1207 202 773 474 10;
+#X declare -lib cyclone;
+#X text 254 93 this is probably only useful for mathematical calculations
+;
+#X obj 18 90 cycle~ 2;
+#X obj 18 121 *~ 3.14159;
+#X msg 223 149 range -2 2;
+#X obj 150 123 -~ 3.14159;
+#X text 15 35 Arc Hyperbolic sine function (asinh(x)) for signals;
+#X obj 150 100 *~ 6.28319;
+#X obj 150 78 phasor~ 2;
+#X obj 18 175 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 165 180 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 425 48 import cyclone;
+#X obj 18 147 asinh~;
+#X obj 149 147 asinh~;
+#X connect 1 0 2 0;
+#X connect 2 0 11 0;
+#X connect 3 0 8 0;
+#X connect 3 0 9 0;
+#X connect 4 0 12 0;
+#X connect 6 0 4 0;
+#X connect 7 0 6 0;
+#X connect 11 0 8 0;
+#X connect 12 0 9 0;
diff --git a/doc/help/cyclone/asin~-help.pd b/doc/help/cyclone/asin~-help.pd
new file mode 100644
index 0000000..3f4b19d
--- /dev/null
+++ b/doc/help/cyclone/asin~-help.pd
@@ -0,0 +1,57 @@
+#N canvas 1150 213 841 500 10;
+#X declare -lib cyclone;
+#X declare -lib zexy;
+#X text 331 60 select waveform:;
+#X text 348 94 sawtooth;
+#X text 354 113 triangle;
+#X obj 465 222 *~ 0.2;
+#X obj 465 200 /~ 1.5708;
+#X obj 456 96 cycle~ 130;
+#X obj 548 106 -~ 1;
+#X obj 548 84 *~ 2;
+#X obj 548 62 phasor~ 130;
+#X obj 465 269 dac~;
+#X text 499 172 outputs signal from -pi/2 to pi/2;
+#X text 30 366 outputs signal from -pi/2 to pi/2 when input is -1 to
+1;
+#X text 177 397 or create a sawtooth wave using phasor;
+#X obj 18 120 cycle~ 2;
+#X msg 199 147 range -1.5708 1.5708;
+#X obj 150 121 -~ 1;
+#X obj 150 98 *~ 2;
+#X obj 150 76 phasor~ 2;
+#X text 11 50 turn a sine wave into a triangle wave:;
+#X text 15 20 Arc-sine function (asin(x)) for signals;
+#X obj 531 8 import cyclone;
+#X msg 398 93 0;
+#X msg 398 111 1;
+#X obj 624 6 import zexy;
+#X obj 465 131 zexy/multiplex~;
+#X obj 464 164 asin~;
+#X text 28 384 input signal values outside the -1 to 1 range cause
+asin~ to output the value zero;
+#X obj 18 205 Scope~ 130 130 256 3 128 -1.5708 1.5708 0 0 0 0 102 255
+51 135 135 135 0;
+#X obj 169 211 Scope~ 130 130 256 3 128 -1.5708 1.5708 0 0 0 0 102
+255 51 135 135 135 0;
+#X obj 18 145 asin~;
+#X obj 149 145 asin~;
+#X connect 3 0 9 0;
+#X connect 3 0 9 1;
+#X connect 4 0 3 0;
+#X connect 5 0 24 0;
+#X connect 6 0 24 1;
+#X connect 7 0 6 0;
+#X connect 8 0 7 0;
+#X connect 13 0 29 0;
+#X connect 14 0 27 0;
+#X connect 14 0 28 0;
+#X connect 15 0 30 0;
+#X connect 16 0 15 0;
+#X connect 17 0 16 0;
+#X connect 21 0 24 0;
+#X connect 22 0 24 0;
+#X connect 24 0 25 0;
+#X connect 25 0 4 0;
+#X connect 29 0 27 0;
+#X connect 30 0 28 0;
diff --git a/doc/help/cyclone/atan2~-help.pd b/doc/help/cyclone/atan2~-help.pd
new file mode 100644
index 0000000..98fc14f
--- /dev/null
+++ b/doc/help/cyclone/atan2~-help.pd
@@ -0,0 +1,5 @@
+#N canvas 313 447 437 169 10;
+#X declare -lib cyclone;
+#X text 15 35 Standard C function for arctan(y/x);
+#X obj 254 33 import cyclone;
+#X obj 80 85 atan2~;
diff --git a/doc/help/cyclone/atanh~-help.pd b/doc/help/cyclone/atanh~-help.pd
new file mode 100644
index 0000000..6a9ffea
--- /dev/null
+++ b/doc/help/cyclone/atanh~-help.pd
@@ -0,0 +1,30 @@
+#N canvas 1309 377 616 409 10;
+#X declare -lib cyclone;
+#X text 6 315 input values should be constrained between -1 and 1;
+#X text 236 97 this is probably only useful for mathematical calculations
+;
+#X obj 28 109 *~ 0.999;
+#X obj 28 86 cycle~ 2;
+#X msg 215 138 range -3.14159 3.14159;
+#X obj 160 112 -~ 0.999;
+#X obj 160 89 *~ 2;
+#X obj 160 67 phasor~ 2;
+#X text 16 35 Arc Hyperbolic tangent function (atanh(x)) for signals
+;
+#X text 22 330 Note: asymptotic to infinity around -1 and 1;
+#X obj 388 40 import cyclone;
+#X obj 26 164 Scope~ 130 130 256 3 128 -3.14159 3.14159 0 0 0 0 102
+255 51 135 135 135 0;
+#X obj 171 168 Scope~ 130 130 256 3 128 -3.14159 3.14159 0 0 0 0 102
+255 51 135 135 135 0;
+#X obj 28 136 atanh~;
+#X obj 159 136 atanh~;
+#X connect 2 0 13 0;
+#X connect 3 0 2 0;
+#X connect 4 0 11 0;
+#X connect 4 0 12 0;
+#X connect 5 0 14 0;
+#X connect 6 0 5 0;
+#X connect 7 0 6 0;
+#X connect 13 0 11 0;
+#X connect 14 0 12 0;
diff --git a/doc/help/cyclone/atan~-help.pd b/doc/help/cyclone/atan~-help.pd
new file mode 100644
index 0000000..1e89b62
--- /dev/null
+++ b/doc/help/cyclone/atan~-help.pd
@@ -0,0 +1,26 @@
+#N canvas 1261 324 676 427 10;
+#X declare -lib cyclone;
+#X obj 28 86 cycle~ 2;
+#X obj 28 111 *~ 3.14159;
+#X msg 231 138 range -1.57 1.57;
+#X obj 160 112 -~ 3.14195;
+#X obj 160 89 *~ 6.28319;
+#X obj 160 67 phasor~ 2;
+#X text 16 35 Arc-tangent function (atan(x)) for signals;
+#X text 284 68 see atan2~ for the 2-inlet version: atan(y/x);
+#X obj 336 5 import cyclone;
+#X obj 28 136 atan~;
+#X obj 158 136 atan~;
+#X obj 27 167 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 169 169 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X connect 0 0 1 0;
+#X connect 1 0 9 0;
+#X connect 2 0 11 0;
+#X connect 2 0 12 0;
+#X connect 3 0 10 0;
+#X connect 4 0 3 0;
+#X connect 5 0 4 0;
+#X connect 9 0 11 0;
+#X connect 10 0 12 0;
diff --git a/doc/help/cyclone/average~-help.pd b/doc/help/cyclone/average~-help.pd
new file mode 100644
index 0000000..1e3de3b
--- /dev/null
+++ b/doc/help/cyclone/average~-help.pd
@@ -0,0 +1,41 @@
+#N canvas 47 36 645 632 10;
+#X declare -lib cyclone;
+#X text 29 515 rms--computes the square root of the average of the
+sample values squared.;
+#X text 29 490 absolute--averages the absolute values of the samples.
+;
+#X text 29 476 bipolar--averages the sample values.;
+#X text 15 35 reports various forms of average value of signal;
+#X obj 202 71 cycle~ 2;
+#X obj 135 71 cycle~ 100;
+#X floatatom 311 174 0 0 0 0 - - -;
+#X msg 358 132 rms;
+#X msg 242 132 bipolar;
+#X msg 298 132 absolute;
+#X obj 172 115 *~;
+#X text 337 174 int sets averaging interval \, in samples;
+#X text 385 132 change modes with messages:;
+#X text 20 374 optional arguments: int - sets maximum averaging interval.
+default is 100 symbol - sets mode \, as shown above. default is bipolar.
+;
+#X text 20 424 average~ reports the running mean amplitude of a signal
+\, averaged over a specified number of samples. There are three methods
+of averaging available:;
+#X text 19 552 RMS values are often used to measure signal levels.
+The RMS mode of the average~ object is considerably more CPU intensive
+than the absolute mode. The absolute mode often works as well as the
+RMS mode in many level-detection tasks.;
+#X obj 22 224 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 421 23 import cyclone;
+#X obj 172 201 average~ 1000;
+#X floatatom 172 236 5 0 0 0 - - -;
+#X connect 4 0 10 1;
+#X connect 5 0 10 0;
+#X connect 6 0 18 0;
+#X connect 7 0 18 0;
+#X connect 8 0 18 0;
+#X connect 9 0 18 0;
+#X connect 10 0 16 0;
+#X connect 10 0 18 0;
+#X connect 18 0 19 0;
diff --git a/doc/help/cyclone/avg~-help.pd b/doc/help/cyclone/avg~-help.pd
new file mode 100644
index 0000000..df88752
--- /dev/null
+++ b/doc/help/cyclone/avg~-help.pd
@@ -0,0 +1,34 @@
+#N canvas 226 97 668 530 10;
+#X declare -lib cyclone;
+#X text 15 35 Compute the average value of a signal;
+#X floatatom 35 302 0 0 0 0 - - -;
+#X floatatom 254 194 0 0 0 0 - - -;
+#X obj 35 322 * 128;
+#X obj 33 349 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 1;
+#X obj 209 150 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X msg 269 169 200;
+#X msg 246 169 50;
+#X obj 209 216 metro 100;
+#X obj 31 189 adc~;
+#X text 46 252 signal input / trigger input;
+#X text 46 287 float output (between 0 and 1 for audio signals);
+#X text 38 62 When average receives a bang \, it computes the mean
+amplitude of its input signal since it last received a bang. The mean
+amplitude is the sum of the absolute values of the input divided by
+the number of samples received.;
+#X obj 450 39 import cyclone;
+#X obj 33 267 avg~;
+#X text 190 123 start metro to see averages;
+#X text 299 169 try different intervals to see the change in avg~ behavior
+;
+#X connect 1 0 3 0;
+#X connect 2 0 8 1;
+#X connect 3 0 4 0;
+#X connect 5 0 8 0;
+#X connect 6 0 2 0;
+#X connect 7 0 2 0;
+#X connect 8 0 14 0;
+#X connect 9 0 14 0;
+#X connect 14 0 1 0;
diff --git a/doc/help/cyclone/bitand~-help.pd b/doc/help/cyclone/bitand~-help.pd
new file mode 100644
index 0000000..3582d54
--- /dev/null
+++ b/doc/help/cyclone/bitand~-help.pd
@@ -0,0 +1,192 @@
+#N canvas 1228 219 785 678 10;
+#X declare -lib cyclone;
+#X declare -lib iemlib;
+#X text 17 -10 Bitwise and signal operator.;
+#X obj 26 429 clip~ -1 1;
+#X floatatom 546 246 0 0 0 0 - - -;
+#X msg 546 264 mode \$1;
+#X text 38 209 bitwise boolean operation on a signal and some bitmask
+as bits;
+#X floatatom 494 244 0 0 0 0 - - -;
+#X floatatom 445 244 0 0 0 0 - - -;
+#X obj 494 264 sig~ 1;
+#X obj 445 264 sig~ 1;
+#X text 159 409 modes \; mode 0: treat both floating point signal inputs
+as raw 32 bit values \; mode 1: convert both floating point signal
+inputs to integers \; mode 2: treat left input as raw 32 bit value
+\, convert right input to integer \; mode 3: convert left input to
+integer \, treat right input as raw 32 bit value \;;
+#X text 19 103 send bitmask;
+#X floatatom 55 451 0 0 0 0 - - -;
+#X obj 26 470 *~ 0.2;
+#X obj 222 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 437 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 424 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 411 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 398 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 385 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 372 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 359 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 346 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 333 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 320 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 307 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 294 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 281 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 268 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 255 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 242 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 229 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 216 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 203 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 190 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 177 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 164 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 151 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 138 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 21 117 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 125 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 112 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 99 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 86 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 73 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 60 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 47 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 34 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 21 180 pack bits 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0;
+#X floatatom 90 288 0 0 0 0 - - -;
+#X obj 26 509 dac~;
+#X obj 59 249 cycle~ 440;
+#X text 159 383 args: <mask> <mode>. both default to 0;
+#X text 454 156 <= set bitmask;
+#X text 446 209 bitwise boolean operation on signals as integers;
+#X text 93 314 use an integer as a bitmask;
+#X text 15 15 Performs bitwise boolean operations on a floating point
+signal as bits or as an integer. Note that if you are converting the
+floats to ints and back that single precision floating point values
+only retain 24 bits of integer resolution. The floating point bits
+from left to right are <1 sign bit> <8 exponent bits> <23 mantissa
+bits>.;
+#X obj 457 38 import cyclone;
+#X obj 445 288 bitand~ 0 1;
+#X obj 551 37 import iemlib;
+#X obj 445 348 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 1 256;
+#X obj 445 321 unsig~;
+#X obj 27 387 bitand~;
+#X connect 1 0 12 0;
+#X connect 2 0 3 0;
+#X connect 3 0 57 0;
+#X connect 5 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 57 1;
+#X connect 8 0 57 0;
+#X connect 11 0 12 1;
+#X connect 12 0 49 0;
+#X connect 12 0 49 1;
+#X connect 13 0 46 0;
+#X connect 13 0 45 0;
+#X connect 13 0 44 0;
+#X connect 13 0 43 0;
+#X connect 13 0 42 0;
+#X connect 13 0 41 0;
+#X connect 13 0 40 0;
+#X connect 13 0 39 0;
+#X connect 13 0 37 0;
+#X connect 13 0 36 0;
+#X connect 13 0 35 0;
+#X connect 13 0 34 0;
+#X connect 13 0 33 0;
+#X connect 13 0 32 0;
+#X connect 13 0 31 0;
+#X connect 13 0 30 0;
+#X connect 13 0 29 0;
+#X connect 13 0 28 0;
+#X connect 13 0 27 0;
+#X connect 13 0 26 0;
+#X connect 13 0 25 0;
+#X connect 13 0 24 0;
+#X connect 13 0 23 0;
+#X connect 13 0 22 0;
+#X connect 13 0 21 0;
+#X connect 13 0 20 0;
+#X connect 13 0 19 0;
+#X connect 13 0 18 0;
+#X connect 13 0 17 0;
+#X connect 13 0 16 0;
+#X connect 13 0 15 0;
+#X connect 13 0 14 0;
+#X connect 14 0 47 32;
+#X connect 15 0 47 31;
+#X connect 16 0 47 30;
+#X connect 17 0 47 29;
+#X connect 18 0 47 28;
+#X connect 19 0 47 27;
+#X connect 20 0 47 26;
+#X connect 21 0 47 25;
+#X connect 22 0 47 24;
+#X connect 23 0 47 23;
+#X connect 24 0 47 22;
+#X connect 25 0 47 21;
+#X connect 26 0 47 20;
+#X connect 27 0 47 19;
+#X connect 28 0 47 18;
+#X connect 29 0 47 17;
+#X connect 30 0 47 16;
+#X connect 31 0 47 15;
+#X connect 32 0 47 14;
+#X connect 33 0 47 13;
+#X connect 34 0 47 12;
+#X connect 35 0 47 11;
+#X connect 36 0 47 10;
+#X connect 37 0 47 9;
+#X connect 38 0 47 0;
+#X connect 39 0 47 8;
+#X connect 40 0 47 7;
+#X connect 41 0 47 6;
+#X connect 42 0 47 5;
+#X connect 43 0 47 4;
+#X connect 44 0 47 3;
+#X connect 45 0 47 2;
+#X connect 46 0 47 1;
+#X connect 47 0 61 0;
+#X connect 48 0 61 1;
+#X connect 50 0 61 0;
+#X connect 57 0 60 0;
+#X connect 60 0 59 0;
+#X connect 61 0 1 0;
diff --git a/doc/help/cyclone/bitnot~-help.pd b/doc/help/cyclone/bitnot~-help.pd
new file mode 100644
index 0000000..20fd57e
--- /dev/null
+++ b/doc/help/cyclone/bitnot~-help.pd
@@ -0,0 +1,42 @@
+#N canvas 1387 184 781 540 10;
+#X declare -lib cyclone;
+#X text 15 5 Bitwise not signal operator.;
+#X obj 41 316 clip~ -1 1;
+#X floatatom 397 182 0 0 0 0 - - -;
+#X msg 397 200 mode \$1;
+#X text 22 180 bitwise boolean operation on a signal as bits;
+#X floatatom 346 180 0 0 0 0 - - -;
+#X obj 346 200 sig~ 0;
+#X text 300 356 modes \; mode 0: treat floating point signal input
+as raw 32 bit value \; mode 1: convert floating point signal input
+to integer \;;
+#X floatatom 70 341 0 0 0 0 - - -;
+#X obj 41 360 *~ 0.2;
+#X obj 41 402 dac~;
+#X obj 45 237 cycle~ 440;
+#X text 300 330 args: <mode>. defaults to 0;
+#X text 335 152 bitwise boolean operation on signals as integers;
+#X text 15 35 Performs bitwise boolean operations on a floating point
+signal as bits or as an integer. Note that if you are converting the
+floats to ints and back that single precision floating point values
+only retain 24 bits of integer resolution. The floating point bits
+from left to right are <1 sign bit> <8 exponent bits> <23 mantissa
+bits>.;
+#X obj 487 40 import cyclone;
+#X obj 346 231 bitnot~ 1;
+#X obj 347 283 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 -1 256;
+#X obj 45 273 bitnot~;
+#X obj 346 258 Snapshot~ 100;
+#X connect 1 0 9 0;
+#X connect 2 0 3 0;
+#X connect 3 0 16 0;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 8 0 9 1;
+#X connect 9 0 10 0;
+#X connect 9 0 10 1;
+#X connect 11 0 18 0;
+#X connect 16 0 19 0;
+#X connect 18 0 1 0;
+#X connect 19 0 17 0;
diff --git a/doc/help/cyclone/bitor~-help.pd b/doc/help/cyclone/bitor~-help.pd
new file mode 100644
index 0000000..ee4a31e
--- /dev/null
+++ b/doc/help/cyclone/bitor~-help.pd
@@ -0,0 +1,190 @@
+#N canvas 1168 233 800 636 10;
+#X declare -lib cyclone;
+#X text 392 545 see also:;
+#X text 15 35 Bitwise or signal operator.;
+#X obj 39 429 clip~ -1 1;
+#X floatatom 539 307 0 0 0 0 - - -;
+#X msg 539 325 mode \$1;
+#X text 47 270 bitwise boolean operation on a signal and some bitmask
+as bits;
+#X floatatom 487 305 0 0 0 0 - - -;
+#X floatatom 438 305 0 0 0 0 - - -;
+#X obj 487 325 sig~ 1;
+#X obj 438 325 sig~ 1;
+#X text 294 467 modes \; mode 0: treat both floating point signal inputs
+as raw 32 bit values \; mode 1: convert both floating point signal
+inputs to integers \; mode 2: treat left input as raw 32 bit value
+\, convert right input to integer \; mode 3: convert left input to
+integer \, treat right input as raw 32 bit value \;;
+#X text 49 165 send bitmask;
+#X floatatom 68 450 0 0 0 0 - - -;
+#X obj 39 469 *~ 0.2;
+#X obj 229 168 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 446 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 433 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 420 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 407 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 394 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 381 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 368 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 355 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 342 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 329 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 316 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 303 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 290 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 277 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 264 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 251 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 238 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 225 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 212 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 199 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 186 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 173 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 160 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 147 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 29 168 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 134 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 121 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 108 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 95 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 82 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 69 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 56 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 43 216 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 30 241 pack bits 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0;
+#X floatatom 99 349 0 0 0 0 - - -;
+#X obj 39 506 dac~;
+#X obj 68 310 cycle~ 440;
+#X text 294 441 args: <mask> <mode>. both default to 0;
+#X text 463 217 <= set bitmask;
+#X text 439 270 bitwise boolean operation on signals as integers;
+#X text 92 333 use an integer as a bitmask;
+#X text 15 67 Performs bitwise boolean operations on a floating point
+signal as bits or as an integer. Note that if you are converting the
+floats to ints and back that single precision floating point values
+only retain 24 bits of integer resolution. The floating point bits
+from left to right are <1 sign bit> <8 exponent bits> <23 mantissa
+bits>.;
+#X obj 403 39 import cyclone;
+#X obj 438 349 bitor~ 0 1;
+#X floatatom 440 408 5 0 0 0 - - -;
+#X obj 68 369 bitor~;
+#X obj 438 376 Snapshot~ 100;
+#X connect 2 0 13 0;
+#X connect 3 0 4 0;
+#X connect 4 0 58 0;
+#X connect 6 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 58 1;
+#X connect 9 0 58 0;
+#X connect 12 0 13 1;
+#X connect 13 0 50 0;
+#X connect 13 0 50 1;
+#X connect 14 0 47 0;
+#X connect 14 0 46 0;
+#X connect 14 0 45 0;
+#X connect 14 0 44 0;
+#X connect 14 0 43 0;
+#X connect 14 0 42 0;
+#X connect 14 0 41 0;
+#X connect 14 0 40 0;
+#X connect 14 0 38 0;
+#X connect 14 0 37 0;
+#X connect 14 0 36 0;
+#X connect 14 0 35 0;
+#X connect 14 0 34 0;
+#X connect 14 0 33 0;
+#X connect 14 0 32 0;
+#X connect 14 0 31 0;
+#X connect 14 0 30 0;
+#X connect 14 0 29 0;
+#X connect 14 0 28 0;
+#X connect 14 0 27 0;
+#X connect 14 0 26 0;
+#X connect 14 0 25 0;
+#X connect 14 0 24 0;
+#X connect 14 0 23 0;
+#X connect 14 0 22 0;
+#X connect 14 0 21 0;
+#X connect 14 0 20 0;
+#X connect 14 0 19 0;
+#X connect 14 0 18 0;
+#X connect 14 0 17 0;
+#X connect 14 0 16 0;
+#X connect 14 0 15 0;
+#X connect 15 0 48 32;
+#X connect 16 0 48 31;
+#X connect 17 0 48 30;
+#X connect 18 0 48 29;
+#X connect 19 0 48 28;
+#X connect 20 0 48 27;
+#X connect 21 0 48 26;
+#X connect 22 0 48 25;
+#X connect 23 0 48 24;
+#X connect 24 0 48 23;
+#X connect 25 0 48 22;
+#X connect 26 0 48 21;
+#X connect 27 0 48 20;
+#X connect 28 0 48 19;
+#X connect 29 0 48 18;
+#X connect 30 0 48 17;
+#X connect 31 0 48 16;
+#X connect 32 0 48 15;
+#X connect 33 0 48 14;
+#X connect 34 0 48 13;
+#X connect 35 0 48 12;
+#X connect 36 0 48 11;
+#X connect 37 0 48 10;
+#X connect 38 0 48 9;
+#X connect 39 0 48 0;
+#X connect 40 0 48 8;
+#X connect 41 0 48 7;
+#X connect 42 0 48 6;
+#X connect 43 0 48 5;
+#X connect 44 0 48 4;
+#X connect 45 0 48 3;
+#X connect 46 0 48 2;
+#X connect 47 0 48 1;
+#X connect 48 0 60 0;
+#X connect 49 0 60 1;
+#X connect 51 0 60 0;
+#X connect 58 0 61 0;
+#X connect 60 0 2 0;
+#X connect 61 0 59 0;
diff --git a/doc/help/cyclone/bitshift~-help.pd b/doc/help/cyclone/bitshift~-help.pd
new file mode 100644
index 0000000..4e3d197
--- /dev/null
+++ b/doc/help/cyclone/bitshift~-help.pd
@@ -0,0 +1,52 @@
+#N canvas 1491 227 811 594 10;
+#X declare -lib cyclone;
+#X text 308 410 see also:;
+#X text 24 -18 Bitwise shift signal operator.;
+#X floatatom 88 197 0 0 0 0 - - -;
+#X msg 88 217 shift \$1;
+#X floatatom 430 176 0 0 0 0 - - -;
+#X msg 430 196 mode \$1;
+#X obj 60 281 clip~ -1 1;
+#X floatatom 375 176 0 0 0 0 - - -;
+#X msg 375 196 shift \$1;
+#X text 64 132 bitwise operation on a signal as bits;
+#X floatatom 324 176 0 0 0 0 - - -;
+#X obj 324 196 sig~ 1;
+#X text 275 351 modes \; mode 0: treat floating point signal input
+as raw 32 bit value \; mode 1: convert floating point signal input
+to integer \;;
+#X floatatom 89 301 0 0 0 0 - - -;
+#X obj 60 320 *~ 0.2;
+#X obj 60 362 dac~;
+#X obj 62 177 cycle~ 440;
+#X text 275 325 args: <shift> <mode>. both default to 0;
+#X text 325 141 bitwise operation on signals as integers;
+#X text 15 4 Performs bitwise operations on a floating point signal
+as bits or as an integer. Note that if you are converting the floats
+to ints and back that single precision floating point values only retain
+24 bits of integer resolution. The floating point bits from left to
+right are <1 sign bit> <8 exponent bits> <23 mantissa bits>. Positive
+shift values correspond to left shifting that number of bits \, negative
+shift values correspond to right shifting that number of bits.;
+#X obj 401 23 import cyclone;
+#X obj 324 220 bitshift~ 1 1;
+#X obj 325 274 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 2 256;
+#X obj 62 246 bitshift~ 8 0;
+#X obj 324 249 Snapshot~ 100;
+#X connect 2 0 3 0;
+#X connect 3 0 23 0;
+#X connect 4 0 5 0;
+#X connect 5 0 21 0;
+#X connect 6 0 14 0;
+#X connect 7 0 8 0;
+#X connect 8 0 21 0;
+#X connect 10 0 11 0;
+#X connect 11 0 21 0;
+#X connect 13 0 14 1;
+#X connect 14 0 15 0;
+#X connect 14 0 15 1;
+#X connect 16 0 23 0;
+#X connect 21 0 24 0;
+#X connect 23 0 6 0;
+#X connect 24 0 22 0;
diff --git a/doc/help/cyclone/bitxor~-help.pd b/doc/help/cyclone/bitxor~-help.pd
new file mode 100644
index 0000000..dbfa3b2
--- /dev/null
+++ b/doc/help/cyclone/bitxor~-help.pd
@@ -0,0 +1,191 @@
+#N canvas 1271 125 846 618 10;
+#X declare -lib cyclone;
+#X text 355 479 see also:;
+#X text 28 9 Performs bitwise boolean operations on a floating point
+signal as bits or as an integer. Note that if you are converting the
+floats to ints and back that single precision floating point values
+only retain 24 bits of integer resolution. The floating point bits
+from left to right are <1 sign bit> <8 exponent bits> <23 mantissa
+bits>.;
+#X text 28 -18 Bitwise xor signal operator.;
+#X obj 72 378 clip~ -1 1;
+#X floatatom 532 268 0 0 0 0 - - -;
+#X msg 532 286 mode \$1;
+#X text 47 231 bitwise boolean operation on a signal and some bitmask
+as bits;
+#X floatatom 480 266 0 0 0 0 - - -;
+#X floatatom 431 266 0 0 0 0 - - -;
+#X obj 480 286 sig~ 1;
+#X obj 431 286 sig~ 1;
+#X text 28 105 send bitmask;
+#X floatatom 101 401 0 0 0 0 - - -;
+#X obj 72 420 *~ 0.2;
+#X obj 231 116 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 446 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 433 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 420 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 407 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 394 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 381 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 368 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 355 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 342 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 329 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 316 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 303 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 290 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 277 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 264 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 251 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 238 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 225 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 212 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 199 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 186 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 173 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 160 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 147 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 30 119 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 134 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 121 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 108 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 95 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 82 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 69 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 56 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 43 157 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 30 182 pack bits 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0;
+#X floatatom 99 299 0 0 0 0 - - -;
+#X obj 72 454 dac~;
+#X obj 68 260 cycle~ 440;
+#X text 255 373 args: <mask> <mode>. both default to 0;
+#X text 463 158 <= set bitmask;
+#X text 432 231 bitwise boolean operation on signals as integers;
+#X text 92 283 use an integer as a bitmask;
+#X obj 443 31 import cyclone;
+#X obj 431 310 bitxor~ 0 1;
+#X text 255 399 modes \; mode 0: treat both floating point signal inputs
+as raw 32 bit values \; mode 1: convert both floating point signal
+inputs to integers \; mode 2: treat left input as raw 32 bit value
+\, convert right input to integer \; mode 3: convert left input to
+integer \, treat right input as raw 32 bit value \;;
+#X obj 431 338 Snapshot~ 100;
+#X obj 433 361 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 6 256;
+#X obj 68 319 bitxor~;
+#X connect 3 0 13 0;
+#X connect 4 0 5 0;
+#X connect 5 0 57 0;
+#X connect 7 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 57 1;
+#X connect 10 0 57 0;
+#X connect 12 0 13 1;
+#X connect 13 0 50 0;
+#X connect 13 0 50 1;
+#X connect 14 0 47 0;
+#X connect 14 0 46 0;
+#X connect 14 0 45 0;
+#X connect 14 0 44 0;
+#X connect 14 0 43 0;
+#X connect 14 0 42 0;
+#X connect 14 0 41 0;
+#X connect 14 0 40 0;
+#X connect 14 0 38 0;
+#X connect 14 0 37 0;
+#X connect 14 0 36 0;
+#X connect 14 0 35 0;
+#X connect 14 0 34 0;
+#X connect 14 0 33 0;
+#X connect 14 0 32 0;
+#X connect 14 0 31 0;
+#X connect 14 0 30 0;
+#X connect 14 0 29 0;
+#X connect 14 0 28 0;
+#X connect 14 0 27 0;
+#X connect 14 0 26 0;
+#X connect 14 0 25 0;
+#X connect 14 0 24 0;
+#X connect 14 0 23 0;
+#X connect 14 0 22 0;
+#X connect 14 0 21 0;
+#X connect 14 0 20 0;
+#X connect 14 0 19 0;
+#X connect 14 0 18 0;
+#X connect 14 0 17 0;
+#X connect 14 0 16 0;
+#X connect 14 0 15 0;
+#X connect 15 0 48 32;
+#X connect 16 0 48 31;
+#X connect 17 0 48 30;
+#X connect 18 0 48 29;
+#X connect 19 0 48 28;
+#X connect 20 0 48 27;
+#X connect 21 0 48 26;
+#X connect 22 0 48 25;
+#X connect 23 0 48 24;
+#X connect 24 0 48 23;
+#X connect 25 0 48 22;
+#X connect 26 0 48 21;
+#X connect 27 0 48 20;
+#X connect 28 0 48 19;
+#X connect 29 0 48 18;
+#X connect 30 0 48 17;
+#X connect 31 0 48 16;
+#X connect 32 0 48 15;
+#X connect 33 0 48 14;
+#X connect 34 0 48 13;
+#X connect 35 0 48 12;
+#X connect 36 0 48 11;
+#X connect 37 0 48 10;
+#X connect 38 0 48 9;
+#X connect 39 0 48 0;
+#X connect 40 0 48 8;
+#X connect 41 0 48 7;
+#X connect 42 0 48 6;
+#X connect 43 0 48 5;
+#X connect 44 0 48 4;
+#X connect 45 0 48 3;
+#X connect 46 0 48 2;
+#X connect 47 0 48 1;
+#X connect 48 0 61 0;
+#X connect 49 0 61 1;
+#X connect 51 0 61 0;
+#X connect 57 0 59 0;
+#X connect 59 0 60 0;
+#X connect 61 0 3 0;
diff --git a/doc/help/cyclone/buffir~-help.pd b/doc/help/cyclone/buffir~-help.pd
new file mode 100644
index 0000000..3f88191
--- /dev/null
+++ b/doc/help/cyclone/buffir~-help.pd
@@ -0,0 +1,90 @@
+#N canvas 41 53 873 616 10;
+#X declare -lib cyclone;
+#X floatatom 454 384 0 0 0 0 - - -;
+#X obj 330 374 noise~;
+#X obj 330 441 *~ 0.05;
+#X obj 330 474 dac~;
+#X obj 69 165 sig~ 1;
+#X text 231 167 Length (samps);
+#X obj 576 111 loadbang;
+#X msg 41 123 clear;
+#X floatatom 209 165 0 0 0 0 - - -;
+#X floatatom 160 136 0 0 0 0 - - -;
+#X obj 575 144 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#N canvas 480 212 405 395 genRamp 0;
+#X obj 39 197 sel 0 1;
+#X obj 81 254 i;
+#X obj 39 146 sel 1;
+#X msg 111 100 clear;
+#X obj 120 206 * 1;
+#X obj 120 180 expr ((127. - $f1) / 127.);
+#X obj 98 124 - 1;
+#X obj 39 75 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 81 282 pack 0 0;
+#X text 116 151 exponential ramp down from 1 to 0;
+#X text 147 249 makes 50% zeros \, 25% exponential downward ramp \,
+25% random;
+#X obj 39 99 Uzi 128;
+#X obj 39 123 decide;
+#X obj 39 174 decide;
+#X obj 39 219 urn 128;
+#X obj 39 53 inlet;
+#X obj 81 316 outlet;
+#X connect 0 0 14 0;
+#X connect 0 1 1 0;
+#X connect 1 0 8 0;
+#X connect 2 0 13 0;
+#X connect 3 0 14 0;
+#X connect 4 0 8 1;
+#X connect 5 0 4 0;
+#X connect 5 0 4 1;
+#X connect 6 0 1 1;
+#X connect 6 0 5 0;
+#X connect 7 0 3 0;
+#X connect 7 0 11 0;
+#X connect 8 0 16 0;
+#X connect 11 0 12 0;
+#X connect 11 2 6 0;
+#X connect 12 0 2 0;
+#X connect 13 0 0 0;
+#X connect 14 0 8 0;
+#X connect 15 0 7 0;
+#X restore 573 184 pd genRamp;
+#X text 33 104 clears input history only;
+#X text 186 131 Offset (samps);
+#X text 427 186 Generate new fir =>;
+#X text 178 216 Initial args: buffer \, offset(samps) \, length(samps)
+;
+#X text 181 241 256 point max len;
+#X text 8 291 integral of buffer from offset to offset + length;
+#X text 486 383 number of samples in impulse;
+#X obj 570 53 import cyclone;
+#X obj 330 409 buffir~ fir_buf 0 10;
+#X obj 50 216 buffir~ fir_buf 0 32;
+#X obj 574 223 peek~ fir_buf;
+#X obj 563 285 table fir_buf 128;
+#X obj 50 245 Snapshot~ 100;
+#X obj 52 269 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 0 256;
+#X text 15 35 a table based FIR convolution filter;
+#X text 16 58 buffir~ is a table based FIR (finite impulse response)
+filter. an input signal is convolved with n samples of a buffer. Currently
+the maximum number of points is 256;
+#X text 503 311 table is a 128-point downwards ramp with random values
+here and there with amplitude from 1 to 0;
+#X connect 0 0 20 2;
+#X connect 1 0 20 0;
+#X connect 2 0 3 0;
+#X connect 2 0 3 1;
+#X connect 4 0 21 0;
+#X connect 6 0 10 0;
+#X connect 7 0 21 0;
+#X connect 8 0 21 2;
+#X connect 9 0 21 1;
+#X connect 10 0 11 0;
+#X connect 11 0 22 0;
+#X connect 20 0 2 0;
+#X connect 21 0 24 0;
+#X connect 24 0 25 0;
diff --git a/doc/help/cyclone/capture~-help.pd b/doc/help/cyclone/capture~-help.pd
new file mode 100644
index 0000000..e698f5a
--- /dev/null
+++ b/doc/help/cyclone/capture~-help.pd
@@ -0,0 +1,34 @@
+#N canvas 1174 170 650 528 10;
+#X declare -lib cyclone;
+#X text 16 20 Collect samples from a signal and examine them in a text
+window;
+#X msg 285 141 write;
+#X msg 100 141 clear;
+#X obj 28 128 cycle~ 440;
+#X text 133 141 Clear capture buffer;
+#X text 22 46 capture~ is similar to the capture object \, except that
+it collects signal values rather than incoming integers. capture~ is
+designed for signal debugging or investigation321for recording \, use
+record~ or sfrecord~;
+#X text 326 139 Write as text file;
+#X text 160 207 Arguments: - optional "f" or "first" to put capture~
+into "first" mode where it stops collecting data after it has received
+the specified number of values \; - number of values to capture \;
+- the print precision (number of decimal places shown) \; - a list
+of up to 10 indices within a signal vector. If no indices present \,
+capture~ records the entire vector.;
+#X text 160 301 Default values: - "last" mode \, where capture~ continues
+to collect data \, throwing away old values if it has received more
+than its specified number \; - 4100 values \; - print precision of
+4 decimal places \; - record the entire signal vector \;;
+#X text 30 107 (look at values from a sine wave...);
+#X text 43 387 Note that capture~'s text window only holds a limited
+amount of data \, so it's easy to capture more data than you can see.
+If you want to see all the data \, write it to a text file and open
+the file with another text editor.;
+#X text 159 172 double-click to see text of captured values;
+#X obj 408 32 import cyclone;
+#X obj 28 181 capture~ f 1000 2 0;
+#X connect 1 0 13 0;
+#X connect 2 0 13 0;
+#X connect 3 0 13 0;
diff --git a/doc/help/cyclone/cartopol~-help.pd b/doc/help/cyclone/cartopol~-help.pd
new file mode 100644
index 0000000..6737c8b
--- /dev/null
+++ b/doc/help/cyclone/cartopol~-help.pd
@@ -0,0 +1,20 @@
+#N canvas 1197 272 782 300 10;
+#X declare -lib cyclone;
+#X text 147 63 Polar to cartesian coordinate conversion.;
+#X text 64 59 poltocar~;
+#X text 15 35 Cartesian to polar coordinate conversion.;
+#X text 92 106 Here's how to connect it to an fft~:;
+#X obj 655 22 import cyclone;
+#X text 212 169 phase (in 271 radians);
+#X obj 163 252 ifft~ 256 256 0;
+#X obj 163 228 poltocar~;
+#X obj 163 153 cartopol~;
+#X obj 163 130 fft~ 256 256 0;
+#X text 143 169 amp.;
+#X text 214 195 <- do some spectral processing here;
+#X connect 7 0 6 0;
+#X connect 7 1 6 1;
+#X connect 8 0 7 0;
+#X connect 8 1 7 1;
+#X connect 9 0 8 0;
+#X connect 9 1 8 1;
diff --git a/doc/help/cyclone/change~-help.pd b/doc/help/cyclone/change~-help.pd
new file mode 100644
index 0000000..94751a0
--- /dev/null
+++ b/doc/help/cyclone/change~-help.pd
@@ -0,0 +1,54 @@
+#N canvas 1309 108 683 427 10;
+#X declare -lib cyclone;
+#X text -82 58 Detect signal change and direction;
+#X obj 257 288 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 281 290 signal isn't the same;
+#X msg 118 103 0 \, 0 5000;
+#X obj 211 308 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X msg 44 103 500 \, 0 5000;
+#X msg -39 103 0 \, 500 5000;
+#X text 87 346 detect when signal is increasing;
+#X obj 89 329 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 31 349 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj -22 141 line~;
+#X text 30 368 detect when signal is decreasing;
+#X text 213 326 signal is the same;
+#X text -39 87 245 increasing;
+#X text 44 87 245 decreasing;
+#X text 119 87 245 the same;
+#X obj 422 45 import cyclone;
+#X obj -22 175 change~;
+#X obj 31 270 edge~;
+#X obj 89 270 edge~;
+#X obj 211 268 edge~;
+#X obj 211 234 expr~ $v1==0;
+#X obj 111 233 expr~ $v1==1;
+#X obj 13 233 expr~ $v1==-1;
+#X obj -88 229 Snapshot~ 100;
+#X obj -87 261 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 0 256;
+#X obj -125 173 Snapshot~ 100;
+#X obj -123 196 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0
+10 -262144 -1 -1 0 256;
+#X connect 3 0 10 0;
+#X connect 5 0 10 0;
+#X connect 6 0 10 0;
+#X connect 10 0 17 0;
+#X connect 10 0 26 0;
+#X connect 17 0 21 0;
+#X connect 17 0 24 0;
+#X connect 17 0 23 0;
+#X connect 17 0 22 0;
+#X connect 18 0 9 0;
+#X connect 19 0 8 0;
+#X connect 20 0 4 0;
+#X connect 20 1 1 0;
+#X connect 21 0 20 0;
+#X connect 22 0 19 0;
+#X connect 23 0 18 0;
+#X connect 24 0 25 0;
+#X connect 26 0 27 0;
diff --git a/doc/help/cyclone/click~-help.pd b/doc/help/cyclone/click~-help.pd
new file mode 100644
index 0000000..fae3714
--- /dev/null
+++ b/doc/help/cyclone/click~-help.pd
@@ -0,0 +1,21 @@
+#N canvas 1247 220 633 325 10;
+#X declare -lib cyclone;
+#X text 52 33 generate an impulse;
+#X msg 243 125 set 1;
+#X msg 207 107 set 0.25 0.5 0.75 1 0.67 0.3;
+#X obj 171 187 *~ 0.5;
+#X obj 171 218 dac~;
+#X obj 171 120 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 210 63 use the set message to create a personalized band-limited
+impulse (maximum 256 samples);
+#X text 223 153 optional argument(s) to set impulse (default impulse:
+1.0);
+#X obj 445 15 import cyclone;
+#X obj 171 156 click~;
+#X connect 1 0 9 0;
+#X connect 2 0 9 0;
+#X connect 3 0 4 0;
+#X connect 3 0 4 1;
+#X connect 5 0 9 0;
+#X connect 9 0 3 0;
diff --git a/doc/help/cyclone/cosh~-help.pd b/doc/help/cyclone/cosh~-help.pd
new file mode 100644
index 0000000..7a9ec2a
--- /dev/null
+++ b/doc/help/cyclone/cosh~-help.pd
@@ -0,0 +1,21 @@
+#N canvas 1394 305 683 382 10;
+#X declare -lib cyclone;
+#X text 170 85 this is probably only useful for mathematical calculations
+;
+#X text 37 324 make a wave that looks like a wave!!;
+#X msg 128 133 range 0 3.14159;
+#X obj 39 114 -~ 1.5708;
+#X obj 39 91 *~ 3.14159;
+#X obj 39 69 phasor~ 2;
+#X text 15 35 Hyperbolic cosine function (cosh(x)) for signals;
+#X obj 38 166 Scope~ 130 130 256 3 128 0 3.14159 0 0 0 0 102 255 51
+135 135 135 0;
+#X obj 396 25 import cyclone;
+#X obj 38 138 cosh~;
+#X obj 122 109 loadbang;
+#X connect 2 0 7 0;
+#X connect 3 0 9 0;
+#X connect 4 0 3 0;
+#X connect 5 0 4 0;
+#X connect 9 0 7 0;
+#X connect 10 0 2 0;
diff --git a/doc/help/cyclone/cosx~-help.pd b/doc/help/cyclone/cosx~-help.pd
new file mode 100644
index 0000000..0dc0613
--- /dev/null
+++ b/doc/help/cyclone/cosx~-help.pd
@@ -0,0 +1,19 @@
+#N canvas 1292 254 598 352 10;
+#X declare -lib cyclone;
+#X msg 124 135 range -1 1;
+#X obj 22 89 *~ 6.28319;
+#X obj 22 64 phasor~ 2;
+#X text 15 35 cos(x) for signals;
+#X text 101 65 this is a real cosine function whose input expects values
+between 0 and 2pi (unlike cos~ which is designed to work with phasor~'s
+output from 0 to 1);
+#X obj 125 110 loadbang;
+#X obj 397 21 import cyclone;
+#X obj 22 121 cosx~;
+#X obj 22 161 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X connect 0 0 8 0;
+#X connect 1 0 7 0;
+#X connect 2 0 1 0;
+#X connect 5 0 0 0;
+#X connect 7 0 8 0;
diff --git a/doc/help/cyclone/curve~-help.pd b/doc/help/cyclone/curve~-help.pd
new file mode 100644
index 0000000..107bce9
--- /dev/null
+++ b/doc/help/cyclone/curve~-help.pd
@@ -0,0 +1,62 @@
+#N canvas 1240 172 848 609 10;
+#X declare -lib cyclone;
+#X text 13 -87 Exponential ramp generator;
+#X text 69 299 line output;
+#X obj 724 300 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 732 258 parameter;
+#X text 657 259 time;
+#X msg 138 186 1 \, 0 1000 0.5;
+#X floatatom 724 227 0 0 0 0 - - -;
+#X msg 629 226 1 \, 0 500;
+#X msg 572 227 0 \, 1 500;
+#X obj 63 234 line~;
+#X msg 250 186 1 \, 0.5 500 0.5 0 500 -0.5;
+#X msg 43 182 0 \, 1 1000 0.5;
+#X text 9 -75 curve~ is similar to line~. It produces a signal that
+goes from an initial to target value over a specified number of milliseconds.
+However \, it produces non-linear ramps using a piecewise approximation
+of an exponential function. You specify the parameter to this exponential
+function in the curve~ object's right inlet. Values from 0 to 1 produce
+an "exponential" curve when increasing in value and values from -1
+to 0 produce a "logarithmic" curve. The closer to 0 the curve parameter
+is \, the closer the curve is to a straight line \, and the farther
+away the parameter is from 0 \, the steeper the curve. curve~ can also
+accept a list of up two or three arguments (the previous curve parameter
+is used if there are two arguments) \, or a list with two or more value
+\, time \, parameter triples. curve~ is limited to 42 such triples
+in a single list. The object's approximation of the exponential becomes
+better when the vector size is smaller \, but the object also becomes
+more computationally expensive.;
+#X text 194 226 optional arguments set initial value (default 0) and
+parameter (default 0);
+#X text 580 259 value;
+#X text 582 295 curve signal out;
+#X text 740 290 bang when done;
+#X text 210 286 curve output;
+#X text 18 485 Special thanks to Richard Dudas for the suggestion of
+a curve equation to use.;
+#X text 1 165 amp examples: compare curve~ and line~;
+#X text 255 169 example of an "s" curve;
+#X obj 472 -24 import cyclone;
+#X obj 138 236 curve~;
+#X obj 207 310 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 64 322 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X text 540 191 try different curve parameters (-1 to 1);
+#X obj 572 273 curve~;
+#X obj 572 319 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X connect 5 0 9 0;
+#X connect 5 0 22 0;
+#X connect 6 0 26 2;
+#X connect 7 0 26 0;
+#X connect 8 0 26 0;
+#X connect 9 0 24 0;
+#X connect 10 0 22 0;
+#X connect 11 0 9 0;
+#X connect 11 0 22 0;
+#X connect 22 0 23 0;
+#X connect 26 0 27 0;
+#X connect 26 1 2 0;
diff --git a/doc/help/cyclone/cycle~-help.pd b/doc/help/cyclone/cycle~-help.pd
new file mode 100644
index 0000000..1601b01
--- /dev/null
+++ b/doc/help/cyclone/cycle~-help.pd
@@ -0,0 +1,84 @@
+#N canvas 1205 151 951 466 10;
+#X declare -lib cyclone;
+#X text 18 -22 Table-lookup oscillator or function generator;
+#X floatatom 633 242 0 0 0 0 - - -;
+#X obj 610 170 loadbang;
+#X msg 610 190 22.5;
+#X text 609 104 4 Using your function;
+#X obj 610 261 *~ 0;
+#X obj 610 216 cycle~ buffsky;
+#X msg 403 96 437;
+#X obj 403 73 loadbang;
+#X obj 22 240 *~ 0.2;
+#X obj 22 197 cycle~ 440;
+#X obj 403 248 *~ 0.2;
+#X floatatom 403 129 0 0 0 0 - - -;
+#X msg 403 157 \$1 400;
+#X obj 403 182 line~;
+#X obj 403 214 cycle~;
+#X obj 212 331 dac~;
+#X obj 118 240 *~ 0.2;
+#X obj 152 170 phasor~ 660;
+#X obj 118 204 cycle~;
+#X text 21 11 cycle~ uses a stored table of 512 samples to generate
+functions. By default it uses a sine wave \, but you can give it a
+function stored in a buffer~ object.;
+#X text 9 107 frequency input (float or signal);
+#X text 153 145 phase input (float or signal);
+#X text 153 126 2 Driven by phase only (frequency is 0):;
+#X text 12 93 1 argument sets frequency (default 0);
+#N canvas 1988 576 183 228 generate-buffer~ 0;
+#X obj 40 30 loadbang;
+#N canvas 50 40 152 265 sawtooth 0;
+#X obj 80 145 - 2;
+#X obj 80 120 * 2;
+#X obj 22 119 * 2;
+#X obj 22 95 split 0 0.5;
+#X obj 22 59 / 512;
+#X obj 22 33 inlet;
+#X obj 22 208 outlet;
+#X connect 0 0 6 0;
+#X connect 1 0 0 0;
+#X connect 2 0 6 0;
+#X connect 3 0 2 0;
+#X connect 3 1 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 4 0;
+#X restore 80 120 pd sawtooth;
+#X obj 40 143 pack 0 0;
+#X obj 40 98 t f f;
+#X obj 40 76 line 0 1;
+#X msg 40 56 0 \, 512 512;
+#X obj 40 164 peek~ buffsky;
+#X connect 0 0 5 0;
+#X connect 1 0 2 1;
+#X connect 2 0 6 0;
+#X connect 3 0 2 0;
+#X connect 3 1 1 0;
+#X connect 4 0 3 0;
+#X connect 5 0 4 0;
+#X restore 609 123 pd generate-buffer~;
+#X text 673 243 listen?;
+#X obj 555 15 import cyclone;
+#X obj 609 144 table buffsky 512;
+#X text 432 127 3 Using frequency input;
+#X text 308 338 Symbol argument sets name of table to play from. Additional
+int argument after that sets sample offset into the table (default
+0);
+#X connect 1 0 5 1;
+#X connect 2 0 3 0;
+#X connect 3 0 6 0;
+#X connect 5 0 16 1;
+#X connect 6 0 5 0;
+#X connect 7 0 12 0;
+#X connect 8 0 7 0;
+#X connect 9 0 16 0;
+#X connect 10 0 9 0;
+#X connect 11 0 16 1;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 11 0;
+#X connect 17 0 16 0;
+#X connect 18 0 19 1;
+#X connect 19 0 17 0;
diff --git a/doc/help/cyclone/deltaclip~-help.pd b/doc/help/cyclone/deltaclip~-help.pd
new file mode 100644
index 0000000..d25d058
--- /dev/null
+++ b/doc/help/cyclone/deltaclip~-help.pd
@@ -0,0 +1,50 @@
+#N canvas 1440 298 592 400 10;
+#X declare -lib cyclone;
+#X text 15 35 Limit the change between samples in an incoming signal
+;
+#X text 166 127 delta max;
+#X floatatom 169 145 0 0 0 0 - - -;
+#X floatatom 169 182 0 0 0 0 - - -;
+#X obj 169 163 * 1e-05;
+#X floatatom 104 145 0 0 0 0 - - -;
+#X floatatom 104 182 0 0 0 0 - - -;
+#X obj 104 163 * 1e-05;
+#X text 163 233 slope;
+#X msg 57 135 1;
+#X msg 15 137 0;
+#X text 22 60 Similar to clip~ \, but with respect to slope rather
+than amplitude. Useful for envelope following and lowpass filtering.
+Typically you will want your minimum slope to be negative and your
+maximum slope to be positive.;
+#X obj 39 177 sig~;
+#X floatatom 39 158 0 0 0 0 - - -;
+#X text 201 202 args: <delta min> <delta max>;
+#X text 51 233 amplitude;
+#X text 102 124 delta min;
+#X obj 411 38 import cyclone;
+#X obj 39 249 Snapshot~ 100;
+#X obj 145 249 delta~;
+#X obj 275 247 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 37 271 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 1 256;
+#X obj 146 272 Snapshot~ 100;
+#X obj 144 294 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 0 256;
+#X obj 39 201 deltaclip~ -1e-05 1e-05;
+#X connect 2 0 4 0;
+#X connect 3 0 24 2;
+#X connect 4 0 3 0;
+#X connect 5 0 7 0;
+#X connect 6 0 24 1;
+#X connect 7 0 6 0;
+#X connect 9 0 13 0;
+#X connect 10 0 13 0;
+#X connect 12 0 24 0;
+#X connect 13 0 12 0;
+#X connect 18 0 21 0;
+#X connect 19 0 22 0;
+#X connect 22 0 23 0;
+#X connect 24 0 18 0;
+#X connect 24 0 19 0;
+#X connect 24 0 20 0;
diff --git a/doc/help/cyclone/delta~-help.pd b/doc/help/cyclone/delta~-help.pd
new file mode 100644
index 0000000..502ba60
--- /dev/null
+++ b/doc/help/cyclone/delta~-help.pd
@@ -0,0 +1,45 @@
+#N canvas 1560 299 640 407 10;
+#X declare -lib cyclone;
+#X text 15 35 Transform a signal into differences between successive
+samples;
+#X obj 256 268 *~ 0.02;
+#X obj 256 187 *~ 50;
+#X obj 256 135 phasor~ 2.003;
+#X obj 256 160 cos~;
+#X obj 256 214 +~ 440;
+#X obj 256 239 cycle~;
+#X obj 172 181 *~ 200000;
+#X floatatom 34 214 0 0 0 0 - - -;
+#X obj 34 187 snapshot~ 100;
+#X obj 172 300 dac~;
+#X obj 172 267 *~ 0.02;
+#X obj 172 240 cycle~;
+#X obj 172 214 +~ 440;
+#X obj 172 104 phasor~ 2;
+#X obj 172 128 cos~;
+#X msg 34 107 0 \, 5000 5000;
+#X obj 34 129 line~;
+#X text 173 87 Proposal for a new ambulance siren:;
+#X text 257 118 "(ambulance)";
+#X text 34 68 what's the increment between succesive samples of a line?
+;
+#X obj 447 49 import cyclone;
+#X obj 34 157 delta~;
+#X obj 172 154 delta~;
+#X connect 1 0 10 1;
+#X connect 2 0 5 0;
+#X connect 3 0 4 0;
+#X connect 4 0 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 1 0;
+#X connect 7 0 13 0;
+#X connect 9 0 8 0;
+#X connect 11 0 10 0;
+#X connect 12 0 11 0;
+#X connect 13 0 12 0;
+#X connect 14 0 15 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 22 0;
+#X connect 22 0 9 0;
+#X connect 23 0 7 0;
diff --git a/doc/help/cyclone/edge~-help.pd b/doc/help/cyclone/edge~-help.pd
new file mode 100644
index 0000000..993bdd6
--- /dev/null
+++ b/doc/help/cyclone/edge~-help.pd
@@ -0,0 +1,26 @@
+#N canvas 1239 346 780 382 10;
+#X declare -lib cyclone;
+#X text 15 35 Detect zero to non-zero signal transitions;
+#X text 176 256 zero to non- zero transition;
+#X floatatom 156 85 0 0 0 0 - - -;
+#X obj 185 235 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 156 259 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 156 113 sig~;
+#X text 199 80 change signal value above and below 1;
+#X text 209 233 non-zero to zero transition;
+#X obj 501 36 import cyclone;
+#X obj 299 142 expr~;
+#X obj 156 149 expr~ $v1>1;
+#X obj 156 200 edge~;
+#X obj 209 182 Snapshot~ 100;
+#X obj 210 205 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 0 256;
+#X connect 2 0 5 0;
+#X connect 5 0 10 0;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 4 0;
+#X connect 11 1 3 0;
+#X connect 12 0 13 0;
diff --git a/doc/help/cyclone/frameaccum~-help.pd b/doc/help/cyclone/frameaccum~-help.pd
new file mode 100644
index 0000000..237023b
--- /dev/null
+++ b/doc/help/cyclone/frameaccum~-help.pd
@@ -0,0 +1,18 @@
+#N canvas 1440 369 689 466 10;
+#X declare -lib cyclone;
+#X text 20 70 computes the "running phase" of successive phase deviation
+frames;
+#X text 28 96 frameaccum~ accumulates each of the values of the previous
+input signal vector from those of the current vector;
+#X obj 445 37 import cyclone;
+#X text 28 124 so \, when used in the context of a pfft~ patch (where
+the FFT frame is the vector size) it can be used to compute the running
+phase;
+#X obj 118 247 Snapshot~ 100;
+#X obj 118 272 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 6529 256;
+#X obj 117 224 frameaccum~;
+#X obj 116 196 sig~ 1;
+#X connect 4 0 5 0;
+#X connect 6 0 4 0;
+#X connect 7 0 6 0;
diff --git a/doc/help/cyclone/framedelta~-help.pd b/doc/help/cyclone/framedelta~-help.pd
new file mode 100644
index 0000000..961f2e6
--- /dev/null
+++ b/doc/help/cyclone/framedelta~-help.pd
@@ -0,0 +1,27 @@
+#N canvas 1325 361 647 377 10;
+#X declare -lib cyclone;
+#X text 15 35 compute the phase deviation between successive FFT frames
+;
+#X obj 259 154 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 95 148 bang to start the count ->;
+#X text 29 88 so \, when used in the context of a pfft~ patch (where
+the FFT frame is the vector size) it can be used to compute the phase
+deviation;
+#X text 28 59 framedelta~ subtracts each of the values of the previous
+input signal vector from those of the current vector;
+#X obj 459 20 import cyclone;
+#X obj 259 181 count~;
+#X obj 257 244 framedelta~;
+#X obj 257 271 Snapshot~ 100;
+#X obj 258 295 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 64 256;
+#X obj 152 239 Snapshot~ 100;
+#X obj 153 263 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 874432 256;
+#X connect 1 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 10 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 10 0 11 0;
diff --git a/doc/help/cyclone/kink~-help.pd b/doc/help/cyclone/kink~-help.pd
new file mode 100644
index 0000000..313af8f
--- /dev/null
+++ b/doc/help/cyclone/kink~-help.pd
@@ -0,0 +1,57 @@
+#N canvas 1122 202 897 641 10;
+#X declare -lib cyclone;
+#X msg 470 359 triglevel 0.01;
+#X msg 421 358 4 64;
+#X text 51 -9 Distort the output of a phasor~;
+#X obj 199 211 - 1;
+#X obj 182 257 +~;
+#X msg 286 201 1 \, 10 180 10 120 1 700;
+#X obj 286 230 line~ 1;
+#X obj 52 449 dac~;
+#X obj 52 390 *~ 0.05;
+#X obj 52 361 cycle~;
+#X floatatom 199 188 0 0 0 0 - - -;
+#X obj 80 249 phasor~ 440;
+#X text 52 16 kink~ takes phasor~ values and distorts them according
+to a slope factor. If the input times the slope is less than 0.5 \,
+that value is output. Otherwise \, a complentary slope is used \, equal
+to 0.5 at the same input value but equal to 1 when the input is 1 This
+creates a bend or "kink" in the phase waveform when the slope is not
+equal to 1 If you feed the output of kink~ into a cycle~ \, the result
+is that the first part (before the kink) of the wavetable is scanned
+much more quickly than the second part (after the kink). Can you say
+CZ-101? Sure you can.;
+#X text 168 285 slope input (float or signal);
+#X text 10 279 phase input;
+#X text 89 317 distorted phase output;
+#X text 89 345 use as table lookup;
+#X text 195 300 argument sets initial slope value (default 1.0);
+#X obj 540 13 import cyclone;
+#X obj 80 297 kink~ 1.3;
+#X obj 218 489 Scope~ 130 130 4 3 128 -1 1 0 0 0 0 102 255 51 135 135
+135 0;
+#X obj 215 350 Scope~ 130 130 4 3 128 -1 1 0 0 0 0.01 102 255 51 135
+135 135 0;
+#X obj 426 335 loadbang;
+#X text 440 197 This ramps the slope from 1 to 10 and then back to
+1 Combine with an amplitude envelope to achieve BRASS ENS. 1 bliss.
+;
+#X text 74 150 try different slope values (approx 1-20). Reset to 1
+to use the envelope at right.;
+#X connect 0 0 21 0;
+#X connect 1 0 20 0;
+#X connect 1 0 21 0;
+#X connect 3 0 4 1;
+#X connect 4 0 19 1;
+#X connect 5 0 6 0;
+#X connect 6 0 4 0;
+#X connect 8 0 7 0;
+#X connect 8 0 7 1;
+#X connect 9 0 8 0;
+#X connect 9 0 20 0;
+#X connect 10 0 3 0;
+#X connect 11 0 19 0;
+#X connect 19 0 9 1;
+#X connect 19 0 21 0;
+#X connect 22 0 1 0;
+#X connect 22 0 0 0;
diff --git a/doc/help/cyclone/log~-help.pd b/doc/help/cyclone/log~-help.pd
new file mode 100644
index 0000000..2bb7141
--- /dev/null
+++ b/doc/help/cyclone/log~-help.pd
@@ -0,0 +1,50 @@
+#N canvas 1168 140 832 409 10;
+#X declare -lib cyclone;
+#X text 15 35 Output the log (to a specified base) of a signal;
+#X obj 377 314 clip~ 0 1;
+#X floatatom 460 173 0 0 0 0 - - -;
+#X floatatom 439 326 0 0 0 0 - - -;
+#X obj 419 240 log~ 2;
+#X obj 411 171 line~ 1;
+#X msg 406 145 1 \, 1.8 3000 1 300;
+#X obj 19 116 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 19 386 dac~;
+#X obj 19 330 *~ 0.2;
+#X obj 19 243 *~ 440;
+#X msg 19 152 1.44 \, 4 3000;
+#X obj 19 174 line~ 1;
+#X obj 19 300 cycle~;
+#X obj 19 207 log~ 2;
+#X text 20 58 log~ is useful for generating curves from line~. In the
+example below \, log~ with an argument 2 (for log to the base 2) is
+used to generate a pitch glissando and a logarithmic amplitude envelope.
+;
+#X text 58 194 optional argument determines the base of the logarithm.
+If no argument is present \, e (the natural logarithm) is used. base
+can be changed via right inlet.;
+#X text 31 281 result goes from around 220 to 880 Hz;
+#X text 402 121 log amplitude envelope;
+#X text 103 152 pitch glissando;
+#X text 467 200 try different bases...the lower the base (above 1)
+the bigger the output. bases between 0 and 1 result in a negative output.
+;
+#X obj 456 20 import cyclone;
+#X text 42 117 click to hear something;
+#X obj 439 296 Snapshot~ 50;
+#X connect 1 0 9 1;
+#X connect 2 0 4 1;
+#X connect 4 0 1 0;
+#X connect 4 0 23 0;
+#X connect 5 0 4 0;
+#X connect 6 0 5 0;
+#X connect 7 0 11 0;
+#X connect 7 0 6 0;
+#X connect 9 0 8 0;
+#X connect 9 0 8 1;
+#X connect 10 0 13 0;
+#X connect 11 0 12 0;
+#X connect 12 0 14 0;
+#X connect 13 0 9 0;
+#X connect 14 0 10 0;
+#X connect 23 0 3 0;
diff --git a/doc/help/cyclone/lores~-help.pd b/doc/help/cyclone/lores~-help.pd
new file mode 100644
index 0000000..76a2349
--- /dev/null
+++ b/doc/help/cyclone/lores~-help.pd
@@ -0,0 +1,38 @@
+#N canvas 1511 350 600 410 10;
+#X declare -lib cyclone;
+#X text 10 2 Low-pass filter with resonance;
+#X msg 255 149 200 \, 2000 500 200 1000;
+#X floatatom 211 201 0 0 0 0 - - -;
+#X floatatom 119 150 0 0 0 0 - - -;
+#X msg 119 175 \$1 30;
+#X obj 119 199 line~ 200;
+#X obj 27 321 dac~;
+#X obj 27 285 *~ 0.15;
+#X obj 27 125 phasor~ 150;
+#X text 17 25 lores~ implements a cheap lowpass with an adjustment
+that lets you add the resonance you've been looking for. The middle
+inlet sets a kind of cutoff frequency \, but the sharpness of the filter
+depends on the resonance. 0 is a little bit sharp and 1 as sharp as
+you're going to get.;
+#X text 128 230 frequency;
+#X text 36 230 input;
+#X text 209 312 A special shout out to Jean Laroche for the formula.
+;
+#X text 219 226 resonance (signal or float);
+#X text 27 106 harmonically rich input source;
+#X text 36 263 output;
+#X text 225 248 arguments for initial cutoff frequency (default 0)
+and resonance (default 0);
+#X text 114 134 set cutoff frequency;
+#X text 256 134 filter sweep;
+#X obj 393 31 import cyclone;
+#X obj 27 244 lores~ 200 0.75;
+#X connect 1 0 5 0;
+#X connect 2 0 20 2;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 20 1;
+#X connect 7 0 6 0;
+#X connect 7 0 6 1;
+#X connect 8 0 20 0;
+#X connect 20 0 7 0;
diff --git a/doc/help/cyclone/maximum~-help.pd b/doc/help/cyclone/maximum~-help.pd
new file mode 100644
index 0000000..7cda2ab
--- /dev/null
+++ b/doc/help/cyclone/maximum~-help.pd
@@ -0,0 +1,22 @@
+#N canvas 1645 195 550 348 10;
+#X declare -lib cyclone;
+#X text 15 35 output the maximum of two signals;
+#X obj 272 105 cycle~ 3.14;
+#X obj 227 80 cycle~ 2;
+#X obj 388 24 import cyclone;
+#X obj 226 132 maximum~;
+#X obj 226 159 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 52 173 maximum~ 0.5;
+#X obj 52 134 sig~;
+#X floatatom 52 104 5 0 0 0 - - -;
+#X obj 52 198 Snapshot~ 100;
+#X obj 53 225 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 0.5 256;
+#X connect 1 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 9 0;
+#X connect 7 0 6 0;
+#X connect 8 0 7 0;
+#X connect 9 0 10 0;
diff --git a/doc/help/cyclone/minimum~-help.pd b/doc/help/cyclone/minimum~-help.pd
new file mode 100644
index 0000000..80689d9
--- /dev/null
+++ b/doc/help/cyclone/minimum~-help.pd
@@ -0,0 +1,22 @@
+#N canvas 1299 353 554 360 10;
+#X declare -lib cyclone;
+#X text 15 35 output the minimum of two signals;
+#X obj 286 97 cycle~ 3.14;
+#X obj 242 74 cycle~ 2;
+#X obj 351 12 import cyclone;
+#X obj 236 142 maximum~;
+#X obj 236 169 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 62 144 sig~;
+#X floatatom 62 114 5 0 0 0 - - -;
+#X obj 62 208 Snapshot~ 100;
+#X obj 63 235 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 0 256;
+#X obj 62 183 minimum~ 0.5;
+#X connect 1 0 4 1;
+#X connect 2 0 4 0;
+#X connect 4 0 5 0;
+#X connect 6 0 10 0;
+#X connect 7 0 6 0;
+#X connect 8 0 9 0;
+#X connect 10 0 8 0;
diff --git a/doc/help/cyclone/mstosamps~-help.pd b/doc/help/cyclone/mstosamps~-help.pd
new file mode 100644
index 0000000..14f8ba3
--- /dev/null
+++ b/doc/help/cyclone/mstosamps~-help.pd
@@ -0,0 +1,26 @@
+#N canvas 1097 319 626 352 10;
+#X declare -lib cyclone;
+#X text 15 35 Convert milliseconds to a number of samples (at the current
+sampling rate);
+#X msg 271 117 0 \, 1000 3000;
+#X floatatom 271 239 0 0 0 0 - - -;
+#X obj 271 137 line~;
+#X floatatom 87 138 0 0 0 0 - - -;
+#X floatatom 30 91 0 0 0 0 - - -;
+#X text 281 198 number of samples out (as a signal);
+#X text 281 162 number of milliseconds in (as a signal);
+#X text 23 68 Use as a calculator or for float parameters;
+#X obj 421 24 import cyclone;
+#X obj 30 114 mstosamps~;
+#X obj 271 178 mstosamps~;
+#X obj 271 217 Snapshot~ 100;
+#X text 263 92 or convert signal values;
+#X text 57 88 number of milliseconds;
+#X text 116 139 number of samples;
+#X text 312 242 number of samples;
+#X connect 1 0 3 0;
+#X connect 3 0 11 0;
+#X connect 5 0 10 0;
+#X connect 10 1 4 0;
+#X connect 11 0 12 0;
+#X connect 12 0 2 0;
diff --git a/doc/help/cyclone/mtr-help.pd b/doc/help/cyclone/mtr-help.pd
new file mode 100644
index 0000000..23196f1
--- /dev/null
+++ b/doc/help/cyclone/mtr-help.pd
@@ -0,0 +1,52 @@
+#N canvas 1277 361 716 487 10;
+#X declare -lib cyclone;
+#X text -24 41 Multi-track recorder for any kind of message;
+#X text -17 322 The leftmost inlet of mtr is a control inlet for all
+tracks. You can send the same messages to individual tracks as well.
+Each track records what comes into its inlet \, and plays it back through
+the outlet directly below the inlet.;
+#X text 142 162 argument: int specifies number of tracks (default 1)
+up to 32;
+#X text -22 283 mtr sends out list with track # and duration when it
+receives a "next" message;
+#X text -24 66 Choose record to begin recording sliders \, play to
+play back;
+#X obj 412 31 import cyclone;
+#X msg 1 99 record;
+#X msg 50 100 play;
+#X text 151 93 Control messages sent to an individual track affect
+that track only.;
+#X obj 155 200 vsl 18 47 0 128 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 800 1;
+#X obj 129 200 vsl 18 47 0 128 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 1200 1;
+#X obj 103 200 vsl 18 47 0 128 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 900 1;
+#X msg 1 191 next;
+#X msg 1 168 rewind;
+#X obj 61 171 mtr 3;
+#X text 351 222 other messages (copied from source):;
+#X msg 75 119 stop;
+#X text 409 250 mute;
+#X text 410 266 unmute;
+#X text 411 282 clear;
+#X text 410 296 delay ms;
+#X text 412 310 write;
+#X text 412 324 read;
+#X text 412 339 tempo float;
+#X obj -2 263 print;
+#X text 32 262 track# duration;
+#X text 389 381 see also:;
+#X obj 453 382 qlist;
+#X connect 6 0 14 0;
+#X connect 7 0 14 0;
+#X connect 9 0 14 3;
+#X connect 10 0 14 2;
+#X connect 11 0 14 1;
+#X connect 12 0 14 0;
+#X connect 13 0 14 0;
+#X connect 14 0 24 0;
+#X connect 14 1 11 0;
+#X connect 14 2 10 0;
+#X connect 14 3 9 0;
+#X connect 16 0 14 0;
diff --git a/doc/help/cyclone/onepole~-help.pd b/doc/help/cyclone/onepole~-help.pd
new file mode 100644
index 0000000..23ada04
--- /dev/null
+++ b/doc/help/cyclone/onepole~-help.pd
@@ -0,0 +1,20 @@
+#N canvas 1172 268 591 353 10;
+#X declare -lib cyclone;
+#X text 37 24 single-pole lowpass filter;
+#X text 56 272 onepole's advantages are efficiency and simplicity.
+it works well as a pre- or post-processing stage for other treatments
+\, such as waveshaping or filtering \, which can benefit from a gentle
+roll-off of high frequencies.;
+#X text 38 124 this filter is equivalent to a biquad~ object with the
+coefficients \, [ a0 = k \, b1 = k - 1 ] \, as demonstrated below.
+;
+#X text 38 83 where k represents the cutoff frequency in radians. this
+generates a single-pole lowpass filter with a 6dB/octave attenuation.
+;
+#X text 65 66 out = prev + k * (in - prev);
+#X text 38 50 onepole~ implements the minimal filter equation:;
+#X obj 427 24 import cyclone;
+#X text 189 220 inlet 2: float or signal sets cutoff frequency (Hz)
+;
+#X obj 89 221 onepole~ 300;
+#X text 187 236 argument initializes frequency;
diff --git a/doc/help/cyclone/phasewrap~-help.pd b/doc/help/cyclone/phasewrap~-help.pd
new file mode 100644
index 0000000..89717d9
--- /dev/null
+++ b/doc/help/cyclone/phasewrap~-help.pd
@@ -0,0 +1,15 @@
+#N canvas 1245 270 439 202 10;
+#X declare -lib cyclone;
+#X text 15 35 wrap a signal between -pi and pi;
+#X obj 270 39 import cyclone;
+#X obj 106 83 sig~;
+#X obj 108 60 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 41 256;
+#X obj 106 116 phasewrap~;
+#X obj 107 152 Snapshot~ 100;
+#X obj 106 177 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 -2.9823 256;
+#X connect 2 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
diff --git a/doc/help/cyclone/pink~-help.pd b/doc/help/cyclone/pink~-help.pd
new file mode 100644
index 0000000..6bc6ada
--- /dev/null
+++ b/doc/help/cyclone/pink~-help.pd
@@ -0,0 +1,18 @@
+#N canvas 1352 396 489 429 10;
+#X declare -lib cyclone;
+#X text 15 35 Pink noise generator;
+#X obj 80 337 dac~;
+#X obj 80 264 *~ 0.2;
+#X text 20 141 pink~ is pretty simple. just connect its outlet to something
+and you get noise. the signal input is ignored.;
+#X text 18 58 pink~ generates pink noise \, as distinguished from white
+noise (which the MSP object noise~ generates). White noise has constant
+spectral power per hertz of bandwidth \, while pink noise has constant
+power per octave. Subjectively \, pink noise sounds less hissy than
+white noise.;
+#X obj 310 34 import cyclone;
+#X text 112 243;
+#X obj 80 228 pink~;
+#X connect 2 0 1 0;
+#X connect 2 0 1 1;
+#X connect 7 0 2 0;
diff --git a/doc/help/cyclone/poke~-help.pd b/doc/help/cyclone/poke~-help.pd
new file mode 100644
index 0000000..6ac437b
--- /dev/null
+++ b/doc/help/cyclone/poke~-help.pd
@@ -0,0 +1,44 @@
+#N canvas 1391 272 831 462 10;
+#X declare -lib cyclone;
+#X declare -lib zexy;
+#X msg 278 155 0;
+#X floatatom 342 154 0 0 0 0 - - -;
+#X obj 182 204 sig~ -1;
+#X text -5 280 value;
+#X obj 37 263 cycle~ 440;
+#X text 120 276 index;
+#X text 103 303 channel;
+#X text 298 198 a source of an increasing index \, also consider fft~
+;
+#X text 6 41 poke~ allows you to write samples into a buffer~ at sample
+locations specified by a signal. Typically \, the signal will increase
+in value by 1 with each sample to write successive values into successive
+samples (like record~). If the index signal is negative or larger than
+the size of the buffer~ \, no data is recorded.;
+#X text 392 157 count maximum sets the number of samples recorded (think
+of it as the loop size);
+#X text 12 23 Write into a table using a signal sample index;
+#X obj 458 50 import cyclone;
+#X obj 443 256 table foo 1000;
+#X obj 38 309 poke~ foo;
+#X text 37 330 arguments are name of table (required) and initial channel
+to write (optional \, default 1);
+#X obj 561 49 import zexy;
+#X obj 146 249 multiplex~ 0 1;
+#X msg -8 168 0;
+#X msg -8 145 1;
+#X text 23 146 start writing;
+#X text 23 167 stop writing by sending -1 signal;
+#X floatatom 279 261 5 0 0 0 - - -;
+#X obj 278 177 count~ 0 2048;
+#X obj 279 235 Snapshot~ 100;
+#X connect 0 0 22 0;
+#X connect 1 0 22 1;
+#X connect 2 0 16 0;
+#X connect 4 0 13 0;
+#X connect 16 0 13 1;
+#X connect 17 0 16 0;
+#X connect 18 0 16 0;
+#X connect 22 0 16 1;
+#X connect 22 0 23 0;
+#X connect 23 0 21 0;
diff --git a/doc/help/cyclone/poltocar~-help.pd b/doc/help/cyclone/poltocar~-help.pd
new file mode 100644
index 0000000..54747ab
--- /dev/null
+++ b/doc/help/cyclone/poltocar~-help.pd
@@ -0,0 +1,16 @@
+#N canvas 1382 212 440 290 10;
+#X text 15 35 Polar to cartesian coordinate conversion.;
+#X text 113 151 phase (in 271 radians);
+#X obj 64 234 ifft~ 256 256 0;
+#X obj 64 210 poltocar~;
+#X obj 64 135 cartopol~;
+#X obj 64 112 fft~ 256 256 0;
+#X text 44 151 amp.;
+#X text 61 77 Here's how to connect it to an fft~:;
+#X text 115 177 <- do some spectral processing here;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 3 0;
+#X connect 4 1 3 1;
+#X connect 5 0 4 0;
+#X connect 5 1 4 1;
diff --git a/doc/help/cyclone/pong~-help.pd b/doc/help/cyclone/pong~-help.pd
new file mode 100644
index 0000000..efff81e
--- /dev/null
+++ b/doc/help/cyclone/pong~-help.pd
@@ -0,0 +1,60 @@
+#N canvas 1472 392 646 472 10;
+#X declare -lib cyclone;
+#X text 25 -55 fold or wrap a signal within a given range;
+#X text 305 104 lo val;
+#X text 360 104 hi val;
+#X floatatom 361 121 0 0 0 0 - - -;
+#X floatatom 305 121 0 0 0 0 - - -;
+#X floatatom 236 116 0 0 0 0 - - -;
+#X obj 236 137 phasor~ 4;
+#X text 86 117 lo val;
+#X text 162 112 hi val;
+#X obj 163 150 sig~ 0.25;
+#X floatatom 163 129 0 0 0 0 - - -;
+#X obj 86 155 sig~ -0.25;
+#X floatatom 86 134 0 0 0 0 - - -;
+#X floatatom 14 120 0 0 0 0 - - -;
+#X obj 14 141 phasor~ 4;
+#X text 28 -30 pong either folds or wraps its input within the range
+of a lo val and a hi val. The optional arguments are <mode> <lo val>
+<high val>. mode 0 is fold \, mode 1 is wrap. The default mode is fold.
+The default range is zero to one. If hi val is greater than lo val
+\, their behavior is swapped. All inlets accept both signals and floats.
+The mode <int> message may be used to switch between fold and wrap
+mode. It is useful for performing modulo arithmetic \, as well as foldover
+or wraparound distortion.;
+#X obj 448 -20 import cyclone;
+#X obj 29 252 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 237 272 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 256 222 Snapshot~ 100;
+#X obj 257 245 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 0.0467523 256;
+#X obj 45 207 Snapshot~ 100;
+#X obj 46 230 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 0.0467523 256;
+#X obj 30 179 pong~ 0 -0.25 0.25;
+#X obj 237 197 pong~ 1 -0.25 0.25;
+#X msg 425 147 mode 0;
+#X msg 424 174 mode 1;
+#X text 471 147 fold;
+#X text 472 173 wrap;
+#X connect 3 0 24 2;
+#X connect 4 0 24 1;
+#X connect 5 0 6 0;
+#X connect 6 0 24 0;
+#X connect 9 0 23 2;
+#X connect 10 0 9 0;
+#X connect 11 0 23 1;
+#X connect 12 0 11 0;
+#X connect 13 0 14 0;
+#X connect 14 0 23 0;
+#X connect 19 0 20 0;
+#X connect 21 0 22 0;
+#X connect 23 0 17 0;
+#X connect 23 0 21 0;
+#X connect 24 0 18 0;
+#X connect 24 0 19 0;
+#X connect 25 0 24 0;
+#X connect 26 0 24 0;
diff --git a/doc/help/cyclone/pow~-help.pd b/doc/help/cyclone/pow~-help.pd
new file mode 100644
index 0000000..4f299e3
--- /dev/null
+++ b/doc/help/cyclone/pow~-help.pd
@@ -0,0 +1,51 @@
+#N canvas 1115 248 768 482 10;
+#X declare -lib cyclone;
+#X text 24 -2 Take base to the exponent power using signals;
+#X obj 471 264 *~ 0.2;
+#X msg 471 143 -7 \, 1 1500 -1 1500 -7 300;
+#X obj 509 206 sig~ 2;
+#X obj 471 240 pow~;
+#X obj 47 94 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 47 355 dac~;
+#X obj 47 305 *~;
+#X obj 47 239 *~ 440;
+#X msg 47 125 -1 \, 1 3000;
+#X obj 47 276 cycle~;
+#X obj 47 196 pow~ 2;
+#X text 26 23 pow~ is useful for generating curves from line~. In the
+example below \, pow~ with an argument 2 (for 2 to the exponent specified
+by the input signal) is used to generate a pitch glissando.;
+#X text 101 193 optional argument determines the base of the power
+function. Default is 0;
+#X text 59 257 result goes from 220 to 880 Hz;
+#X text 119 126 pitch glissando;
+#X text 510 236 base can be a signal too;
+#X text 137 180 base in;
+#X text 320 89 amplitude envelope. 2 to the -7 doesn't completely shut
+off the signal...;
+#X text 57 180 exponent in;
+#X text 57 215 result out;
+#X obj 608 8 import cyclone;
+#X obj 481 319 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X text 69 95 click to hear something;
+#X obj 107 327 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 471 176 Line~ -7;
+#X obj 47 147 Line~ -1;
+#X connect 1 0 7 1;
+#X connect 1 0 22 0;
+#X connect 2 0 25 0;
+#X connect 3 0 4 1;
+#X connect 4 0 1 0;
+#X connect 5 0 9 0;
+#X connect 5 0 2 0;
+#X connect 7 0 6 0;
+#X connect 7 0 24 0;
+#X connect 8 0 10 0;
+#X connect 9 0 26 0;
+#X connect 10 0 7 0;
+#X connect 11 0 8 0;
+#X connect 25 0 4 0;
+#X connect 26 0 11 0;
diff --git a/doc/help/cyclone/rampsmooth~-help.pd b/doc/help/cyclone/rampsmooth~-help.pd
new file mode 100644
index 0000000..ae54800
--- /dev/null
+++ b/doc/help/cyclone/rampsmooth~-help.pd
@@ -0,0 +1,39 @@
+#N canvas 1475 367 502 431 10;
+#X declare -lib cyclone;
+#X text 15 35 smooth out an incoming signal via a ramp;
+#X msg 49 161 1;
+#X msg 18 161 0;
+#X msg 217 222 rampdown \$1;
+#X floatatom 217 203 0 0 0 0 - - -;
+#X msg 155 222 rampup \$1;
+#X floatatom 155 203 0 0 0 0 - - -;
+#X text 19 60 rampsmooth~ smooths an incoming signal across n samples.
+Each time an incoming value changes \, it begins a linear ramp of n
+samples to reach this value. Useful for envelope following and lowpass
+filtering. The number of samples is specified either as arguments or
+with the ramp \, rampup \, rampdown messages.;
+#X obj 32 222 sig~;
+#X floatatom 32 203 0 0 0 0 - - -;
+#X msg 93 222 ramp \$1;
+#X floatatom 93 203 0 0 0 0 - - -;
+#X text 181 246 args: <rampup> <rampdown>;
+#X obj 144 280 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 367 43 import cyclone;
+#X obj 32 246 rampsmooth~ 44100 44100;
+#X obj 32 294 Snapshot~ 100;
+#X obj 33 325 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 2.29181e-18 256;
+#X connect 1 0 9 0;
+#X connect 2 0 9 0;
+#X connect 3 0 15 0;
+#X connect 4 0 3 0;
+#X connect 5 0 15 0;
+#X connect 6 0 5 0;
+#X connect 8 0 15 0;
+#X connect 9 0 8 0;
+#X connect 10 0 15 0;
+#X connect 11 0 10 0;
+#X connect 15 0 13 0;
+#X connect 15 0 16 0;
+#X connect 16 0 17 0;
diff --git a/doc/help/cyclone/reson~-help.pd b/doc/help/cyclone/reson~-help.pd
new file mode 100644
index 0000000..112bfdf
--- /dev/null
+++ b/doc/help/cyclone/reson~-help.pd
@@ -0,0 +1,36 @@
+#N canvas 1309 248 577 450 10;
+#X declare -lib cyclone;
+#X text 15 35 Bandpass filter controllable by center frequency and
+Q;
+#X obj 32 382 dac~;
+#X obj 32 343 *~ 0.2;
+#X floatatom 160 294 0 0 0 0 - - -;
+#X msg 133 227 200 \, 10000 4000;
+#X obj 31 210 noise~;
+#X text 36 226 input signal;
+#X text 133 211 center freq;
+#X text 88 250 gain;
+#X text 172 325 optional arguments set values of gain \, center frequency
+\, and Q (default 0 \, 0 \, 0.01);
+#X text 88 182 list sets gain \, cf \, q (works unless there are any
+signal inputs for filter parameters);
+#X text 42 316 filtered output;
+#X text 15 62 reson~ implements the following filter equation: y[n]
+= gain * (x[n] - r * x[n-2]) + c1 * y[n-1] + c2 * y[n-2] \, where r
+\, c1 \, and c2 are parameters calculated from the input center frequency
+and Q. Q is the filter bandwidth divided by center frequency. Inputs
+can be floats or signals. The specification is similar to the nres
+unit generator in cmusic.;
+#X obj 374 38 import cyclone;
+#X obj 32 294 reson~ 1 200 23;
+#X obj 133 250 Line~ 200;
+#X floatatom 60 254 0 0 0 0 - - -;
+#X text 158 276 Q: Try range of 1-100;
+#X connect 2 0 1 0;
+#X connect 2 0 1 1;
+#X connect 3 0 14 3;
+#X connect 4 0 15 0;
+#X connect 5 0 14 0;
+#X connect 14 0 2 0;
+#X connect 15 0 14 2;
+#X connect 16 0 14 1;
diff --git a/doc/help/cyclone/sah~-help.pd b/doc/help/cyclone/sah~-help.pd
new file mode 100644
index 0000000..851960d
--- /dev/null
+++ b/doc/help/cyclone/sah~-help.pd
@@ -0,0 +1,40 @@
+#N canvas 1356 280 739 524 10;
+#X declare -lib cyclone;
+#X text 15 35 Sample-and-hold;
+#X obj 109 405 cycle~;
+#X obj 109 377 *~ 1000;
+#X obj 109 433 *~ 0.2;
+#X floatatom 109 208 0 0 0 0 - - -;
+#X obj 109 241 phasor~ 20;
+#X floatatom 323 206 0 0 0 0 - - -;
+#X floatatom 122 270 0 0 0 0 - - -;
+#X obj 109 468 dac~;
+#X obj 323 239 phasor~ 11.33;
+#X text 282 312 Optional argument sets trigger value for control input
+(default 0) \; you need a trigger above 0 to work with phasor~;
+#X text 13 171 You've heard it before: the classic arpeggiator \, made
+with two phasor~ objects;
+#X text 207 290 control signal;
+#X text 29 294 input signal;
+#X text 161 377 sah~ output used as the frequency of an oscillator
+;
+#X text 161 271 set trigger;
+#X obj 436 104 import cyclone;
+#X obj 109 310 sah~ 0.01;
+#X text 16 60 The sah~ object accepts two signals. The left signal
+is the "input" and the right signal is the "control." When the control
+makes a transition from being at or below the trigger value to being
+above the trigger value \, the input is sampled and its current value
+is output until another control transition occurs and the input is
+sampled again. The default threshold value is 0 \, but can be specified
+via a float in the left inlet or as an argument to sah~.;
+#X connect 1 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 8 0;
+#X connect 3 0 8 1;
+#X connect 4 0 5 0;
+#X connect 5 0 17 0;
+#X connect 6 0 9 0;
+#X connect 7 0 17 0;
+#X connect 9 0 17 1;
+#X connect 17 0 2 0;
diff --git a/doc/help/cyclone/sampstoms~-help.pd b/doc/help/cyclone/sampstoms~-help.pd
new file mode 100644
index 0000000..79313ed
--- /dev/null
+++ b/doc/help/cyclone/sampstoms~-help.pd
@@ -0,0 +1,28 @@
+#N canvas 1420 346 579 354 10;
+#X declare -lib cyclone;
+#X text 16 15 Convert number of samples (at the current sampling rate)
+to milliseconds;
+#X msg 263 127 0 \, 44100 3000;
+#X floatatom 263 248 0 0 0 0 - - -;
+#X obj 263 187 sampstoms~;
+#X floatatom 79 171 0 0 0 0 - - -;
+#X obj 25 139 sampstoms~;
+#X floatatom 25 116 0 0 0 0 - - -;
+#X text 74 118 number of samples in;
+#X text 90 155 number of milliseconds out;
+#X text 17 44 Many signal objects accepts arguments or inputs in milliseconds
+but sometimes you want to make calculations in samples. sampstoms~
+can perform the conversion.;
+#X text 272 208 milliseconds out (as a signal);
+#X text 273 171 number of samples in (as a signal);
+#X obj 263 226 Snapshot~ 100;
+#X obj 403 30 import cyclone;
+#X obj 263 146 Line~;
+#X text 18 93 Use as a calculator or for float parameters;
+#X text 247 110 or convert signal values;
+#X connect 1 0 14 0;
+#X connect 3 0 12 0;
+#X connect 5 1 4 0;
+#X connect 6 0 5 0;
+#X connect 12 0 2 0;
+#X connect 14 0 3 0;
diff --git a/doc/help/cyclone/sinh~-help.pd b/doc/help/cyclone/sinh~-help.pd
new file mode 100644
index 0000000..5107826
--- /dev/null
+++ b/doc/help/cyclone/sinh~-help.pd
@@ -0,0 +1,29 @@
+#N canvas 1340 279 613 343 10;
+#X declare -lib cyclone;
+#X text 268 91 this is probably only useful for mathematical calculations
+;
+#X obj 18 78 cycle~ 2;
+#X msg 235 149 range -12 12;
+#X obj 150 110 -~ 3.14159;
+#X text 15 35 Hyperbolic sine function (sinh(x)) for signals;
+#X obj 150 87 *~ 6.28319;
+#X obj 150 65 phasor~ 2;
+#X obj 18 109 *~ 3.14159;
+#X obj 334 36 import cyclone;
+#X obj 158 175 Scope~ 130 130 256 3 128 -12 12 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 18 175 Scope~ 130 130 256 3 128 -12 12 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 236 123 loadbang;
+#X obj 149 140 sinh~;
+#X obj 18 140 sinh~;
+#X connect 1 0 7 0;
+#X connect 2 0 9 0;
+#X connect 2 0 10 0;
+#X connect 3 0 12 0;
+#X connect 5 0 3 0;
+#X connect 6 0 5 0;
+#X connect 7 0 13 0;
+#X connect 11 0 2 0;
+#X connect 12 0 9 0;
+#X connect 13 0 10 0;
diff --git a/doc/help/cyclone/sinx~-help.pd b/doc/help/cyclone/sinx~-help.pd
new file mode 100644
index 0000000..3e15e33
--- /dev/null
+++ b/doc/help/cyclone/sinx~-help.pd
@@ -0,0 +1,19 @@
+#N canvas 1242 323 510 310 10;
+#X declare -lib cyclone;
+#X msg 124 135 range -1 1;
+#X obj 22 89 *~ 6.28319;
+#X obj 22 64 phasor~ 2;
+#X text 15 35 sin(x) for signals;
+#X text 101 65 this is a real sine function whose input expects values
+between 0 and 2pi (similar to cosx~ but unlike cos~ which is designed
+to work with phasor~'s output from 0 to 1);
+#X obj 324 43 import cyclone;
+#X obj 22 161 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 124 115 loadbang;
+#X obj 22 121 sinx~;
+#X connect 0 0 6 0;
+#X connect 1 0 8 0;
+#X connect 2 0 1 0;
+#X connect 7 0 0 0;
+#X connect 8 0 6 0;
diff --git a/doc/help/cyclone/slide~-help.pd b/doc/help/cyclone/slide~-help.pd
new file mode 100644
index 0000000..51fe81c
--- /dev/null
+++ b/doc/help/cyclone/slide~-help.pd
@@ -0,0 +1,32 @@
+#N canvas 1447 355 468 384 10;
+#X declare -lib cyclone;
+#X text 15 35 Smooth-out changes in signal values;
+#X text 174 200 args: <slideup> <slidedown>;
+#X floatatom 155 156 0 0 0 0 - - -;
+#X msg 69 130 1;
+#X msg 31 129 0;
+#X text 154 136 slide down;
+#X floatatom 96 156 0 0 0 0 - - -;
+#X text 16 61 Slide filters an input signal logarithmically between
+changes in signal value. The formula is y(n) = y(n-1) + ((x(n) - y(n-1))/slide).
+It's particularly useful for envelope following and lowpass filtering.
+;
+#X obj 37 174 sig~;
+#X floatatom 37 155 0 0 0 0 - - -;
+#X text 96 136 slide up;
+#X obj 330 35 import cyclone;
+#X obj 227 239 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 37 237 Snapshot~ 100;
+#X obj 38 262 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
+-262144 -1 -1 0.999851 256;
+#X obj 37 198 slide~ 5000 5000;
+#X connect 2 0 15 2;
+#X connect 3 0 9 0;
+#X connect 4 0 9 0;
+#X connect 6 0 15 1;
+#X connect 8 0 15 0;
+#X connect 9 0 8 0;
+#X connect 13 0 14 0;
+#X connect 15 0 12 0;
+#X connect 15 0 13 0;
diff --git a/doc/help/cyclone/spike~-help.pd b/doc/help/cyclone/spike~-help.pd
new file mode 100644
index 0000000..9f1fb6b
--- /dev/null
+++ b/doc/help/cyclone/spike~-help.pd
@@ -0,0 +1,28 @@
+#N canvas 1343 463 511 227 10;
+#X declare -lib cyclone;
+#X text 15 35 Report intervals of zero to non-zero transitions;
+#X obj 64 162 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 40 162 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 40 138 edge~;
+#X obj 86 181 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X floatatom 215 101 0 0 0 0 - - -;
+#X floatatom 119 62 0 0 0 0 - - -;
+#X floatatom 119 180 0 0 0 0 - - -;
+#X obj 119 90 train~ 85.5;
+#X text 168 58 adjust interval;
+#X text 253 100 set refractory period;
+#X text 130 156 interval output;
+#X text 57 120 signal input;
+#X obj 359 38 import cyclone;
+#X obj 119 137 spike~;
+#X connect 3 0 2 0;
+#X connect 3 1 1 0;
+#X connect 5 0 14 1;
+#X connect 6 0 8 0;
+#X connect 8 0 3 0;
+#X connect 8 0 14 0;
+#X connect 14 0 4 0;
+#X connect 14 0 7 0;
diff --git a/doc/help/cyclone/svf~-help.pd b/doc/help/cyclone/svf~-help.pd
new file mode 100644
index 0000000..5c298f9
--- /dev/null
+++ b/doc/help/cyclone/svf~-help.pd
@@ -0,0 +1,114 @@
+#N canvas 1281 327 924 425 10;
+#X declare -lib cyclone;
+#X obj 407 306 dac~;
+#N canvas 324 234 556 460 svf_part2 0;
+#X text -1 306 onepole~.help contains yet another example.;
+#X text -1 382 svf~ accepts arguments or max messages to change the
+frequency input mode. it is generally recommended to set the mode with
+an argument and leave it constant \, to avoid confusion.;
+#X text -1 244 try sweeping the cutoff frequency in linear mode \,
+then in radians mode \, to appreciate the difference. a similar principle
+operates in the amplitude domain \, where exponential audio faders
+are used to match our logarithmic perception of loudness.;
+#X text -51 134 linear;
+#X text -27 81 Hz;
+#X text -1 177 in this mode \, input values from (0 -> 1) are interpreted
+as radians \, producing a quarter-cycle sinusoidal mapping to cutoff
+frequencies. this conforms the frequency mapping to a response that
+is closer to our logarithmic perception of pitch.;
+#X text -1 125 this mode is essentially the same \, but with a normalized
+input range. linear input values from (0 -> 1) are mapped to cutoff
+frequencies in the effective range \, (0 -> fs/4).;
+#X text -1 72 this is the default mode. input values set the cutoff
+frequency directly. therefore \, the input range is the same as the
+cutoff frequency (0 -> fs/4) \, and response is linear.;
+#X text -1 9 svf~ has three different modes for mapping input values
+onto cutoff frequency. these are mainly for convenience \, but they
+may also improve efficiency slightly.;
+#X text -1 329 since svf~ only samples its control inputs once per
+vector \, it is more efficient to use the radians mode than to do logarithmic
+scaling outside the object at audio rate.;
+#X text -59 191 radians;
+#X restore 617 344 pd svf_part2;
+#X text 16 12 state-variable filter;
+#X text 8 273 special thanks to 2up;
+#X msg 379 81 0.5;
+#X text 545 118 frequency range is 0 - f(s)/4;
+#X obj 409 151 noise~;
+#X text 8 158 Floats or signals can modify these in real-time. The
+value of these parameters is only sampled once per signal vector.;
+#X text 8 138 Arguments are cutoff frequency (Hz) \, and resonance
+(0-1).;
+#X text 8 93 One of its advantages is that the it produces low-pass
+\, high-pass \, band-pass \, and band-reject (notch) output simultaneously
+- so all four are available in parallel.;
+#X text 8 65 svf~ implements Chamberlin's state-variable filter algorithm.
+;
+#X msg 422 86 37;
+#X text 553 164 left: (signal) filter input;
+#X text 527 254 outputs: lowpass \, highpass \, bandpass \, notch;
+#X text 553 192 right: (signal/float) resonance (0 - 1);
+#X text 553 178 middle: (signal/float) cutoff frequency;
+#X obj 346 25 loadbang;
+#X obj 458 106 * 11025;
+#X obj 458 85 / 512;
+#X floatatom 458 127 0 0 0 0 - - -;
+#N canvas 40 55 716 389 svf_algorithm 0;
+#X text 242 290 bandstop = lowpass + hipass \;;
+#X text 59 179 this is the dsp loop. note how the calculations work
+together to produce all four outputs simultaneously.;
+#X text 62 123 first \, convert hz to radians (this step is not necessary
+in radians input mode);
+#X text 44 82 this is the basic algorithm inside svf~:;
+#X text 237 137 cf_radians = sin(2. * PI * cf_hz * x->ifs) \;;
+#X text 242 258 bandpass = bandpass + cf_radians * hipass \;;
+#X text 242 242 hipass = in_samp - lowpass - q * bandpass \;;
+#X text 242 226 lowpass = lowpass + (cf_radians * bandpass) \;;
+#X text 242 274 bandpass = bandpass - (bandpass ^ 3.) * 0.0001 \;;
+#X restore 499 344 pd svf_algorithm;
+#X text 8 240 (float) resonance (0-1);
+#X text 8 226 (float) cutoff frequency (Hz);
+#X text 8 212 arguments (optional):;
+#X obj 526 201 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 493 201 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 460 201 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X obj 427 201 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
+1;
+#X obj 508 219 *~ 0;
+#X obj 475 219 *~ 0;
+#X obj 442 219 *~ 0;
+#X obj 409 219 *~ 0;
+#X floatatom 507 151 0 0 0 0 - - -;
+#X obj 498 12 import cyclone;
+#X obj 409 175 svf~ 797 0.5;
+#X obj 409 269 *~ 0.7;
+#X obj 464 54 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 3700 1;
+#X connect 4 0 32 0;
+#X connect 6 0 34 0;
+#X connect 11 0 36 0;
+#X connect 16 0 4 0;
+#X connect 16 0 11 0;
+#X connect 16 0 27 0;
+#X connect 17 0 19 0;
+#X connect 18 0 17 0;
+#X connect 19 0 34 1;
+#X connect 24 0 28 1;
+#X connect 25 0 29 1;
+#X connect 26 0 30 1;
+#X connect 27 0 31 1;
+#X connect 28 0 35 0;
+#X connect 29 0 35 0;
+#X connect 30 0 35 0;
+#X connect 31 0 35 0;
+#X connect 32 0 34 2;
+#X connect 34 0 31 0;
+#X connect 34 1 30 0;
+#X connect 34 2 29 0;
+#X connect 34 3 28 0;
+#X connect 35 0 0 0;
+#X connect 35 0 0 1;
+#X connect 36 0 18 0;
diff --git a/doc/help/cyclone/tanh~-help.pd b/doc/help/cyclone/tanh~-help.pd
new file mode 100644
index 0000000..695d98d
--- /dev/null
+++ b/doc/help/cyclone/tanh~-help.pd
@@ -0,0 +1,46 @@
+#N canvas 1443 211 694 400 10;
+#X declare -lib cyclone;
+#X obj 510 185 +~ 11;
+#X obj 505 158 *~ 10;
+#X obj 505 134 cycle~ 0.5;
+#X obj 425 134 cycle~ 110;
+#X floatatom 39 92 0 0 0 0 - - -;
+#X obj 18 115 *~ 1;
+#X text 22 338 outputs signal values always between -1 and 1;
+#X obj 439 205 *~ 1;
+#X obj 439 273 *~ 0.1;
+#X obj 18 71 cycle~ 2;
+#X obj 150 110 -~ 3.14159;
+#X obj 150 87 *~ 6.28319;
+#X obj 150 65 phasor~ 2;
+#X obj 439 310 dac~;
+#X text 477 242 outputs soft clipped signal;
+#X text 15 11 Hyperbolic tangent function (tanh(x)) for signals;
+#X text 11 33 turn a sine wave into a square wave by cranking up the
+volume!;
+#X text 327 95 can be used to simulate analog distortion \, and is
+much "smoother" than using clip~;
+#X obj 437 13 import cyclone;
+#X obj 439 238 tanh~;
+#X obj 18 175 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 154 175 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 150 141 tanh~;
+#X obj 18 139 tanh~;
+#X connect 0 0 7 1;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 3 0 7 0;
+#X connect 4 0 5 1;
+#X connect 5 0 23 0;
+#X connect 7 0 19 0;
+#X connect 8 0 13 0;
+#X connect 8 0 13 1;
+#X connect 9 0 5 0;
+#X connect 10 0 22 0;
+#X connect 11 0 10 0;
+#X connect 12 0 11 0;
+#X connect 19 0 8 0;
+#X connect 22 0 21 0;
+#X connect 23 0 20 0;
diff --git a/doc/help/cyclone/tanx~-help.pd b/doc/help/cyclone/tanx~-help.pd
new file mode 100644
index 0000000..1f6d0de
--- /dev/null
+++ b/doc/help/cyclone/tanx~-help.pd
@@ -0,0 +1,18 @@
+#N canvas 1260 275 593 376 10;
+#X declare -lib cyclone;
+#X msg 124 135 range -10 10;
+#X obj 22 89 *~ 6.28319;
+#X obj 22 64 phasor~ 2;
+#X text 15 35 tan(x) for signals;
+#X text 101 65 this is a real tangent function whose input expects
+values between 0 and 2pi (similar to cosx~ and sinx~);
+#X text 15 305 output values are asymptotic to inf/-inf when input
+values approach -pi/2 and pi/2;
+#X obj 22 161 Scope~ 130 130 256 3 128 -10 10 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 477 50 import cyclone;
+#X obj 22 122 tanx~;
+#X connect 0 0 6 0;
+#X connect 1 0 8 0;
+#X connect 2 0 1 0;
+#X connect 8 0 6 0;
diff --git a/doc/help/cyclone/train~-help.pd b/doc/help/cyclone/train~-help.pd
new file mode 100644
index 0000000..4b6bb88
--- /dev/null
+++ b/doc/help/cyclone/train~-help.pd
@@ -0,0 +1,44 @@
+#N canvas 196 287 680 395 10;
+#X declare -lib cyclone;
+#X text 14 3 Pulse-train generator and metronome;
+#X floatatom 304 203 0 0 0 0 - - -;
+#X obj 26 318 *~ 0.2;
+#X obj 26 356 dac~;
+#X obj 26 296 cycle~;
+#X obj 26 271 *~ 1000;
+#X msg 84 143 200 \, 100 5000 200 5000;
+#X obj 26 217 noise~;
+#X obj 26 247 sah~;
+#X obj 231 243 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X floatatom 218 163 0 0 0 0 - - -;
+#X text 256 243 bang output when transition from 0 to 1 occurs;
+#X text 20 27 train~ generates a pulse signal whose period is specifiable
+in terms of milliseconds (see <~ for a method of making a pulse wave
+at a specified frequency). It also sends out a bang when going from
+0 to 1 \, so it can be used as a metronome with a floating-point interval.
+The signal output can be used as a control input for sah~ as shown
+in the example below \, or at very small intervals \, it is audible.
+;
+#X text 242 162 signal/float sets pulse width (0.01 to .99);
+#X text 239 138 signal/float sets pulse period (ms);
+#X text 182 275 Optional arguments set initial interval (default 1000)
+\, width (default .5) \, and phase (default 0).;
+#X text 335 201 signal/float sets phase of 0-1 transition within pulse
+period (0 to 1);
+#X obj 449 55 import cyclone;
+#X text 83 128 modulate interval;
+#X obj 84 164 Line~ 200;
+#X obj 84 220 train~ 200 0.75;
+#X connect 1 0 20 2;
+#X connect 2 0 3 0;
+#X connect 2 0 3 1;
+#X connect 4 0 2 0;
+#X connect 5 0 4 0;
+#X connect 6 0 19 0;
+#X connect 7 0 8 0;
+#X connect 8 0 5 0;
+#X connect 10 0 20 1;
+#X connect 19 0 20 0;
+#X connect 20 0 8 1;
+#X connect 20 1 9 0;
diff --git a/doc/help/cyclone/trapezoid~-help.pd b/doc/help/cyclone/trapezoid~-help.pd
new file mode 100644
index 0000000..13edb66
--- /dev/null
+++ b/doc/help/cyclone/trapezoid~-help.pd
@@ -0,0 +1,34 @@
+#N canvas 1259 367 519 388 10;
+#X declare -lib cyclone;
+#X text 29 14 a trapezoidal wavetable;
+#X text 278 153 args: <up> <down>;
+#X floatatom 96 102 0 0 0 0 - - -;
+#X msg 96 123 hi \$1;
+#X floatatom 34 102 0 0 0 0 - - -;
+#X msg 34 123 lo \$1;
+#X text 262 107 down;
+#X floatatom 139 105 0 0 0 0 - - -;
+#X text 36 40 trapezoid~ is a trapezoidal wavetable with signal inputs
+to change ramp up/down phase position. The default lo/hi points are
+0 and 1 \, but may be changed using the lo/hi messages.;
+#X text 207 107 up;
+#X obj 148 228 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X obj 257 20 import cyclone;
+#X obj 174 181 Snapshot~ 100;
+#X floatatom 175 206 5 0 0 0 - - -;
+#X obj 149 150 trapezoid~ 0.1 0.9;
+#X obj 263 126 sig~ 0.9;
+#X obj 205 127 sig~ 0.1;
+#X obj 139 126 phasor~ 2;
+#X connect 2 0 3 0;
+#X connect 3 0 14 0;
+#X connect 4 0 5 0;
+#X connect 5 0 14 0;
+#X connect 7 0 17 0;
+#X connect 12 0 13 0;
+#X connect 14 0 10 0;
+#X connect 14 0 12 0;
+#X connect 15 0 14 2;
+#X connect 16 0 14 1;
+#X connect 17 0 14 0;
diff --git a/doc/help/cyclone/vectral~-help.pd b/doc/help/cyclone/vectral~-help.pd
new file mode 100644
index 0000000..64c5354
--- /dev/null
+++ b/doc/help/cyclone/vectral~-help.pd
@@ -0,0 +1,81 @@
+#N canvas 1476 327 631 562 10;
+#X declare -lib cyclone;
+#X text 15 35 a vector based envelope follower.;
+#X msg 243 350 2;
+#X obj 312 332 loadbang;
+#X msg 165 341 128;
+#X msg 339 369 range 0 10;
+#X obj 35 305 sqrt~;
+#X text 195 419 more information about the different modes may be gleaned
+from the rampsmooth~ \, deltaclip~ \, and slide~ helpfiles simply think
+of the changes happening between frames rather than between samples
+;
+#X text 298 235 - deltaclip <max> <min> \; limits the change in samples
+to be in the given range;
+#X floatatom 257 116 0 0 0 0 - - -;
+#X floatatom 210 116 0 0 0 0 - - -;
+#X obj 163 243 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X floatatom 257 227 0 0 0 0 - - -;
+#X floatatom 210 227 0 0 0 0 - - -;
+#X obj 163 260 pack deltaclip 1 -1;
+#X obj 162 188 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X floatatom 256 172 0 0 0 0 - - -;
+#X floatatom 209 172 0 0 0 0 - - -;
+#X obj 162 205 pack slide 1 1;
+#X text 298 179 - slide <up> <down> \; logarithmic movement to new
+value;
+#X obj 163 132 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 163 149 pack rampsmooth 1 1;
+#X obj 36 160 adc~;
+#X obj 36 234 +~;
+#X obj 69 209 *~;
+#X obj 36 209 *~;
+#X obj 36 184 fft~ 256 256 0;
+#X text 17 60 vectral~ is useful for filtering frame based signal data
+such as the output of fft~. It may operate in one of the following
+modes:;
+#X text 298 123 - rampsmooth <up> <down> \; linear ramp across up/down
+frames to the new value;
+#X text 125 282 argument is vector size(default 512). whichever mode's
+message is received last is the current mode of operation;
+#X obj 308 32 import cyclone;
+#X obj 35 284 vectral~ 256;
+#X obj 39 396 Scope~ 130 130 256 3 128 -1 1 0 0 0 0 102 255 51 135
+135 135 0;
+#X connect 1 0 31 0;
+#X connect 2 0 3 0;
+#X connect 2 0 1 0;
+#X connect 2 0 4 0;
+#X connect 3 0 31 1;
+#X connect 4 0 31 0;
+#X connect 5 0 31 0;
+#X connect 8 0 19 0;
+#X connect 8 0 20 2;
+#X connect 9 0 19 0;
+#X connect 9 0 20 1;
+#X connect 10 0 13 0;
+#X connect 11 0 10 0;
+#X connect 11 0 13 2;
+#X connect 12 0 10 0;
+#X connect 12 0 13 1;
+#X connect 13 0 30 0;
+#X connect 14 0 17 0;
+#X connect 15 0 14 0;
+#X connect 15 0 17 2;
+#X connect 16 0 14 0;
+#X connect 16 0 17 1;
+#X connect 17 0 30 0;
+#X connect 19 0 20 0;
+#X connect 20 0 30 0;
+#X connect 21 0 25 0;
+#X connect 22 0 30 2;
+#X connect 23 0 22 1;
+#X connect 24 0 22 0;
+#X connect 25 0 24 0;
+#X connect 25 0 24 1;
+#X connect 25 1 23 0;
+#X connect 25 1 23 1;
+#X connect 30 0 5 0;