aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Kelly <edkelly@users.sourceforge.net>2009-05-10 14:42:56 +0000
committerEd Kelly <edkelly@users.sourceforge.net>2009-05-10 14:42:56 +0000
commitf9740cad349961fac05e38338900b81f4d5ddd86 (patch)
tree660b7250c53f431a1cb7251a2338b7b21e33a791
parent8c9711563e2514fb6641422e17b6b9432a240dbd (diff)
Changed behaviour for weightonset
svn path=/trunk/externals/ekext/; revision=11313
-rw-r--r--weightonset/help-weightonset.pd140
-rw-r--r--weightonset/weightonset.c14
-rwxr-xr-xweightonset/weightonset.pd_linuxbin3016 -> 3060 bytes
3 files changed, 82 insertions, 72 deletions
diff --git a/weightonset/help-weightonset.pd b/weightonset/help-weightonset.pd
index 375bacd..99985ac 100644
--- a/weightonset/help-weightonset.pd
+++ b/weightonset/help-weightonset.pd
@@ -14,21 +14,21 @@ from the FFT;
#X connect 2 1 3 1;
#X connect 3 0 4 0;
#X connect 5 0 3 2;
-#X restore 44 418 pd hasc;
-#X obj 128 346 bonk~;
+#X restore 44 446 pd hasc;
+#X obj 128 374 bonk~;
#N canvas 0 0 450 300 (subpatch) 0;
#X array \$0-input 106595 float 0;
#X coords 0 1 106594 -1 200 51 1;
-#X restore 287 309 graph;
-#X obj 128 370 t b b;
-#X obj 81 506 f;
-#X floatatom 96 487 5 0 0 0 - - -;
-#X floatatom 168 348 5 0 99 0 - - -;
-#X obj 81 526 print end-value;
-#X obj 43 324 tabplay~ \$0-input;
-#X floatatom 75 354 5 0 100 0 - - -;
-#X floatatom 75 396 5 0 0 0 - - -;
-#X obj 75 374 * 0.1;
+#X restore 287 337 graph;
+#X obj 128 398 t b b;
+#X obj 81 534 f;
+#X floatatom 96 515 5 0 0 0 - - -;
+#X floatatom 168 376 5 0 99 0 - - -;
+#X obj 81 554 print end-value;
+#X obj 43 352 tabplay~ \$0-input;
+#X floatatom 75 382 5 0 100 0 - - -;
+#X floatatom 75 424 5 0 0 0 - - -;
+#X obj 75 402 * 0.1;
#N canvas 0 0 450 300 tw 0;
#X obj 274 70 inlet;
#X msg 274 91 0;
@@ -51,12 +51,12 @@ from the FFT;
#X connect 7 0 8 0;
#X connect 8 0 9 0;
#X connect 8 1 6 0;
-#X restore 39 519 pd tw;
+#X restore 39 547 pd tw;
#N canvas 0 0 450 300 (subpatch) 0;
#X array \$0-hasc 1 float 3;
#A 0 0;
#X coords 0 511 1 -1 200 51 1;
-#X restore 287 380 graph;
+#X restore 287 408 graph;
#N canvas 0 0 450 300 adapt 0;
#X obj 128 44 inlet;
#X obj 127 74 / 100;
@@ -70,10 +70,10 @@ from the FFT;
#X connect 2 1 4 1;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
-#X restore 168 367 pd adapt;
-#X floatatom 168 401 5 0 0 1 influence - -;
-#X obj 168 308 loadbang;
-#X obj 88 276 bng 15 250 50 0 empty empty load 17 7 0 10 -262144 -1
+#X restore 168 395 pd adapt;
+#X floatatom 168 429 5 0 0 1 influence - -;
+#X obj 168 336 loadbang;
+#X obj 88 304 bng 15 250 50 0 empty empty load 17 7 0 10 -262144 -1
-1;
#N canvas 211 176 325 300 loadfile 0;
#X obj 44 28 openpanel;
@@ -106,16 +106,16 @@ from the FFT;
#X connect 11 0 0 0;
#X connect 13 0 14 0;
#X connect 14 0 1 0;
-#X restore 88 295 pd loadfile;
-#X obj 43 276 bng 12 250 50 0 empty empty play 15 6 0 10 -262144 -1
+#X restore 88 323 pd loadfile;
+#X obj 43 304 bng 12 250 50 0 empty empty play 15 6 0 10 -262144 -1
-1;
-#X obj 43 291 t b b;
+#X obj 43 319 t b b;
#N canvas 0 0 450 300 (subpatch) 0;
#X array \$0-weightonset 1 float 3;
#A 0 0;
#X coords 0 511 1 -1 200 51 1;
-#X restore 287 450 graph;
-#X obj 116 407 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+#X restore 287 478 graph;
+#X obj 116 435 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-257985 -1;
#X text 56 49 The second value is multipled by the value in the second
inlet (range 0-1) and added to the first value. Then \, the divider
@@ -124,10 +124,10 @@ by this value \, and added to it.;
#X text 46 8 This object makes a moving average with successively less
important values. The calculation initiates when the object is banged
\, and the first value is the most influential.;
-#X msg 65 444 1;
-#X obj 130 445 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+#X msg 65 472 1;
+#X obj 130 473 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
-#X obj 195 500 print data;
+#X obj 195 528 print data;
#X text 78 161 When the object is banged the right outlet sends a list
of all the values that influenced the result since the last bang \,
up to a limit of 1024 values.;
@@ -163,53 +163,46 @@ up to a limit of 1024 values.;
#X text 538 119 V;
#X text 531 132 data dump;
#X text 537 143 on bang;
-#X text 616 389 1: accumulated average (up to 1024 elements);
-#X msg 49 354 5;
-#X text 212 411 factor;
-#X text 202 387 successive;
+#X msg 49 382 5;
+#X text 212 439 factor;
+#X text 202 415 successive;
#X text 64 101 The influence of successive values is lessened by the
inverse of the factor on the right inlet. So \, a value of 0.2 in the
second inlet means that the second value after the bang is 20% as influential
as the first \, and the third value is 20% of 20% (4%) as influential
as the first.;
-#X floatatom 195 437 5 0 10 1 attack - -;
+#X floatatom 195 465 5 0 10 1 attack - -;
#X text 509 200 influence factor = 0 : 1st float output only;
#X text 510 188 attack length = 0 \,;
#X text 535 166 EXAMPLES:;
#X text 520 226 attack length = 0 \,;
#X text 519 238 influence factor = 1: successive values are;
-#X text 232 447 phase;
-#X text 232 461 0-100;
+#X text 232 475 phase;
+#X text 232 489 0-100;
#X text 508 252 equally influential to the total \, but the list;
#X text 492 31 successive influence factor (0-1);
#X text 538 58 V;
#X text 538 54 |;
-#X text 525 43 attack phase (1-100+);
#X text 514 265 grows longer as the numbers are added. Therefore;
#X text 506 278 the output responds less and less to input values.
;
#X text 513 291 This is an accumulating average between bangs.;
#X text 511 313 attack length = 0 \,;
#X text 634 366 (w) = weightings (influence values);
-#X text 509 405 the output is onset-weighted e.g. the most influential
+#X text 509 393 the output is onset-weighted e.g. the most influential
values are at the start of the series.;
-#X text 700 462 ^;
-#X text 699 466 |;
-#X text 699 475 |;
-#X text 760 462 ^;
-#X text 759 466 |;
-#X text 759 475 |;
-#X text 824 462 ^;
-#X text 823 466 |;
-#X text 823 475 |;
+#X text 699 462 ^;
+#X text 698 466 |;
+#X text 698 475 |;
+#X text 769 462 ^;
+#X text 768 466 |;
+#X text 768 475 |;
+#X text 832 462 ^;
+#X text 831 466 |;
+#X text 831 475 |;
#X text 680 501 of successive inputs;
-#X text 622 513 1: accumulated average (up to 1024 elements);
#X text 656 490 (w) = weightings (influence values);
-#X text 515 529 the output is onset-weighted e.g. the most influential
-values are at the start of the series.;
#X text 517 437 attack length = 3 \,;
-#X text 513 451 influence factor = 0.5: v1 w 0.25 \, v2 w 0.5 \, v3
-w 0.75 \, v4 w 1 \, v5 w 0.5 \, v6 w 0.25...;
#X text 509 327 influence factor = 0.5: v1 w 1 \, v2 w 0.5 \, v3 w
0.25 \, v4 w 0.125;
#X text 86 200 If the attack phase is greater than 0 \, the values
@@ -217,15 +210,28 @@ become successively more influential to the weighted average \, until
the number of values is equal to the attack+1. The next value after
the attack phase is the most influential \, then the influence factor
kicks in and successive values become less influential.;
-#X text 552 73 creation args: influence factor \, attack;
-#X obj 96 467 weightonset 0.8 0;
-#X obj 10 361 dac~;
-#X msg 168 328 80;
+#X text 557 71 creation args: influence factor \, attack;
+#X obj 96 495 weightonset 0.8 0;
+#X obj 10 381 dac~;
+#X msg 168 356 80;
+#X text 513 451 influence factor = 0.5: v1 w 0.125 \, v2 w 0.25 \,
+v3 w 0.5 \, v4 w 1 \, v5 w 0.5 \, v6 w 0.25...;
+#X text 525 43 attack phase (0-100+);
+#X obj 664 183 weightonset 0 0;
+#X obj 666 222 weightonset 1 0;
+#X obj 674 312 weightonset 0.5 0;
+#X obj 676 434 weightonset 0.5 3;
+#X text 509 517 the output is onset-weighted e.g. the most influential
+values are at the start of the series \, after the attack phase in
+which the values become successively more influential.;
+#X text 99 269 The weightings of values during the attack phase is
+the reverse of successive weightings after the attack:;
+#X text 226 294 weighting = influence pow(attack - index);
#X connect 0 0 12 0;
-#X connect 0 0 103 0;
+#X connect 0 0 98 0;
#X connect 1 0 3 0;
#X connect 3 0 22 0;
-#X connect 3 0 103 0;
+#X connect 3 0 98 0;
#X connect 3 1 4 0;
#X connect 4 0 7 0;
#X connect 5 0 4 1;
@@ -233,23 +239,23 @@ kicks in and successive values become less influential.;
#X connect 6 0 14 0;
#X connect 8 0 0 0;
#X connect 8 0 1 0;
-#X connect 8 0 104 0;
-#X connect 8 0 104 1;
+#X connect 8 0 99 0;
+#X connect 8 0 99 1;
#X connect 9 0 11 0;
#X connect 10 0 0 1;
#X connect 11 0 10 0;
#X connect 14 0 15 0;
-#X connect 14 0 103 1;
-#X connect 16 0 105 0;
-#X connect 16 0 62 0;
+#X connect 14 0 98 1;
+#X connect 16 0 100 0;
+#X connect 16 0 61 0;
#X connect 17 0 18 0;
#X connect 19 0 20 0;
#X connect 20 0 8 0;
#X connect 20 1 12 2;
-#X connect 25 0 103 0;
-#X connect 26 0 103 0;
-#X connect 62 0 9 0;
-#X connect 66 0 103 2;
-#X connect 103 0 5 0;
-#X connect 103 1 27 0;
-#X connect 105 0 6 0;
+#X connect 25 0 98 0;
+#X connect 26 0 98 0;
+#X connect 61 0 9 0;
+#X connect 65 0 98 2;
+#X connect 98 0 5 0;
+#X connect 98 1 27 0;
+#X connect 100 0 6 0;
diff --git a/weightonset/weightonset.c b/weightonset/weightonset.c
index 0117b84..44265a2 100644
--- a/weightonset/weightonset.c
+++ b/weightonset/weightonset.c
@@ -25,11 +25,15 @@ void weightonset_float (t_weightonset *x, t_floatarg fin)
SETFLOAT(&x->x_datachunk.data[len], fin);
if(x->length < x->attack)
{
- x->increment = 1 / (x->attack + 1);
- x->accumulator += fin*(x->length + 1)*x->increment;
-// x->increment*len substitutes for the divider
-// during the attack phase
- x->divaccum += x->increment*(x->length + 1);
+ int i;
+ float weight = 1;
+ x->increment = x->length - x->attack;
+ for(i=0;i<x->increment;i++)
+ {
+ weight = weight*x->multiplier;
+ }
+ x->accumulator += fin*weight;
+ x->divaccum += weight;
x->weighted = x->accumulator / x->divaccum;
outlet_float(x->waverage, x->weighted);
}
diff --git a/weightonset/weightonset.pd_linux b/weightonset/weightonset.pd_linux
index ec673ec..ef37524 100755
--- a/weightonset/weightonset.pd_linux
+++ b/weightonset/weightonset.pd_linux
Binary files differ