aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Christoph Steiner <eighthave@users.sourceforge.net>2007-04-10 05:38:15 +0000
committerHans-Christoph Steiner <eighthave@users.sourceforge.net>2007-04-10 05:38:15 +0000
commit3739ef59d6ffde0f8833626b8fee143a26470e9f (patch)
tree4a3e9740036c841cc4836c75b5e9882fcdb743ce
parentfa15d34df1b8e89fa4847912684ec8400ed0a812 (diff)
lots of curves inspired by Golan Levin's processing shapers
svn path=/trunk/externals/mapping/; revision=7553
-rw-r--r--breakpoint.pd73
-rw-r--r--circular_sigmoid.pd20
-rw-r--r--elliptic_sigmoid.pd (renamed from double_linear.pd)20
-rw-r--r--exponential_curve.pd67
-rw-r--r--exponential_sigmoid.pd27
-rw-r--r--help/breakpoint-help.pd249
-rw-r--r--help/breakpoint_smooth-help.pd201
-rw-r--r--help/circular_seat-help.pd5
-rw-r--r--help/circular_sigmoid-help.pd121
-rw-r--r--help/elliptic_sigmoid-help.pd131
-rw-r--r--help/exponential_curve-help.pd121
-rw-r--r--help/exponential_seat-help.pd3
-rw-r--r--help/exponential_sigmoid-help.pd (renamed from help/double_linear-help.pd)49
-rw-r--r--help/logistic_sigmoid-help.pd221
-rw-r--r--logistic_sigmoid.pd48
15 files changed, 1100 insertions, 256 deletions
diff --git a/breakpoint.pd b/breakpoint.pd
index 28d5846..e22d333 100644
--- a/breakpoint.pd
+++ b/breakpoint.pd
@@ -1,47 +1,30 @@
-#N canvas 0 0 433 427 10;
-#X obj 42 29 inlet;
-#X obj 101 28 inlet;
-#X obj 250 26 inlet;
-#X obj 42 81 moses \$1;
-#X obj 42 105 / \$1;
-#X obj 93 104 - \$1;
-#X obj 157 86 t b f;
-#X obj 174 63 loadbang;
-#X obj 93 161 / 1;
-#X msg 157 108 1;
-#X obj 157 132 - \$1;
-#X obj 42 245 f;
-#X obj 42 208 * \$2;
-#X obj 93 207 + \$2;
-#X obj 250 93 t b f;
-#X msg 250 115 1;
-#X obj 250 139 - \$2;
-#X obj 93 183 *;
-#X obj 42 276 outlet;
-#X connect 0 0 3 0;
-#X connect 1 0 3 1;
-#X connect 1 0 4 1;
-#X connect 1 0 5 1;
+#N canvas 463 193 492 454 10;
+#X obj 62 10 inlet;
+#X obj 327 9 inlet;
+#X obj 106 405 outlet;
+#X obj 240 10 loadbang;
+#X obj 167 9 inlet;
+#X obj 167 50 purepd/float_argument \$1;
+#X obj 327 50 purepd/float_argument \$2;
+#X obj 74 113 moses;
+#X obj 167 84 moses 1;
+#X obj 167 105 + 1e-06;
+#X text 217 91 prevent divide by 0;
+#X obj 232 279 expr $f3 + ((1-$f3)/(1-$f2))*($f1-$f2);
+#X obj 61 280 expr ($f3/$f2) * $f1;
+#X connect 0 0 7 0;
#X connect 1 0 6 0;
-#X connect 2 0 14 0;
-#X connect 2 0 13 1;
-#X connect 2 0 12 1;
-#X connect 3 0 4 0;
-#X connect 3 1 5 0;
-#X connect 4 0 12 0;
+#X connect 3 0 5 0;
+#X connect 3 0 6 0;
+#X connect 4 0 5 0;
+#X connect 5 0 7 1;
#X connect 5 0 8 0;
-#X connect 6 0 9 0;
-#X connect 6 1 10 1;
-#X connect 7 0 9 0;
-#X connect 7 0 15 0;
-#X connect 8 0 17 0;
-#X connect 9 0 10 0;
-#X connect 10 0 8 1;
-#X connect 11 0 18 0;
-#X connect 12 0 11 0;
-#X connect 13 0 11 0;
-#X connect 14 0 15 0;
-#X connect 14 1 16 1;
-#X connect 15 0 16 0;
-#X connect 16 0 17 1;
-#X connect 17 0 13 0;
+#X connect 6 0 11 2;
+#X connect 6 0 12 2;
+#X connect 7 0 12 0;
+#X connect 7 1 11 0;
+#X connect 8 0 9 0;
+#X connect 9 0 12 1;
+#X connect 9 0 11 1;
+#X connect 11 0 2 0;
+#X connect 12 0 2 0;
diff --git a/circular_sigmoid.pd b/circular_sigmoid.pd
new file mode 100644
index 0000000..aa2afc9
--- /dev/null
+++ b/circular_sigmoid.pd
@@ -0,0 +1,20 @@
+#N canvas 393 34 599 452 10;
+#X obj 62 10 inlet;
+#X obj 195 405 outlet;
+#X obj 240 10 loadbang;
+#X obj 167 9 inlet;
+#X obj 167 50 purepd/float_argument \$1;
+#X obj 131 114 moses;
+#X obj 14 208 expr $f2 - sqrt($f2*$f2 - $f1*$f1);
+#X obj 235 207 expr $f2 + sqrt(pow(1 - $f2 \, 2) - pow($f1 - 1 \, 2))
+;
+#X connect 0 0 5 0;
+#X connect 2 0 4 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 1;
+#X connect 4 0 6 1;
+#X connect 4 0 7 1;
+#X connect 5 0 6 0;
+#X connect 5 1 7 0;
+#X connect 6 0 1 0;
+#X connect 7 0 1 0;
diff --git a/double_linear.pd b/elliptic_sigmoid.pd
index 2ddcddf..afd8093 100644
--- a/double_linear.pd
+++ b/elliptic_sigmoid.pd
@@ -1,4 +1,4 @@
-#N canvas 405 334 488 450 10;
+#N canvas 150 221 565 447 10;
#X obj 62 10 inlet;
#X obj 327 9 inlet;
#X obj 106 405 outlet;
@@ -7,11 +7,13 @@
#X obj 167 50 purepd/float_argument \$1;
#X obj 327 50 purepd/float_argument \$2;
#X obj 74 113 moses;
-#X obj 114 220 moses 1;
-#X obj 114 241 + 1e-06;
-#X text 164 227 prevent divide by 0;
-#X obj 232 279 expr $f3 + ((1-$f3)/(1-$f2))*($f1-$f2);
-#X obj 61 280 expr ($f3/$f2) * $f1;
+#X obj 167 97 moses 1;
+#X obj 167 118 + 1e-06;
+#X text 217 104 prevent divide by 0;
+#X obj 7 199 expr $f3 * (1 - (sqrt(pow($f2 \, 2) - pow($f1 \, 2)) /
+$f2));
+#X obj 152 275 expr $f3 + ( ((1 - $f3)/(1 - $f2)) * sqrt(pow(1 - $f2
+\, 2) - pow($f1 - 1 \, 2)) );
#X connect 0 0 7 0;
#X connect 1 0 6 0;
#X connect 3 0 5 0;
@@ -19,12 +21,12 @@
#X connect 4 0 5 0;
#X connect 5 0 7 1;
#X connect 5 0 8 0;
-#X connect 5 0 11 1;
#X connect 6 0 11 2;
#X connect 6 0 12 2;
-#X connect 7 0 12 0;
-#X connect 7 1 11 0;
+#X connect 7 0 11 0;
+#X connect 7 1 12 0;
#X connect 8 0 9 0;
+#X connect 9 0 11 1;
#X connect 9 0 12 1;
#X connect 11 0 2 0;
#X connect 12 0 2 0;
diff --git a/exponential_curve.pd b/exponential_curve.pd
new file mode 100644
index 0000000..792848b
--- /dev/null
+++ b/exponential_curve.pd
@@ -0,0 +1,67 @@
+#N canvas 134 134 428 451 10;
+#X obj 26 4 inlet;
+#X obj 150 396 outlet;
+#X obj 220 10 loadbang;
+#X obj 147 9 inlet;
+#X obj 147 50 purepd/float_argument \$1;
+#X obj 147 96 moses 0.5;
+#X obj 147 292 * 2;
+#X obj 132 313 pow;
+#X obj 263 177 - 0.5;
+#X obj 263 201 * 2;
+#X obj 250 313 pow;
+#X obj 147 74 moses 1;
+#X obj 264 248 -;
+#X msg 263 226 1 \$1;
+#X obj 265 291 /;
+#X msg 265 271 1 \$1;
+#N canvas 0 22 433 306 pick 0;
+#X obj 306 39 inlet;
+#X obj 306 67 bang;
+#X obj 226 38 inlet;
+#X obj 226 66 bang;
+#X msg 213 89 1;
+#X msg 242 89 0;
+#X msg 293 90 0;
+#X msg 322 90 1;
+#X obj 20 39 inlet;
+#X obj 249 196 spigot;
+#X obj 110 194 spigot;
+#X obj 109 249 outlet;
+#X obj 248 245 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 6 0;
+#X connect 1 0 7 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 10 1;
+#X connect 5 0 9 1;
+#X connect 6 0 10 1;
+#X connect 7 0 9 1;
+#X connect 8 0 10 0;
+#X connect 8 0 9 0;
+#X connect 9 0 12 0;
+#X connect 10 0 11 0;
+#X restore 26 158 pd pick algorithm;
+#X text 196 75 constrain to <1;
+#X connect 0 0 16 0;
+#X connect 2 0 4 0;
+#X connect 3 0 4 0;
+#X connect 4 0 11 0;
+#X connect 5 0 6 0;
+#X connect 5 0 16 1;
+#X connect 5 1 8 0;
+#X connect 5 1 16 2;
+#X connect 6 0 7 1;
+#X connect 7 0 1 0;
+#X connect 8 0 9 0;
+#X connect 9 0 13 0;
+#X connect 10 0 1 0;
+#X connect 11 0 5 0;
+#X connect 12 0 15 0;
+#X connect 13 0 12 0;
+#X connect 14 0 10 1;
+#X connect 15 0 14 0;
+#X connect 16 0 7 0;
+#X connect 16 1 10 0;
diff --git a/exponential_sigmoid.pd b/exponential_sigmoid.pd
new file mode 100644
index 0000000..962c2b0
--- /dev/null
+++ b/exponential_sigmoid.pd
@@ -0,0 +1,27 @@
+#N canvas 277 167 454 439 10;
+#X obj 62 10 inlet;
+#X obj 195 405 outlet;
+#X obj 240 10 loadbang;
+#X obj 167 9 inlet;
+#X obj 167 50 purepd/float_argument \$1;
+#X obj 62 84 moses 0.5;
+#X obj 14 208 expr pow(2*$f1 \, 1/$f2)/2;
+#X obj 200 206 expr 1 - (pow(2*(1-$f1) \, 1/$f2)/2);
+#X obj 167 97 bang;
+#X obj 167 77 moses 1e-06;
+#X msg 167 118 1e-06;
+#X text 272 98 constrain to >0;
+#X connect 0 0 5 0;
+#X connect 2 0 4 0;
+#X connect 3 0 4 0;
+#X connect 4 0 9 0;
+#X connect 5 0 6 0;
+#X connect 5 1 7 0;
+#X connect 6 0 1 0;
+#X connect 7 0 1 0;
+#X connect 8 0 10 0;
+#X connect 9 0 8 0;
+#X connect 9 1 7 1;
+#X connect 9 1 6 1;
+#X connect 10 0 6 1;
+#X connect 10 0 7 1;
diff --git a/help/breakpoint-help.pd b/help/breakpoint-help.pd
index 8d48253..1e67b7c 100644
--- a/help/breakpoint-help.pd
+++ b/help/breakpoint-help.pd
@@ -1,65 +1,131 @@
-#N canvas 584 82 885 571 10;
-#X obj 20 38 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
+#N canvas 377 72 515 428 10;
+#X obj 384 32 import mapping ggee;
+#X obj 5 2 cnv 15 500 20 empty empty breakpoint 2 11 1 18 -233017 -66577
+0;
+#X msg 471 2 pddp;
+#X text 304 393 released under the GNU GPL;
+#X text 82 358 For more info:;
+#X floatatom 25 127 8 0 0 0 - - -;
+#X floatatom 25 288 8 0 0 0 - - -;
+#X obj 28 305 hsl 200 20 0 1 0 0 empty empty curved_output 22 11 1
+12 -262144 -1 -1 0 1;
+#X obj 28 101 hsl 200 20 0 1 0 0 empty empty raw_input 22 11 1 12 -261681
-1 -1 0 1;
-#X obj 20 213 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X floatatom 91 156 5 0 0 0 - - -;
-#X floatatom 162 157 5 0 0 0 - - -;
-#X floatatom 144 247 5 0 1 0 - - -;
-#X obj 144 271 t b f;
-#X floatatom 236 247 5 0 1 0 - - -;
-#X obj 236 271 t b f;
-#X obj 82 271 loadbang;
-#X text 111 541 XY relation of the breakpoint object;
-#N canvas 0 0 450 300 float 0;
-#X obj 71 23 inlet;
-#X obj 48 191 outlet;
-#X obj 150 22 inlet;
-#X obj 71 93 list prepend;
-#X obj 71 118 list;
-#X obj 48 141 list;
-#X obj 48 166 list trim;
-#X obj 150 45 t b b;
-#X msg 150 70 list;
-#X connect 0 0 3 0;
-#X connect 2 0 7 0;
+#N canvas 273 69 474 407 draw_array 0;
+#X msg 54 82 bang;
+#X obj 54 133 until;
+#X text 85 82 start;
+#X obj 54 155 f;
+#X obj 83 155 + 1;
+#X obj 54 43 loadbang;
+#X obj 54 210 trigger float float;
+#X obj 127 157 select 0;
+#X obj 66 343 tabwrite \$0-curve;
+#X obj 139 53 trigger bang float;
+#X obj 83 177 mod 200;
+#X obj 54 254 / 200;
+#X text 96 254 mapping output range: 0 to 1;
+#N canvas 0 22 461 369 receive 0;
+#X obj 253 33 receive \$0-y;
+#X obj 253 57 moses;
+#X obj 280 78 moses 201;
+#X obj 331 99 bang;
+#X msg 331 120 200;
+#X obj 238 98 bang;
+#X msg 238 119 0;
+#X obj 91 56 moses;
+#X obj 118 77 moses 201;
+#X obj 169 98 bang;
+#X msg 169 119 200;
+#X obj 76 97 bang;
+#X msg 76 118 0;
+#X obj 91 32 receive \$0-x;
+#X obj 117 289 receive \$0-x-slider;
+#X floatatom 118 312 5 0 0 0 - - -;
+#X floatatom 279 313 5 0 0 0 - - -;
+#X obj 280 290 receive \$0-y-slider;
+#X obj 118 169 / 200;
+#X obj 280 170 / 200;
+#X obj 118 249 send \$0-x-slider-receive;
+#X obj 280 250 send \$0-y-slider-receive;
+#X msg 281 193 1 \$1;
+#X obj 280 221 -;
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 1 1 2 0;
+#X connect 2 0 19 0;
+#X connect 2 1 3 0;
#X connect 3 0 4 0;
-#X connect 4 0 3 1;
-#X connect 4 0 5 1;
+#X connect 4 0 19 0;
#X connect 5 0 6 0;
-#X connect 6 0 1 0;
-#X connect 7 0 8 0;
-#X connect 7 1 5 0;
-#X connect 8 0 3 1;
-#X restore 82 353 pd float to list ___________;
-#N canvas 0 0 450 300 generate 0;
-#X obj 55 38 inlet;
-#X msg 55 65 0;
-#X obj 55 91 f;
-#X obj 55 164 + 1;
-#X obj 55 137 t f f;
-#X obj 85 192 outlet;
-#X obj 148 192 outlet;
-#X obj 148 166 t b;
-#X obj 85 164 / 100;
-#X obj 55 114 moses 101;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 2 0 9 0;
-#X connect 3 0 2 0;
-#X connect 4 0 3 0;
-#X connect 4 1 8 0;
-#X connect 7 0 6 0;
-#X connect 8 0 5 0;
-#X connect 9 0 4 0;
-#X connect 9 1 7 0;
-#X restore 82 302 pd generate list ___________;
-#X floatatom 513 224 5 0 1 0 - - -;
-#X obj 513 248 t b f;
-#X floatatom 584 223 5 0 0 0 - - -;
-#X obj 584 247 t b f;
-#X obj 451 248 loadbang;
-#N canvas 0 0 450 300 float 0;
+#X connect 6 0 19 0;
+#X connect 7 0 11 0;
+#X connect 7 1 8 0;
+#X connect 8 0 18 0;
+#X connect 8 1 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 18 0;
+#X connect 11 0 12 0;
+#X connect 12 0 18 0;
+#X connect 13 0 7 0;
+#X connect 14 0 15 0;
+#X connect 17 0 16 0;
+#X connect 18 0 20 0;
+#X connect 19 0 22 0;
+#X connect 22 0 23 0;
+#X connect 23 0 21 0;
+#X restore 265 348 pd receive from gcanvas;
+#X obj 138 9 receive \$0-x-slider;
+#X obj 293 12 receive \$0-y-slider;
+#X obj 294 50 trigger bang float;
+#X obj 54 280 breakpoint;
+#X obj 54 108 cyclone/speedlim 100;
+#X connect 0 0 18 0;
+#X connect 1 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 0 6 0;
+#X connect 4 0 10 0;
+#X connect 5 0 0 0;
+#X connect 6 0 11 0;
+#X connect 6 1 8 1;
+#X connect 7 0 1 1;
+#X connect 9 0 0 0;
+#X connect 9 1 17 1;
+#X connect 10 0 3 1;
+#X connect 10 0 7 0;
+#X connect 11 0 17 0;
+#X connect 14 0 9 0;
+#X connect 15 0 16 0;
+#X connect 16 0 0 0;
+#X connect 16 1 17 2;
+#X connect 17 0 8 0;
+#X connect 18 0 1 0;
+#X restore 387 71 pd draw_array;
+#X obj 158 167 hsl 50 15 0 1 0 1 \$0-y-slider \$0-y-slider-receive
+y 5 9 0 11 -204800 -1 -1 2352 0;
+#X floatatom 165 186 7 0 0 0 - - -;
+#X obj 334 359 pddp/open mapping-about;
+#X text 37 392 (C) Copyright 2007 Free Software Foundation;
+#X obj 282 103 gcanvas 200 200;
+#N canvas 0 22 450 300 graph1 0;
+#X array \$0-curve 200 float 0;
+#X coords 0 1 199 0 200 200 1;
+#X restore 282 103 graph;
+#X obj 282 308 send \$0-x;
+#X obj 424 307 send \$0-y;
+#X obj 74 167 hsl 50 15 0 1 0 1 \$0-x-slider \$0-x-slider-receive x
+5 9 0 11 -232576 -1 -1 3700 0;
+#X floatatom 80 187 7 0 0 0 - - -;
+#X text 17 39 This object curves the input range using a double-linear
+interpolator with two control parameters.;
+#X obj 25 217 breakpoint;
+#N canvas 0 22 461 638 usage 0;
+#X floatatom 153 34 5 0 1 0 - - -;
+#X obj 153 58 t b f;
+#X floatatom 224 33 5 0 0 0 - - -;
+#X obj 224 57 t b f;
+#X obj 91 58 loadbang;
+#N canvas 0 22 454 304 float 0;
#X obj 71 23 inlet;
#X obj 48 191 outlet;
#X obj 150 22 inlet;
@@ -79,8 +145,8 @@
#X connect 7 0 8 0;
#X connect 7 1 5 0;
#X connect 8 0 3 1;
-#X restore 451 358 pd float to list ___________;
-#N canvas 0 0 450 300 generate 0;
+#X restore 91 168 pd float to list ___________;
+#N canvas 0 22 450 300 generate 0;
#X obj 55 38 inlet;
#X msg 55 65 0;
#X obj 55 91 f;
@@ -101,39 +167,30 @@
#X connect 8 0 5 0;
#X connect 9 0 4 0;
#X connect 9 1 7 0;
-#X restore 451 279 pd generate list ___________;
-#X text 110 70 for X go thru 0 to \$1 \, Y go thrus 0 to \$2.;
-#X text 109 89 for X go thru \$1 to 1 \, Y go thrus \$2 to 1;
-#X obj 20 180 breakpoint 0.8 0.3;
-#X obj 82 327 breakpoint 0.8 0.3 _____;
-#X obj 82 381 multi_slider 100;
-#X obj 452 388 multi_slider 100;
-#X obj 451 304 breakpoint 0.3 0.5 _____;
-#X obj 451 332 nl 1 ________________;
-#X connect 0 0 21 0;
-#X connect 2 0 21 1;
-#X connect 3 0 21 2;
-#X connect 4 0 5 0;
-#X connect 5 0 11 0;
-#X connect 5 1 22 1;
+#X restore 91 89 pd generate list ___________;
+#X obj 92 198 multi_slider 100;
+#X obj 91 114 breakpoint 0.3 0.5 _____;
+#X obj 91 142 nl 1 ________________;
+#X connect 0 0 1 0;
+#X connect 1 0 6 0;
+#X connect 1 1 8 1;
+#X connect 2 0 3 0;
+#X connect 3 0 6 0;
+#X connect 3 1 9 1;
+#X connect 4 0 6 0;
+#X connect 5 0 7 0;
+#X connect 6 0 8 0;
+#X connect 6 1 5 1;
+#X connect 8 0 9 0;
+#X connect 9 0 5 0;
+#X restore 197 359 pd usage example;
+#X connect 5 0 21 0;
#X connect 6 0 7 0;
-#X connect 7 0 11 0;
-#X connect 7 1 22 2;
-#X connect 8 0 11 0;
-#X connect 10 0 23 0;
-#X connect 11 0 22 0;
-#X connect 11 1 10 1;
-#X connect 12 0 13 0;
-#X connect 13 0 18 0;
-#X connect 13 1 25 1;
-#X connect 14 0 15 0;
-#X connect 15 0 18 0;
-#X connect 15 1 26 1;
-#X connect 16 0 18 0;
-#X connect 17 0 24 0;
-#X connect 18 0 25 0;
-#X connect 18 1 17 1;
-#X connect 21 0 1 0;
-#X connect 22 0 10 0;
-#X connect 25 0 26 0;
-#X connect 26 0 17 0;
+#X connect 8 0 5 0;
+#X connect 10 0 11 0;
+#X connect 10 0 21 2;
+#X connect 14 0 16 0;
+#X connect 14 1 17 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 21 0 6 0;
diff --git a/help/breakpoint_smooth-help.pd b/help/breakpoint_smooth-help.pd
index d0ace73..7a8110e 100644
--- a/help/breakpoint_smooth-help.pd
+++ b/help/breakpoint_smooth-help.pd
@@ -1,78 +1,131 @@
-#N canvas 230 45 885 734 10;
-#X obj 20 38 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
+#N canvas 377 72 526 441 10;
+#X obj 384 32 import mapping ggee;
+#X obj 5 2 cnv 15 500 20 empty empty breakpoint_smooth 2 11 1 18 -233017
+-66577 0;
+#X msg 471 2 pddp;
+#X text 304 393 released under the GNU GPL;
+#X text 179 362 For more info:;
+#X floatatom 25 127 8 0 0 0 - - -;
+#X floatatom 25 288 8 0 0 0 - - -;
+#X obj 28 305 hsl 200 20 0 1 0 0 empty empty curved_output 22 11 1
+12 -262144 -1 -1 0 1;
+#X obj 28 101 hsl 200 20 0 1 0 0 empty empty raw_input 22 11 1 12 -261681
-1 -1 0 1;
-#X obj 20 213 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X floatatom 91 156 5 0 0 0 - - -;
-#X floatatom 162 157 5 0 0 0 - - -;
-#X floatatom 144 247 5 0 1 0 - - -;
-#X obj 144 271 t b f;
-#X floatatom 236 247 5 0 1 0 - - -;
-#X obj 236 271 t b f;
-#X obj 82 271 loadbang;
-#X text 214 185 XY relation of the breakpoint object;
-#N canvas 0 0 450 300 float 0;
-#X obj 71 23 inlet;
-#X obj 48 191 outlet;
-#X obj 150 22 inlet;
-#X obj 71 93 list prepend;
-#X obj 71 118 list;
-#X obj 48 141 list;
-#X obj 48 166 list trim;
-#X obj 150 45 t b b;
-#X msg 150 70 list;
-#X connect 0 0 3 0;
-#X connect 2 0 7 0;
+#N canvas 273 69 474 407 draw_array 0;
+#X msg 54 82 bang;
+#X obj 54 133 until;
+#X text 85 82 start;
+#X obj 54 155 f;
+#X obj 83 155 + 1;
+#X obj 54 43 loadbang;
+#X obj 54 210 trigger float float;
+#X obj 127 157 select 0;
+#X obj 66 343 tabwrite \$0-curve;
+#X obj 139 53 trigger bang float;
+#X obj 83 177 mod 200;
+#X obj 54 254 / 200;
+#X text 96 254 mapping output range: 0 to 1;
+#N canvas 0 22 461 369 receive 0;
+#X obj 253 33 receive \$0-y;
+#X obj 253 57 moses;
+#X obj 280 78 moses 201;
+#X obj 331 99 bang;
+#X msg 331 120 200;
+#X obj 238 98 bang;
+#X msg 238 119 0;
+#X obj 91 56 moses;
+#X obj 118 77 moses 201;
+#X obj 169 98 bang;
+#X msg 169 119 200;
+#X obj 76 97 bang;
+#X msg 76 118 0;
+#X obj 91 32 receive \$0-x;
+#X obj 117 289 receive \$0-x-slider;
+#X floatatom 118 312 5 0 0 0 - - -;
+#X floatatom 279 313 5 0 0 0 - - -;
+#X obj 280 290 receive \$0-y-slider;
+#X obj 118 169 / 200;
+#X obj 280 170 / 200;
+#X obj 118 249 send \$0-x-slider-receive;
+#X obj 280 250 send \$0-y-slider-receive;
+#X msg 281 193 1 \$1;
+#X obj 280 221 -;
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 1 1 2 0;
+#X connect 2 0 19 0;
+#X connect 2 1 3 0;
#X connect 3 0 4 0;
-#X connect 4 0 3 1;
-#X connect 4 0 5 1;
+#X connect 4 0 19 0;
#X connect 5 0 6 0;
-#X connect 6 0 1 0;
-#X connect 7 0 8 0;
-#X connect 7 1 5 0;
-#X connect 8 0 3 1;
-#X restore 82 353 pd float to list ___________;
-#N canvas 0 0 450 300 generate 0;
-#X obj 55 38 inlet;
-#X msg 55 65 0;
-#X obj 55 91 f;
-#X obj 55 164 + 1;
-#X obj 55 137 t f f;
-#X obj 85 192 outlet;
-#X obj 148 192 outlet;
-#X obj 148 166 t b;
-#X obj 85 164 / 100;
-#X obj 55 114 moses 101;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 2 0 9 0;
-#X connect 3 0 2 0;
-#X connect 4 0 3 0;
-#X connect 4 1 8 0;
-#X connect 7 0 6 0;
-#X connect 8 0 5 0;
-#X connect 9 0 4 0;
-#X connect 9 1 7 0;
-#X restore 82 302 pd generate list ___________;
-#X text 110 70 for X go thru 0 to \$1 \, Y go thrus 0 to \$2.;
-#X text 109 89 for X go thru \$1 to 1 \, Y go thrus \$2 to 1;
-#X obj 20 180 breakpoint 0.8 0.3;
-#X obj 82 381 multi_slider 100;
-#X obj 82 328 breakpoint_smooth 0.8 0.3 _;
-#X text 216 19 just like breakpoint \, but with a smooth curve (i.e.
-: no breakpoint!). the output value is \$2 for input = \$1.;
-#X connect 0 0 14 0;
-#X connect 2 0 14 1;
-#X connect 3 0 14 2;
-#X connect 4 0 5 0;
-#X connect 5 0 11 0;
-#X connect 5 1 16 1;
-#X connect 6 0 7 0;
+#X connect 6 0 19 0;
#X connect 7 0 11 0;
-#X connect 7 1 16 2;
-#X connect 8 0 11 0;
-#X connect 10 0 15 0;
-#X connect 11 0 16 0;
-#X connect 11 1 10 1;
-#X connect 14 0 1 0;
-#X connect 16 0 10 0;
+#X connect 7 1 8 0;
+#X connect 8 0 18 0;
+#X connect 8 1 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 18 0;
+#X connect 11 0 12 0;
+#X connect 12 0 18 0;
+#X connect 13 0 7 0;
+#X connect 14 0 15 0;
+#X connect 17 0 16 0;
+#X connect 18 0 20 0;
+#X connect 19 0 22 0;
+#X connect 22 0 23 0;
+#X connect 23 0 21 0;
+#X restore 265 348 pd receive from gcanvas;
+#X obj 138 9 receive \$0-x-slider;
+#X obj 293 12 receive \$0-y-slider;
+#X obj 294 50 trigger bang float;
+#X obj 54 280 breakpoint_smooth;
+#X obj 54 108 cyclone/speedlim 100;
+#X connect 0 0 18 0;
+#X connect 1 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 0 6 0;
+#X connect 4 0 10 0;
+#X connect 5 0 0 0;
+#X connect 6 0 11 0;
+#X connect 6 1 8 1;
+#X connect 7 0 1 1;
+#X connect 9 0 0 0;
+#X connect 9 1 17 1;
+#X connect 10 0 3 1;
+#X connect 10 0 7 0;
+#X connect 11 0 17 0;
+#X connect 14 0 9 0;
+#X connect 15 0 16 0;
+#X connect 16 0 0 0;
+#X connect 16 1 17 2;
+#X connect 17 0 8 0;
+#X connect 18 0 1 0;
+#X restore 387 71 pd draw_array;
+#X obj 158 167 hsl 50 15 0 1 0 0 \$0-y-slider \$0-y-slider-receive
+y 5 9 0 11 -204800 -1 -1 0 0;
+#X floatatom 165 186 7 0 0 0 - - -;
+#X obj 283 360 pddp/open mapping-about;
+#X text 37 392 (C) Copyright 2007 Free Software Foundation;
+#X obj 282 103 gcanvas 200 200;
+#N canvas 0 22 450 300 graph1 0;
+#X array \$0-curve 200 float 0;
+#X coords 0 1 199 0 200 200 1;
+#X restore 282 103 graph;
+#X obj 282 308 send \$0-x;
+#X obj 424 307 send \$0-y;
+#X obj 74 167 hsl 50 15 0 1 0 0 \$0-x-slider \$0-x-slider-receive x
+5 9 0 11 -232576 -1 -1 0 0;
+#X floatatom 80 187 7 0 0 0 - - -;
+#X text 17 39 This object curves the input range using a double-linear
+interpolator with two control parameters.;
+#X obj 25 217 breakpoint_smooth;
+#X connect 5 0 21 0;
+#X connect 6 0 7 0;
+#X connect 8 0 5 0;
+#X connect 10 0 11 0;
+#X connect 10 0 21 2;
+#X connect 14 0 16 0;
+#X connect 14 1 17 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 21 0 6 0;
diff --git a/help/circular_seat-help.pd b/help/circular_seat-help.pd
index f62e5fb..cb785a1 100644
--- a/help/circular_seat-help.pd
+++ b/help/circular_seat-help.pd
@@ -1,4 +1,4 @@
-#N canvas 107 47 482 425 10;
+#N canvas 107 47 486 429 10;
#X obj 5 2 cnv 15 450 20 empty empty circular_seat 2 11 1 18 -233017
-66577 0;
#X msg 422 3 pddp;
@@ -106,10 +106,11 @@
#X obj 262 308 send \$0-x;
#X obj 404 307 send \$0-y;
#X obj 111 167 hsl 50 15 0 1 0 0 \$0-x-slider \$0-x-slider-receive
-x 5 9 0 11 -232576 -1 -1 2450 0;
+x 5 9 0 11 -232576 -1 -1 0 0;
#X floatatom 117 187 7 0 0 0 - - -;
#X text 17 39 This object curves the input range using a double-circular
seat controlled by one parameter.;
+#X text 15 71 (click in the gray area to play);
#X connect 4 0 11 0;
#X connect 5 0 6 0;
#X connect 7 0 4 0;
diff --git a/help/circular_sigmoid-help.pd b/help/circular_sigmoid-help.pd
new file mode 100644
index 0000000..871f15e
--- /dev/null
+++ b/help/circular_sigmoid-help.pd
@@ -0,0 +1,121 @@
+#N canvas 453 22 486 429 10;
+#X obj 5 2 cnv 15 450 20 empty empty circular_sigmoid 2 11 1 18 -233017
+-66577 0;
+#X msg 422 3 pddp;
+#X text 273 392 released under the GNU GPL;
+#X text 148 361 For more info:;
+#X floatatom 15 127 8 0 0 0 - - -;
+#X floatatom 15 288 8 0 0 0 - - -;
+#X obj 18 305 hsl 200 20 0 1 0 0 empty empty curved_output 22 11 1
+12 -262144 -1 -1 0 1;
+#X obj 18 101 hsl 200 20 0 1 0 0 empty empty raw_input 22 11 1 12 -261681
+-1 -1 0 1;
+#N canvas 273 69 470 403 draw_array 0;
+#X msg 54 82 bang;
+#X obj 54 133 until;
+#X text 85 82 start;
+#X obj 54 155 f;
+#X obj 83 155 + 1;
+#X obj 54 43 loadbang;
+#X obj 54 210 trigger float float;
+#X obj 127 157 select 0;
+#X obj 53 343 tabwrite \$0-curve;
+#X obj 139 53 trigger bang float;
+#X obj 83 177 mod 200;
+#X obj 54 287 / 200;
+#X text 96 287 mapping output range: 0 to 1;
+#N canvas 0 22 461 369 receive 0;
+#X obj 253 33 receive \$0-y;
+#X obj 253 57 moses;
+#X obj 280 78 moses 201;
+#X obj 331 99 bang;
+#X msg 331 120 200;
+#X obj 238 98 bang;
+#X msg 238 119 0;
+#X obj 91 56 moses;
+#X obj 118 77 moses 201;
+#X obj 169 98 bang;
+#X msg 169 119 200;
+#X obj 76 97 bang;
+#X msg 76 118 0;
+#X obj 91 32 receive \$0-x;
+#X obj 117 289 receive \$0-x-slider;
+#X floatatom 118 312 5 0 0 0 - - -;
+#X floatatom 279 313 5 0 0 0 - - -;
+#X obj 280 290 receive \$0-y-slider;
+#X obj 118 169 / 200;
+#X obj 280 170 / 200;
+#X obj 118 249 send \$0-x-slider-receive;
+#X obj 280 250 send \$0-y-slider-receive;
+#X msg 281 193 1 \$1;
+#X obj 280 221 -;
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 1 1 2 0;
+#X connect 2 0 19 0;
+#X connect 2 1 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 19 0;
+#X connect 5 0 6 0;
+#X connect 6 0 19 0;
+#X connect 7 0 11 0;
+#X connect 7 1 8 0;
+#X connect 8 0 18 0;
+#X connect 8 1 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 18 0;
+#X connect 11 0 12 0;
+#X connect 12 0 18 0;
+#X connect 13 0 7 0;
+#X connect 14 0 15 0;
+#X connect 17 0 16 0;
+#X connect 18 0 20 0;
+#X connect 19 0 22 0;
+#X connect 22 0 23 0;
+#X connect 23 0 21 0;
+#X restore 265 348 pd receive from gcanvas;
+#X obj 138 9 receive \$0-x-slider;
+#X obj 54 108 speedlim 100;
+#X obj 53 313 circular_sigmoid;
+#X connect 0 0 15 0;
+#X connect 1 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 0 6 0;
+#X connect 4 0 10 0;
+#X connect 5 0 0 0;
+#X connect 6 0 11 0;
+#X connect 6 1 8 1;
+#X connect 7 0 1 1;
+#X connect 9 0 0 0;
+#X connect 9 1 16 1;
+#X connect 10 0 3 1;
+#X connect 10 0 7 0;
+#X connect 11 0 16 0;
+#X connect 14 0 9 0;
+#X connect 15 0 1 0;
+#X connect 16 0 8 0;
+#X restore 367 71 pd draw_array;
+#X obj 252 359 pddp/open mapping-about;
+#X text 6 391 (C) Copyright 2007 Free Software Foundation;
+#X obj 15 217 circular_sigmoid;
+#X obj 262 103 gcanvas 200 200;
+#N canvas 0 22 450 300 graph1 0;
+#X array \$0-curve 200 float 0;
+#X coords 0 1 199 0 200 200 1;
+#X restore 262 103 graph;
+#X obj 262 308 send \$0-x;
+#X obj 404 307 send \$0-y;
+#X obj 111 167 hsl 50 15 0 1 0 0 \$0-x-slider \$0-x-slider-receive
+x 5 9 0 11 -232576 -1 -1 1029 0;
+#X floatatom 117 187 7 0 0 0 - - -;
+#X text 17 39 This object curves the input range using a double-circular
+seat controlled by one parameter.;
+#X text 15 71 (click in the gray area to play);
+#X connect 4 0 11 0;
+#X connect 5 0 6 0;
+#X connect 7 0 4 0;
+#X connect 11 0 5 0;
+#X connect 12 0 14 0;
+#X connect 12 1 15 0;
+#X connect 16 0 11 1;
+#X connect 16 0 17 0;
diff --git a/help/elliptic_sigmoid-help.pd b/help/elliptic_sigmoid-help.pd
new file mode 100644
index 0000000..28bbb6f
--- /dev/null
+++ b/help/elliptic_sigmoid-help.pd
@@ -0,0 +1,131 @@
+#N canvas 364 172 519 423 10;
+#X obj 386 30 import mapping ggee;
+#X obj 5 2 cnv 15 500 20 empty empty elliptic_sigmoid 2 11 1 18 -233017
+-66577 0;
+#X msg 471 2 pddp;
+#X text 304 393 released under the GNU GPL;
+#X text 235 359 For more info:;
+#X floatatom 25 127 8 0 0 0 - - -;
+#X floatatom 25 288 8 0 0 0 - - -;
+#X obj 28 305 hsl 200 20 0 1 0 0 empty empty curved_output 22 11 1
+12 -262144 -1 -1 0 1;
+#X obj 28 101 hsl 200 20 0 1 0 0 empty empty raw_input 22 11 1 12 -261681
+-1 -1 0 1;
+#X obj 158 167 hsl 50 15 0 1 0 1 \$0-y-slider \$0-y-slider-receive
+y 5 9 0 11 -204800 -1 -1 1421 0;
+#X floatatom 165 186 7 0 0 0 - - -;
+#X obj 334 359 pddp/open mapping-about;
+#X text 37 392 (C) Copyright 2007 Free Software Foundation;
+#X obj 74 167 hsl 50 15 0 1 0 1 \$0-x-slider \$0-x-slider-receive x
+5 9 0 11 -232576 -1 -1 2744 0;
+#X floatatom 80 187 7 0 0 0 - - -;
+#X text 17 39 This object curves the input range using a double-linear
+interpolator with two control parameters.;
+#X obj 25 217 elliptic_sigmoid;
+#N canvas 273 69 478 411 draw_array 0;
+#X msg 54 82 bang;
+#X obj 54 133 until;
+#X text 85 82 start;
+#X obj 54 155 f;
+#X obj 83 155 + 1;
+#X obj 54 43 loadbang;
+#X obj 54 210 trigger float float;
+#X obj 127 157 select 0;
+#X obj 66 343 tabwrite \$0-curve;
+#X obj 139 53 trigger bang float;
+#X obj 83 177 mod 200;
+#X obj 54 254 / 200;
+#X text 96 254 mapping output range: 0 to 1;
+#N canvas 0 22 461 369 receive 0;
+#X obj 253 33 receive \$0-y;
+#X obj 253 57 moses;
+#X obj 280 78 moses 201;
+#X obj 331 99 bang;
+#X msg 331 120 200;
+#X obj 238 98 bang;
+#X msg 238 119 0;
+#X obj 91 56 moses;
+#X obj 118 77 moses 201;
+#X obj 169 98 bang;
+#X msg 169 119 200;
+#X obj 76 97 bang;
+#X msg 76 118 0;
+#X obj 91 32 receive \$0-x;
+#X obj 117 289 receive \$0-x-slider;
+#X floatatom 118 312 5 0 0 0 - - -;
+#X floatatom 279 313 5 0 0 0 - - -;
+#X obj 280 290 receive \$0-y-slider;
+#X obj 118 169 / 200;
+#X obj 280 170 / 200;
+#X obj 118 249 send \$0-x-slider-receive;
+#X obj 280 250 send \$0-y-slider-receive;
+#X msg 281 193 1 \$1;
+#X obj 280 221 -;
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 1 1 2 0;
+#X connect 2 0 19 0;
+#X connect 2 1 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 19 0;
+#X connect 5 0 6 0;
+#X connect 6 0 19 0;
+#X connect 7 0 11 0;
+#X connect 7 1 8 0;
+#X connect 8 0 18 0;
+#X connect 8 1 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 18 0;
+#X connect 11 0 12 0;
+#X connect 12 0 18 0;
+#X connect 13 0 7 0;
+#X connect 14 0 15 0;
+#X connect 17 0 16 0;
+#X connect 18 0 20 0;
+#X connect 19 0 22 0;
+#X connect 22 0 23 0;
+#X connect 23 0 21 0;
+#X restore 265 348 pd receive from gcanvas;
+#X obj 138 9 receive \$0-x-slider;
+#X obj 293 12 receive \$0-y-slider;
+#X obj 294 50 trigger bang float;
+#X obj 54 108 cyclone/speedlim 100;
+#X obj 54 280 elliptic_sigmoid;
+#X connect 0 0 17 0;
+#X connect 1 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 0 6 0;
+#X connect 4 0 10 0;
+#X connect 5 0 0 0;
+#X connect 6 0 11 0;
+#X connect 6 1 8 1;
+#X connect 7 0 1 1;
+#X connect 9 0 0 0;
+#X connect 9 1 18 1;
+#X connect 10 0 3 1;
+#X connect 10 0 7 0;
+#X connect 11 0 18 0;
+#X connect 14 0 9 0;
+#X connect 15 0 16 0;
+#X connect 16 0 0 0;
+#X connect 16 1 18 2;
+#X connect 17 0 1 0;
+#X connect 18 0 8 0;
+#X restore 387 71 pd draw_array;
+#X obj 282 103 gcanvas 200 200;
+#N canvas 0 22 450 300 graph1 0;
+#X array \$0-curve 200 float 0;
+#X coords 0 1 199 0 200 200 1;
+#X restore 282 103 graph;
+#X obj 282 308 send \$0-x;
+#X obj 424 307 send \$0-y;
+#X connect 5 0 16 0;
+#X connect 6 0 7 0;
+#X connect 8 0 5 0;
+#X connect 9 0 10 0;
+#X connect 9 0 16 2;
+#X connect 13 0 14 0;
+#X connect 13 0 16 1;
+#X connect 16 0 6 0;
+#X connect 18 0 20 0;
+#X connect 18 1 21 0;
diff --git a/help/exponential_curve-help.pd b/help/exponential_curve-help.pd
new file mode 100644
index 0000000..e80084e
--- /dev/null
+++ b/help/exponential_curve-help.pd
@@ -0,0 +1,121 @@
+#N canvas 75 55 502 438 10;
+#X obj 5 -3 cnv 15 450 20 empty empty exponential_curve 2 11 1 18 -233017
+-66577 0;
+#X msg 422 -2 pddp;
+#X text 283 387 released under the GNU GPL;
+#X text 158 356 For more info:;
+#X floatatom 25 122 8 0 0 0 - - -;
+#X floatatom 25 283 8 0 0 0 - - -;
+#X obj 28 300 hsl 200 20 0 1 0 0 empty empty curved_output 22 11 1
+12 -262144 -1 -1 0 1;
+#X obj 28 96 hsl 200 20 0 1 0 0 empty empty raw_input 22 11 1 12 -261681
+-1 -1 0 1;
+#N canvas 273 69 474 407 draw_array 0;
+#X msg 54 82 bang;
+#X obj 54 133 until;
+#X text 85 82 start;
+#X obj 54 155 f;
+#X obj 83 155 + 1;
+#X obj 54 43 loadbang;
+#X obj 54 210 trigger float float;
+#X obj 127 157 select 0;
+#X obj 53 343 tabwrite \$0-curve;
+#X obj 139 53 trigger bang float;
+#X obj 83 177 mod 200;
+#X obj 54 287 / 200;
+#X text 96 287 mapping output range: 0 to 1;
+#N canvas 0 22 461 369 receive 0;
+#X obj 253 33 receive \$0-y;
+#X obj 253 57 moses;
+#X obj 280 78 moses 201;
+#X obj 331 99 bang;
+#X msg 331 120 200;
+#X obj 238 98 bang;
+#X msg 238 119 0;
+#X obj 91 56 moses;
+#X obj 118 77 moses 201;
+#X obj 169 98 bang;
+#X msg 169 119 200;
+#X obj 76 97 bang;
+#X msg 76 118 0;
+#X obj 91 32 receive \$0-x;
+#X obj 117 289 receive \$0-x-slider;
+#X floatatom 118 312 5 0 0 0 - - -;
+#X floatatom 279 313 5 0 0 0 - - -;
+#X obj 280 290 receive \$0-y-slider;
+#X obj 118 169 / 200;
+#X obj 280 170 / 200;
+#X obj 118 249 send \$0-x-slider-receive;
+#X obj 280 250 send \$0-y-slider-receive;
+#X msg 281 193 1 \$1;
+#X obj 280 221 -;
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 1 1 2 0;
+#X connect 2 0 19 0;
+#X connect 2 1 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 19 0;
+#X connect 5 0 6 0;
+#X connect 6 0 19 0;
+#X connect 7 0 11 0;
+#X connect 7 1 8 0;
+#X connect 8 0 18 0;
+#X connect 8 1 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 18 0;
+#X connect 11 0 12 0;
+#X connect 12 0 18 0;
+#X connect 13 0 7 0;
+#X connect 14 0 15 0;
+#X connect 17 0 16 0;
+#X connect 18 0 20 0;
+#X connect 19 0 22 0;
+#X connect 22 0 23 0;
+#X connect 23 0 21 0;
+#X restore 265 348 pd receive from gcanvas;
+#X obj 138 9 receive \$0-x-slider;
+#X obj 54 108 speedlim 100;
+#X obj 53 313 exponential_curve;
+#X connect 0 0 15 0;
+#X connect 1 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 0 6 0;
+#X connect 4 0 10 0;
+#X connect 5 0 0 0;
+#X connect 6 0 11 0;
+#X connect 6 1 8 1;
+#X connect 7 0 1 1;
+#X connect 9 0 0 0;
+#X connect 9 1 16 1;
+#X connect 10 0 3 1;
+#X connect 10 0 7 0;
+#X connect 11 0 16 0;
+#X connect 14 0 9 0;
+#X connect 15 0 1 0;
+#X connect 16 0 8 0;
+#X restore 377 66 pd draw_array;
+#X obj 262 354 pddp/open mapping-about;
+#X text 16 386 (C) Copyright 2007 Free Software Foundation;
+#X obj 272 98 gcanvas 200 200;
+#N canvas 0 22 450 300 graph1 0;
+#X array \$0-curve 200 float 0;
+#X coords 0 1 199 0 200 200 1;
+#X restore 272 98 graph;
+#X obj 272 303 send \$0-x;
+#X obj 414 302 send \$0-y;
+#X obj 127 163 hsl 50 15 0 1 0 0 \$0-x-slider \$0-x-slider-receive
+x 5 9 0 11 -232576 -1 -1 1617 0;
+#X floatatom 133 183 7 0 0 0 - - -;
+#X text 17 34 This object curves the input range using a double-exponential
+seat controlled by one parameter.;
+#X obj 25 212 exponential_curve;
+#X text 15 71 (click in the gray area to play);
+#X connect 4 0 18 0;
+#X connect 5 0 6 0;
+#X connect 7 0 4 0;
+#X connect 11 0 13 0;
+#X connect 11 1 14 0;
+#X connect 15 0 16 0;
+#X connect 15 0 18 1;
+#X connect 18 0 5 0;
diff --git a/help/exponential_seat-help.pd b/help/exponential_seat-help.pd
index 7c853c0..1448747 100644
--- a/help/exponential_seat-help.pd
+++ b/help/exponential_seat-help.pd
@@ -1,4 +1,4 @@
-#N canvas 709 123 502 433 10;
+#N canvas 709 123 506 437 10;
#X obj 5 2 cnv 15 450 20 empty empty exponential_seat 2 11 1 18 -233017
-66577 0;
#X msg 422 3 pddp;
@@ -110,6 +110,7 @@ x 5 9 0 11 -232576 -1 -1 0 0;
#X floatatom 127 187 7 0 0 0 - - -;
#X text 17 39 This object curves the input range using a double-exponential
seat controlled by one parameter.;
+#X text 15 71 (click in the gray area to play);
#X connect 4 0 11 0;
#X connect 5 0 6 0;
#X connect 7 0 4 0;
diff --git a/help/double_linear-help.pd b/help/exponential_sigmoid-help.pd
index 95d4771..48f447a 100644
--- a/help/double_linear-help.pd
+++ b/help/exponential_sigmoid-help.pd
@@ -1,6 +1,6 @@
-#N canvas 568 30 498 429 10;
-#X obj 5 2 cnv 15 450 20 empty empty double_linear 2 11 1 18 -233017
--66577 0;
+#N canvas 130 42 494 421 10;
+#X obj 5 2 cnv 15 450 20 empty empty exponential_sigmoid 2 11 1 18
+-233017 -66577 0;
#X msg 422 3 pddp;
#X text 283 392 released under the GNU GPL;
#X text 158 361 For more info:;
@@ -10,7 +10,7 @@
12 -262144 -1 -1 0 1;
#X obj 28 101 hsl 200 20 0 1 0 0 empty empty raw_input 22 11 1 12 -261681
-1 -1 0 1;
-#N canvas 273 69 466 399 draw_array 0;
+#N canvas 273 69 470 403 draw_array 0;
#X msg 54 82 bang;
#X obj 54 133 until;
#X text 85 82 start;
@@ -75,11 +75,9 @@
#X connect 23 0 21 0;
#X restore 265 348 pd receive from gcanvas;
#X obj 138 9 receive \$0-x-slider;
-#X obj 293 12 receive \$0-y-slider;
-#X obj 53 313 double_linear;
-#X obj 294 50 trigger bang float;
#X obj 54 108 speedlim 100;
-#X connect 0 0 18 0;
+#X obj 53 313 exponential_sigmoid;
+#X connect 0 0 15 0;
#X connect 1 0 3 0;
#X connect 3 0 4 0;
#X connect 3 0 6 0;
@@ -94,18 +92,12 @@
#X connect 10 0 7 0;
#X connect 11 0 16 0;
#X connect 14 0 9 0;
-#X connect 15 0 17 0;
+#X connect 15 0 1 0;
#X connect 16 0 8 0;
-#X connect 17 0 0 0;
-#X connect 17 1 16 2;
-#X connect 18 0 1 0;
#X restore 377 71 pd draw_array;
-#X obj 158 167 hsl 50 15 0 1 0 0 \$0-y-slider \$0-y-slider-receive
-y 5 9 0 11 -204800 -1 -1 0 0;
-#X floatatom 165 186 7 0 0 0 - - -;
#X obj 262 359 pddp/open mapping-about;
#X text 16 391 (C) Copyright 2007 Free Software Foundation;
-#X obj 25 217 double_linear;
+#X obj 25 217 exponential_sigmoid;
#X obj 272 103 gcanvas 200 200;
#N canvas 0 22 450 300 graph1 0;
#X array \$0-curve 200 float 0;
@@ -113,18 +105,17 @@ y 5 9 0 11 -204800 -1 -1 0 0;
#X restore 272 103 graph;
#X obj 272 308 send \$0-x;
#X obj 414 307 send \$0-y;
-#X obj 74 167 hsl 50 15 0 1 0 0 \$0-x-slider \$0-x-slider-receive x
-5 9 0 11 -232576 -1 -1 0 0;
-#X floatatom 80 187 7 0 0 0 - - -;
-#X text 17 39 This object curves the input range using a double-linear
-interpolator with two control parameters.;
-#X connect 4 0 13 0;
+#X obj 139 167 hsl 50 15 0 1 0 1 \$0-x-slider \$0-x-slider-receive
+x 5 9 0 11 -232576 -1 -1 4900 0;
+#X floatatom 145 187 7 0 0 0 - - -;
+#X text 17 39 This object curves the input range using a double-exponential
+seat controlled by one parameter.;
+#X text 15 71 (click in the gray area to play);
+#X connect 4 0 11 0;
#X connect 5 0 6 0;
#X connect 7 0 4 0;
-#X connect 9 0 13 2;
-#X connect 9 0 10 0;
-#X connect 13 0 5 0;
-#X connect 14 0 16 0;
-#X connect 14 1 17 0;
-#X connect 18 0 13 1;
-#X connect 18 0 19 0;
+#X connect 11 0 5 0;
+#X connect 12 0 14 0;
+#X connect 12 1 15 0;
+#X connect 16 0 11 1;
+#X connect 16 0 17 0;
diff --git a/help/logistic_sigmoid-help.pd b/help/logistic_sigmoid-help.pd
new file mode 100644
index 0000000..c8e57c5
--- /dev/null
+++ b/help/logistic_sigmoid-help.pd
@@ -0,0 +1,221 @@
+#N canvas 440 23 498 425 10;
+#X obj 5 2 cnv 15 450 20 empty empty logistic_sigmoid 2 11 1 18 -233017
+-66577 0;
+#X msg 422 3 pddp;
+#X text 283 392 released under the GNU GPL;
+#X text 158 361 For more info:;
+#X floatatom 25 127 8 0 0 0 - - -;
+#X floatatom 25 288 8 0 0 0 - - -;
+#X obj 28 305 hsl 200 20 0 1 0 0 empty empty curved_output 22 11 1
+12 -262144 -1 -1 0 1;
+#X obj 28 101 hsl 200 20 0 1 0 0 empty empty raw_input 22 11 1 12 -261681
+-1 -1 0 1;
+#N canvas 273 69 474 407 draw_array 0;
+#X msg 54 82 bang;
+#X obj 54 133 until;
+#X text 85 82 start;
+#X obj 54 155 f;
+#X obj 83 155 + 1;
+#X obj 54 43 loadbang;
+#X obj 54 210 trigger float float;
+#X obj 127 157 select 0;
+#X obj 53 343 tabwrite \$0-curve;
+#X obj 139 53 trigger bang float;
+#X obj 83 177 mod 200;
+#X obj 54 287 / 200;
+#X text 96 287 mapping output range: 0 to 1;
+#N canvas 739 87 465 373 receive 0;
+#X obj 253 33 receive \$0-y;
+#X obj 253 57 moses;
+#X obj 280 78 moses 201;
+#X obj 331 99 bang;
+#X msg 331 120 200;
+#X obj 238 98 bang;
+#X msg 238 119 0;
+#X obj 91 56 moses;
+#X obj 118 77 moses 201;
+#X obj 169 98 bang;
+#X msg 169 119 200;
+#X obj 76 97 bang;
+#X msg 76 118 0;
+#X obj 91 32 receive \$0-x;
+#X obj 118 169 / 200;
+#X obj 280 170 / 200;
+#X obj 118 249 send \$0-x-slider-receive;
+#X obj 280 250 send \$0-y-slider-receive;
+#X msg 281 193 1 \$1;
+#X obj 280 221 -;
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 1 1 2 0;
+#X connect 2 0 15 0;
+#X connect 2 1 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 15 0;
+#X connect 5 0 6 0;
+#X connect 6 0 15 0;
+#X connect 7 0 11 0;
+#X connect 7 1 8 0;
+#X connect 8 0 14 0;
+#X connect 8 1 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 14 0;
+#X connect 11 0 12 0;
+#X connect 12 0 14 0;
+#X connect 13 0 7 0;
+#X connect 14 0 16 0;
+#X connect 15 0 18 0;
+#X connect 18 0 19 0;
+#X connect 19 0 17 0;
+#X restore 265 348 pd receive from gcanvas;
+#X obj 138 9 receive \$0-x-slider;
+#X obj 54 108 speedlim 100;
+#X obj 53 313 logistic_sigmoid;
+#X connect 0 0 15 0;
+#X connect 1 0 3 0;
+#X connect 3 0 4 0;
+#X connect 3 0 6 0;
+#X connect 4 0 10 0;
+#X connect 5 0 0 0;
+#X connect 6 0 11 0;
+#X connect 6 1 8 1;
+#X connect 7 0 1 1;
+#X connect 9 0 0 0;
+#X connect 9 1 16 1;
+#X connect 10 0 3 1;
+#X connect 10 0 7 0;
+#X connect 11 0 16 0;
+#X connect 14 0 9 0;
+#X connect 15 0 1 0;
+#X connect 16 0 8 0;
+#X restore 377 71 pd draw_array;
+#X obj 262 359 pddp/open mapping-about;
+#X text 16 391 (C) Copyright 2007 Free Software Foundation;
+#X obj 25 217 logistic_sigmoid;
+#X obj 139 167 hsl 50 15 0 1 0 1 \$0-x-slider \$0-x-slider-receive
+x 5 9 0 11 -232576 -1 -1 4900 0;
+#X floatatom 145 187 7 0 0 0 - - -;
+#X text 17 39 This object curves the input range using a double-exponential
+seat controlled by one parameter.;
+#X text 15 71 (click in the gray area to play);
+#N canvas 475 288 686 489 tottest 0;
+#X msg 44 33 capture 1;
+#X obj 169 106 bang;
+#X obj 227 106 bang;
+#X msg 168 130 1;
+#X msg 227 128 0;
+#X obj 110 82 route motion mouse mouseup;
+#X obj 112 161 spigot;
+#X obj 46 9 loadbang;
+#X obj 112 187 unpack float float float;
+#X obj 19 215 moses 273;
+#X obj 353 235 moses 103;
+#X obj 411 255 moses 303;
+#X obj 77 235 moses 473;
+#X obj 77 255 - 273;
+#X obj 411 275 - 103;
+#X obj 411 349 cyclone/speedlim 150;
+#X obj 77 319 cyclone/speedlim 150;
+#X obj 469 285 bang;
+#X msg 469 306 200;
+#X obj 353 285 bang;
+#X msg 353 306 0;
+#X obj 149 268 bang;
+#X msg 149 289 200;
+#X obj 56 267 bang;
+#X msg 56 288 0;
+#X obj 411 375 send \$0-y-slider-receive;
+#X obj 77 343 send \$0-x-slider-receive;
+#N canvas 748 481 466 316 constrain 0;
+#X obj 15 12 inlet;
+#X obj 114 276 outlet;
+#X obj 15 52 unpack float float float float;
+#X obj 45 116 receive \$0-xmin;
+#X obj 75 137 receive \$0-xmax;
+#X obj 15 137 moses;
+#X obj 45 157 moses;
+#X obj 114 247 pack float float;
+#X obj 200 137 moses;
+#X obj 230 157 moses;
+#X obj 137 207 trigger bang float;
+#X obj 260 137 receive \$0-ymax;
+#X obj 230 116 receive \$0-ymin;
+#X connect 0 0 2 0;
+#X connect 2 0 5 0;
+#X connect 2 1 8 0;
+#X connect 3 0 5 1;
+#X connect 4 0 6 1;
+#X connect 5 1 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 1 0;
+#X connect 8 1 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 7 0;
+#X connect 10 1 7 1;
+#X connect 11 0 9 1;
+#X connect 12 0 8 1;
+#X restore 339 112 pd constrain mouse messages;
+#N canvas 0 22 458 308 set 0;
+#X obj 75 26 inlet;
+#X obj 108 115 send \$0-xmax;
+#X obj 19 115 send \$0-xmin;
+#X obj 200 114 send \$0-ymin;
+#X obj 291 114 send \$0-ymax;
+#X obj 74 52 unpack float float float float;
+#X connect 0 0 5 0;
+#X connect 5 0 2 0;
+#X connect 5 1 1 0;
+#X connect 5 2 3 0;
+#X connect 5 3 4 0;
+#X restore 450 67 pd set xmin xmax ymin ymax;
+#X text 530 26 xmin xmax ymin ymax;
+#X msg 416 26 273 103 473 303;
+#X obj 345 135 print HERE;
+#X obj 39 60 toxy/tot .root;
+#X obj 25 120 print RAW;
+#X connect 0 0 32 0;
+#X connect 1 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 6 1;
+#X connect 4 0 6 1;
+#X connect 5 0 6 0;
+#X connect 5 1 1 0;
+#X connect 5 1 27 0;
+#X connect 5 1 33 0;
+#X connect 5 2 2 0;
+#X connect 6 0 8 0;
+#X connect 7 0 0 0;
+#X connect 8 0 9 0;
+#X connect 8 1 10 0;
+#X connect 9 1 12 0;
+#X connect 10 0 19 0;
+#X connect 10 1 11 0;
+#X connect 11 0 14 0;
+#X connect 11 1 17 0;
+#X connect 12 0 13 0;
+#X connect 13 0 16 0;
+#X connect 14 0 15 0;
+#X connect 15 0 25 0;
+#X connect 16 0 26 0;
+#X connect 17 0 18 0;
+#X connect 18 0 15 0;
+#X connect 19 0 20 0;
+#X connect 20 0 15 0;
+#X connect 21 0 22 0;
+#X connect 23 0 24 0;
+#X connect 27 0 31 0;
+#X connect 30 0 28 0;
+#X connect 32 2 5 0;
+#X restore 177 248 pd tottest;
+#X obj 272 103 cnv 15 200 200 empty empty empty 20 12 0 14 -233017
+-66577 0;
+#N canvas 0 22 450 300 (subpatch) 0;
+#X array \$0-curve 200 float 0;
+#X coords 0 1 199 0 200 200 1;
+#X restore 272 103 graph;
+#X connect 4 0 11 0;
+#X connect 5 0 6 0;
+#X connect 7 0 4 0;
+#X connect 11 0 5 0;
+#X connect 12 0 11 1;
+#X connect 12 0 13 0;
diff --git a/logistic_sigmoid.pd b/logistic_sigmoid.pd
new file mode 100644
index 0000000..11c52f9
--- /dev/null
+++ b/logistic_sigmoid.pd
@@ -0,0 +1,48 @@
+#N canvas 564 83 610 403 10;
+#X obj 42 10 inlet;
+#X obj 168 349 outlet;
+#X obj 426 21 loadbang;
+#X obj 353 20 inlet;
+#X obj 353 61 purepd/float_argument \$1;
+#X obj 353 113 expr 1/(1-$f1) - 1;
+#X obj 353 158 expr 1 / (1 + exp($f1));
+#X text 340 157 B;
+#X text 340 111 a;
+#X text 28 177 A;
+#X obj 42 175 expr 1 / (1 + exp(0 - (($f1 - 0.5) * $f2 * 2)));
+#X obj 407 191 expr 1 / (1 + exp(0 - $f1));
+#X text 395 191 C;
+#X obj 168 292 expr ($f1 - $f2)/($f3 - $f2);
+#N canvas 0 22 466 316 constrain 0;
+#X obj 71 17 inlet;
+#X obj 107 229 outlet;
+#X obj 71 169 bang;
+#X text 151 169 constrain to >0;
+#X obj 71 149 moses 0.0001;
+#X msg 71 190 0.0001;
+#X obj 71 66 moses 1;
+#X text 120 66 constraing to <1;
+#X obj 110 86 bang;
+#X msg 110 107 0.9999;
+#X connect 0 0 6 0;
+#X connect 2 0 5 0;
+#X connect 4 0 2 0;
+#X connect 4 1 1 0;
+#X connect 5 0 1 0;
+#X connect 6 0 4 0;
+#X connect 6 1 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 4 0;
+#X restore 353 89 pd constrain to 0<x<1;
+#X connect 0 0 10 0;
+#X connect 2 0 4 0;
+#X connect 3 0 4 0;
+#X connect 4 0 14 0;
+#X connect 5 0 6 0;
+#X connect 5 0 10 1;
+#X connect 5 0 11 0;
+#X connect 6 0 13 1;
+#X connect 10 0 13 0;
+#X connect 11 0 13 2;
+#X connect 13 0 1 0;
+#X connect 14 0 5 0;