aboutsummaryrefslogtreecommitdiff
path: root/externals
diff options
context:
space:
mode:
Diffstat (limited to 'externals')
-rw-r--r--externals/grill/vasp/changes.txt1
-rw-r--r--externals/grill/vasp/pd-help/vasp_sframes.pd111
-rw-r--r--externals/grill/vasp/pd-help/vasp_soffset.pd162
-rw-r--r--externals/grill/vasp/source/main.cpp2
-rw-r--r--externals/grill/vasp/source/opparam.h2
-rw-r--r--externals/grill/vasp/source/ops_search.cpp74
-rw-r--r--externals/grill/vasp/todo.txt3
-rw-r--r--externals/grill/xsample/source/groove.cpp22
-rw-r--r--externals/grill/xsample/source/main.cpp12
-rw-r--r--externals/grill/xsample/source/main.h2
10 files changed, 260 insertions, 131 deletions
diff --git a/externals/grill/vasp/changes.txt b/externals/grill/vasp/changes.txt
index c4df2400..9c812a17 100644
--- a/externals/grill/vasp/changes.txt
+++ b/externals/grill/vasp/changes.txt
@@ -17,6 +17,7 @@ Version history:
- CHANGE: changed behavior of vasp.spit on uneven vector counts
[vasp a b c( -> [vasp.spit 2] now outputs a(outlet 2), b(outlet 1), c(outlet 2), bang(outlet 3)
- REMOVE: eliminated [vasp.cconj] as an object as it can easily be replaced by an abstraction
+- ADD: vasp.search (vasp.o=, vasp.f=) objects... @incl attribute (default false) to include current sample into search
0.1.2:
- FIX: bug in vasp.frames* ... wrong argument
diff --git a/externals/grill/vasp/pd-help/vasp_sframes.pd b/externals/grill/vasp/pd-help/vasp_sframes.pd
index 510f50b4..6e7ee2d1 100644
--- a/externals/grill/vasp/pd-help/vasp_sframes.pd
+++ b/externals/grill/vasp/pd-help/vasp_sframes.pd
@@ -1,4 +1,4 @@
-#N canvas 39 37 929 624 10;
+#N canvas 39 37 931 626 10;
#X obj 58 31 cnv 15 15 15 empty empty vasp.frames= 0 10 1 14 -262144
-1 0;
#N canvas 0 0 450 300 graph1 0;
@@ -16,7 +16,7 @@
#X connect 0 0 3 0;
#X connect 2 0 1 0;
#X connect 3 0 1 0;
-#X restore 798 498 pd init;
+#X restore 798 533 pd init;
#X obj 57 402 vasp.update;
#X text 113 443 abbreviation;
#N canvas 0 0 450 300 graph1 0;
@@ -45,8 +45,28 @@ value is negative;
#X obj 190 260 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
-1;
#X text 218 274 the value 0.7 appears in the ramp;
-#X text 218 259 2 generate noise until the position \, where;
-#N canvas 77 60 429 598 dir_and_target 0;
+#X obj 540 400 cnv 15 15 15 empty empty --> 0 10 0 14 -262144 -24198
+0;
+#X msg 562 499 vasp bufsfram2;
+#N canvas 249 259 328 183 clear 0;
+#X obj 74 54 inlet;
+#X obj 74 77 vasp.= 0;
+#X obj 74 100 vasp.u;
+#X obj 168 53 r \$0-clear;
+#X msg 168 76 vasp bufsfram2;
+#X obj 168 99 vasp.= 0;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X restore 562 525 pd clear;
+#X text 537 376 3 more features!;
+#X text 56 56 search for a value (starting at the end) and set the
+length of the vasp according to it;
+#X text 55 482 related objects:;
+#X obj 139 502 vasp.f;
+#X obj 204 502 vasp.s;
+#N canvas 77 60 522 606 dir_and_slope 0;
#X text 46 56 forward;
#X text 48 154 backward;
#X text 31 22 search direction;
@@ -64,7 +84,7 @@ value is negative;
#X obj 210 111 bng 15 250 50 0 \$0-clear empty empty 0 -6 1152 8 -262144
-1 -1;
#X text 228 111 (clear);
-#X floatatom 234 175 12 0 0 0 - - -;
+#X floatatom 224 177 12 0 0 0 - - -;
#X msg 126 336 slope 1;
#X msg 110 367 slope 0;
#X msg 97 399 slope -1;
@@ -72,7 +92,7 @@ value is negative;
#X obj 264 376 bng 15 250 50 0 \$0-clear empty empty 0 -6 1152 8 -262144
-1 -1;
#X text 282 376 (clear);
-#X floatatom 300 423 12 0 0 0 - - -;
+#X floatatom 283 426 12 0 0 0 - - -;
#X text 29 290 find values with positive and/or negative slope;
#X obj 185 197 vasp.-> bufsfram2;
#X obj 239 481 vasp.noise;
@@ -82,6 +102,14 @@ value is negative;
#X obj 185 153 vasp.f= 0;
#X msg 185 71 vasp 44101 bufsfram1;
#X msg 239 336 vasp 0 bufsfram1;
+#X text 40 438 query;
+#X msg 109 436 getslope;
+#X obj 369 424 prepend set;
+#X msg 368 445;
+#X obj 317 175 prepend set;
+#X msg 316 196;
+#X text 50 191 query;
+#X msg 109 191 getdir;
#X connect 8 0 9 0;
#X connect 10 0 30 0;
#X connect 11 0 30 0;
@@ -98,32 +126,59 @@ value is negative;
#X connect 28 1 26 0;
#X connect 29 0 28 0;
#X connect 29 1 23 0;
+#X connect 29 2 35 0;
#X connect 30 0 25 0;
#X connect 30 1 16 0;
+#X connect 30 2 37 0;
#X connect 31 0 13 0;
#X connect 32 0 20 0;
-#X restore 586 418 pd dir_and_target;
-#X obj 538 415 cnv 15 15 15 empty empty --> 0 10 0 14 -262144 -24198
-0;
-#X msg 562 464 vasp bufsfram2;
-#N canvas 249 259 328 183 clear 0;
-#X obj 74 54 inlet;
-#X obj 74 77 vasp.= 0;
-#X obj 74 100 vasp.u;
-#X obj 168 53 r \$0-clear;
-#X msg 168 76 vasp bufsfram2;
-#X obj 168 99 vasp.= 0;
+#X connect 34 0 29 0;
+#X connect 35 0 36 0;
+#X connect 37 0 38 0;
+#X connect 40 0 30 0;
+#X restore 588 403 pd dir_and_slope;
+#X text 218 259 2 generate noise up to the position where;
+#N canvas 80 75 458 321 incl 0;
+#X obj 168 260 vasp.noise;
+#X obj 168 281 vasp.u;
+#X obj 168 214 vasp.o?;
+#X obj 170 135 t a b;
+#X obj 195 161 bng 15 250 50 0 \$0-clear empty empty 0 -6 1152 8 -262144
+-1 -1;
+#X text 213 161 (clear);
+#X floatatom 261 211 5 0 0 0 - - -;
+#X text 24 17 include current sample;
+#X obj 170 109 vasp.u;
+#X msg 68 93 incl 0;
+#X msg 68 143 incl 1;
+#X text 21 73 don't include (default);
+#X text 20 126 do include;
+#X text 21 188 query;
+#X msg 68 189 getincl;
+#X obj 300 210 prepend set;
+#X msg 170 61 vasp bufsfram1;
+#X msg 168 239 vasp bufsfram2 \$1;
+#X obj 170 86 vasp.= env 0.5 40000 -0.5 60000;
+#X msg 301 231;
+#X obj 170 185 vasp.frames= -0.5;
#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 3 0 4 0;
-#X connect 4 0 5 0;
-#X restore 562 490 pd clear;
-#X text 537 398 3 more features!;
-#X text 56 56 search for a value (starting at the end) and set the
-length of the vasp according to it;
-#X text 55 482 related objects:;
-#X obj 139 502 vasp.f;
-#X obj 204 502 vasp.s;
+#X connect 2 0 17 0;
+#X connect 3 0 20 0;
+#X connect 3 1 4 0;
+#X connect 8 0 3 0;
+#X connect 9 0 20 0;
+#X connect 10 0 20 0;
+#X connect 14 0 20 0;
+#X connect 15 0 19 0;
+#X connect 16 0 18 0;
+#X connect 17 0 0 0;
+#X connect 18 0 8 0;
+#X connect 20 0 2 0;
+#X connect 20 1 6 0;
+#X connect 20 2 15 0;
+#X restore 588 428 pd incl;
+#X obj 540 430 cnv 15 15 15 empty empty --> 0 10 0 14 -262144 -24198
+0;
#X connect 9 0 3 0;
#X connect 11 0 14 0;
#X connect 12 0 13 0;
@@ -133,4 +188,4 @@ length of the vasp according to it;
#X connect 18 1 9 0;
#X connect 20 0 11 0;
#X connect 22 0 12 0;
-#X connect 27 0 28 0;
+#X connect 25 0 26 0;
diff --git a/externals/grill/vasp/pd-help/vasp_soffset.pd b/externals/grill/vasp/pd-help/vasp_soffset.pd
index 8a515a2a..6b77de7c 100644
--- a/externals/grill/vasp/pd-help/vasp_soffset.pd
+++ b/externals/grill/vasp/pd-help/vasp_soffset.pd
@@ -1,4 +1,4 @@
-#N canvas 31 15 964 662 10;
+#N canvas 23 9 968 641 10;
#X text 54 77 argument/right inlet: value;
#X obj 58 27 cnv 15 15 15 empty empty vasp.offset= 0 10 1 14 -262144
-1 0;
@@ -8,7 +8,7 @@
#X array bufsoffs1 1000 float 0;
#X coords 0 1 999 -1 300 100 1;
#X restore 551 88 graph;
-#N canvas 466 356 387 251 init 0;
+#N canvas 466 356 391 255 init 0;
#X obj 33 19 loadbang;
#X msg 33 45 symbol bufsoffs1;
#X msg 151 45 symbol bufsoffs2;
@@ -38,7 +38,7 @@
#X obj 64 325 vasp.o?;
#X msg 64 346 vasp bufsoffs2 \$1;
#X text 54 59 search for a value set it as offset;
-#X floatatom 161 271 5 0 0;
+#X floatatom 161 271 5 0 0 0 - - -;
#X obj 170 130 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
-1;
#X obj 170 221 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
@@ -52,21 +52,74 @@
#X connect 0 0 2 0;
#X connect 1 0 0 0;
#X connect 2 0 3 0;
-#X restore 683 549 pd clear_buffer;
-#X msg 683 528 vasp bufsoffs2;
-#X text 703 508 clear second buffer;
-#X obj 683 509 bng 15 250 50 0 empty \$0-clear empty 0 -6 576 8 -262144
+#X restore 633 556 pd clear_buffer;
+#X msg 633 535 vasp bufsoffs2;
+#X text 653 515 clear second buffer;
+#X obj 633 516 bng 15 250 50 0 empty \$0-clear empty 0 -6 576 8 -262144
-1 -1;
-#X obj 162 445 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+#X obj 147 445 bng 15 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
-1;
-#N canvas 77 60 409 578 dir_and_target 0;
+#X obj 64 151 vasp.= env -1 0 1 500 -1 1000;
+#X obj 102 496 t a b;
+#X obj 127 517 bng 15 250 50 0 \$0-clear empty empty 0 -6 1152 8 -262144
+-1 -1;
+#X text 145 517 (clear);
+#X obj 612 391 cnv 15 15 15 empty empty --> 0 10 0 14 -262144 -24198
+0;
+#X text 214 232 where the ramp is at 0.2;
+#X obj 64 242 vasp.offset= 0.2;
+#X text 174 444 3 start searching at frame 501;
+#X msg 102 475 vasp bufsoffs1 501;
+#X text 133 419 the search always starts at the offset point;
+#N canvas 80 75 454 317 incl 0;
+#X obj 168 260 vasp.noise;
+#X obj 168 281 vasp.u;
+#X msg 168 239 vasp bufsoffs2 \$1;
+#X obj 168 214 vasp.o?;
+#X obj 170 135 t a b;
+#X obj 195 161 bng 15 250 50 0 \$0-clear empty empty 0 -6 1152 8 -262144
+-1 -1;
+#X text 213 161 (clear);
+#X floatatom 261 211 5 0 0 0 - - -;
+#X text 24 17 include current sample;
+#X msg 170 61 vasp bufsoffs1;
+#X obj 170 185 vasp.offset= 0.5;
+#X obj 170 109 vasp.u;
+#X obj 170 86 vasp.= env 0.5 500 -0.5 700;
+#X msg 68 93 incl 0;
+#X msg 68 143 incl 1;
+#X text 21 73 don't include (default);
+#X text 20 126 do include;
+#X text 21 188 query;
+#X msg 68 189 getincl;
+#X obj 300 210 prepend set;
+#X msg 301 231;
+#X connect 0 0 1 0;
+#X connect 2 0 0 0;
+#X connect 3 0 2 0;
+#X connect 4 0 10 0;
+#X connect 4 1 5 0;
+#X connect 9 0 12 0;
+#X connect 10 0 3 0;
+#X connect 10 1 7 0;
+#X connect 10 2 19 0;
+#X connect 11 0 4 0;
+#X connect 12 0 11 0;
+#X connect 13 0 10 0;
+#X connect 14 0 10 0;
+#X connect 18 0 10 0;
+#X connect 19 0 20 0;
+#X restore 660 421 pd incl;
+#X obj 612 423 cnv 15 15 15 empty empty --> 0 10 0 14 -262144 -24198
+0;
+#N canvas 77 60 447 584 dir_and_slope 0;
#X text 46 56 forward;
#X text 48 154 backward;
#X text 31 22 search direction;
-#X text 58 369 both;
-#X text 28 401 negative;
-#X text 58 337 positive;
-#X text 28 314 target slope;
+#X text 56 371 both;
+#X text 26 403 negative;
+#X text 56 339 positive;
+#X text 26 316 target slope;
#X text 46 99 both (nearest);
#X obj 183 210 vasp.noise;
#X obj 183 231 vasp.u;
@@ -81,22 +134,32 @@
#X text 228 111 (clear);
#X obj 185 135 vasp.offset= 0.1;
#X msg 185 71 vasp bufsoffs1 500;
-#X floatatom 276 161 5 0 0;
-#X msg 126 336 slope 1;
-#X msg 110 367 slope 0;
-#X msg 97 399 slope -1;
-#X obj 239 484 vasp.noise;
-#X obj 239 505 vasp.u;
-#X msg 239 463 vasp bufsoffs2 \$1;
-#X obj 239 438 vasp.o?;
-#X obj 239 355 t a b;
-#X obj 264 376 bng 15 250 50 0 \$0-clear empty empty 0 -6 1152 8 -262144
+#X floatatom 276 161 5 0 0 0 - - -;
+#X msg 124 338 slope 1;
+#X msg 108 369 slope 0;
+#X msg 95 401 slope -1;
+#X obj 237 486 vasp.noise;
+#X obj 237 507 vasp.u;
+#X msg 237 465 vasp bufsoffs2 \$1;
+#X obj 237 440 vasp.o?;
+#X obj 237 357 t a b;
+#X obj 262 378 bng 15 250 50 0 \$0-clear empty empty 0 -6 1152 8 -262144
-1 -1;
-#X text 282 376 (clear);
-#X obj 239 400 vasp.offset= 0.1;
-#X floatatom 330 426 5 0 0;
-#X text 29 290 find values with positive and/or negative slope;
-#X msg 239 336 vasp bufsoffs1;
+#X text 280 378 (clear);
+#X obj 237 402 vasp.offset= 0.1;
+#X floatatom 308 430 5 0 0 0 - - -;
+#X text 27 292 find values with positive and/or negative slope;
+#X msg 237 338 vasp bufsoffs1;
+#X text 47 197 query;
+#X msg 104 197 getdir;
+#X text 50 434 query;
+#X msg 109 437 getslope;
+#X obj 315 158 prepend set;
+#X msg 314 180;
+#X obj 315 158 prepend set;
+#X msg 314 180;
+#X obj 354 431 prepend set;
+#X msg 355 452;
#X connect 8 0 9 0;
#X connect 10 0 8 0;
#X connect 11 0 18 0;
@@ -107,6 +170,7 @@
#X connect 15 1 16 0;
#X connect 18 0 14 0;
#X connect 18 1 20 0;
+#X connect 18 2 39 0;
#X connect 19 0 15 0;
#X connect 21 0 31 0;
#X connect 22 0 31 0;
@@ -118,24 +182,18 @@
#X connect 28 1 29 0;
#X connect 31 0 27 0;
#X connect 31 1 32 0;
+#X connect 31 2 43 0;
#X connect 34 0 28 0;
-#X restore 612 422 pd dir_and_target;
-#X obj 64 151 vasp.= env -1 0 1 500 -1 1000;
-#X obj 102 496 t a b;
-#X obj 127 517 bng 15 250 50 0 \$0-clear empty empty 0 -6 1152 8 -262144
--1 -1;
-#X text 145 517 (clear);
-#X text 148 418 the search always starts at the offsetpoint;
-#X text 566 403 more features!;
-#X obj 564 419 cnv 15 15 15 empty empty --> 0 10 0 14 -262144 -24198
-0;
-#X text 214 232 where the ramp is at 0.2;
-#X obj 64 242 vasp.offset= 0.2;
-#X text 189 443 3 start searching at frame 501;
-#X msg 102 475 vasp bufsoffs1 501;
+#X connect 36 0 18 0;
+#X connect 38 0 31 0;
+#X connect 39 0 40 0;
+#X connect 41 0 42 0;
+#X connect 43 0 44 0;
+#X restore 660 394 pd dir_and_slope;
+#X text 614 375 3 more features!;
#X connect 3 0 10 0;
-#X connect 8 0 30 0;
-#X connect 9 0 38 0;
+#X connect 8 0 29 0;
+#X connect 9 0 35 0;
#X connect 11 0 12 0;
#X connect 18 0 19 0;
#X connect 19 0 11 0;
@@ -143,11 +201,11 @@
#X connect 23 0 9 0;
#X connect 25 0 24 0;
#X connect 27 0 25 0;
-#X connect 28 0 40 0;
-#X connect 30 0 7 0;
-#X connect 31 0 38 0;
-#X connect 31 1 32 0;
-#X connect 38 0 18 0;
-#X connect 38 0 3 0;
-#X connect 38 1 21 0;
-#X connect 40 0 31 0;
+#X connect 28 0 37 0;
+#X connect 29 0 7 0;
+#X connect 30 0 35 0;
+#X connect 30 1 31 0;
+#X connect 35 0 18 0;
+#X connect 35 0 3 0;
+#X connect 35 1 21 0;
+#X connect 37 0 30 0;
diff --git a/externals/grill/vasp/source/main.cpp b/externals/grill/vasp/source/main.cpp
index 2f7d9f11..e1c3e42d 100644
--- a/externals/grill/vasp/source/main.cpp
+++ b/externals/grill/vasp/source/main.cpp
@@ -12,7 +12,7 @@ WARRANTIES, see the file, "license.txt," in this distribution.
#include "classes.h"
-const C *VASP_VERSION = "0.1.3pre7";
+const C *VASP_VERSION = "0.1.3pre8";
#include "opfuns.h"
diff --git a/externals/grill/vasp/source/opparam.h b/externals/grill/vasp/source/opparam.h
index 0b6e5bd5..473b76c4 100644
--- a/externals/grill/vasp/source/opparam.h
+++ b/externals/grill/vasp/source/opparam.h
@@ -111,7 +111,7 @@ public:
struct { R arg; } rbin;
struct { R rarg,iarg; } cbin;
struct { I *order; } perm;
- struct { R val; I offs,dif,dir,slope; } srch;
+ struct { R val; I offs,dif,dir,slope; BL incl; } srch;
};
private:
diff --git a/externals/grill/vasp/source/ops_search.cpp b/externals/grill/vasp/source/ops_search.cpp
index 7e8bbee6..d805437d 100644
--- a/externals/grill/vasp/source/ops_search.cpp
+++ b/externals/grill/vasp/source/ops_search.cpp
@@ -22,37 +22,43 @@ BL VecOp::d_search(OpParam &p)
I i,ofl = -1,ofr = -1;
- if(p.srch.dir <= 0) {
- BL y = cur >= val;
- i = off-1;
- _D_WHILE(i >= 0)
- BL y2 = p.rsdt[i] >= val;
- if(y != y2) {
- if(p.srch.slope <= 0 && y2) break;
- if(p.srch.slope >= 0 && !y2) break;
- }
- y = y2;
- --i;
- _E_WHILE
-
- if(i >= 0) ofl = i;
- }
-
- if(p.srch.dir >= 0) {
- BL y = cur >= val;
- i = off+1;
- _D_WHILE(i < p.frames)
- BL y2 = p.rsdt[i] >= val;
- if(y != y2) {
- if(p.srch.slope <= 0 && !y2) break;
- if(p.srch.slope >= 0 && y2) break;
- }
- y = y2;
- ++i;
- _E_WHILE
-
- if(i < p.frames) ofr = i;
- }
+ if(p.srch.incl && cur == val) {
+ // if @incl attribute is set and current sample matches
+ ofl = ofr = off;
+ }
+ else {
+ if(p.srch.dir <= 0) {
+ BL y = cur >= val;
+ i = off-1;
+ _D_WHILE(i >= 0)
+ BL y2 = p.rsdt[i] >= val;
+ if(y != y2) {
+ if(p.srch.slope <= 0 && y2) break;
+ if(p.srch.slope >= 0 && !y2) break;
+ }
+ y = y2;
+ --i;
+ _E_WHILE
+
+ if(i >= 0) ofl = i;
+ }
+
+ if(p.srch.dir >= 0) {
+ BL y = cur >= val;
+ i = off+1;
+ _D_WHILE(i < p.frames)
+ BL y2 = p.rsdt[i] >= val;
+ if(y != y2) {
+ if(p.srch.slope <= 0 && !y2) break;
+ if(p.srch.slope >= 0 && y2) break;
+ }
+ y = y2;
+ ++i;
+ _E_WHILE
+
+ if(i < p.frames) ofr = i;
+ }
+ }
if(!p.srch.dir) {
if(ofl >= 0) {
@@ -133,13 +139,14 @@ public:
vasp_search(I argc,t_atom *argv):
vasp_anyop(argc,argv,VASP_ARG_R(0),false,XletCode(xlet::tp_float,0)),
- slope(0),dir(0)
+ slope(0),dir(0),incl(false)
{}
static V Setup(t_classid c)
{
FLEXT_CADDATTR_VAR1(c,"dir",dir);
FLEXT_CADDATTR_VAR1(c,"slope",slope);
+ FLEXT_CADDATTR_VAR1(c,"incl",incl);
}
virtual Vasp *do_work(OpParam &p) = 0;
@@ -149,6 +156,7 @@ public:
OpParam p(thisName(),1);
p.srch.dir = dir;
p.srch.slope = slope;
+ p.srch.incl = incl;
Vasp *ret = do_work(p);
if(ret) ToOutFloat(1,p.srch.dif);
@@ -157,10 +165,12 @@ public:
protected:
I dir,slope;
+ BL incl;
private:
FLEXT_ATTRVAR_I(dir)
FLEXT_ATTRVAR_I(slope)
+ FLEXT_ATTRVAR_B(incl)
};
diff --git a/externals/grill/vasp/todo.txt b/externals/grill/vasp/todo.txt
index 8086a03f..21926ce4 100644
--- a/externals/grill/vasp/todo.txt
+++ b/externals/grill/vasp/todo.txt
@@ -25,6 +25,8 @@ warning, treat as 0, calculate unit operation, loop, mirror on buffer end, stay
- reduce number of warnings for wrong offset, frame size etc.
+- review vasp.f=, vasp.o= for quasi-constant envelopes
+
objects:
---------------------
@@ -35,7 +37,6 @@ objects:
- slope: frequency distortion with given exponent
-- vasp.trigger object... in PD [t a] is ok, what about Max?
- vasp.expr
- vasp.state.... current vasp, operation, progress meter
diff --git a/externals/grill/xsample/source/groove.cpp b/externals/grill/xsample/source/groove.cpp
index 5ddb997e..1c6f195f 100644
--- a/externals/grill/xsample/source/groove.cpp
+++ b/externals/grill/xsample/source/groove.cpp
@@ -311,7 +311,7 @@ V xgroove::m_xshape(I argc,const t_atom *argv)
switch(xshape) {
case 1:
for(i = 0; i <= XZONE_TABLE; ++i)
- znmul[i] = sin(i*(pi/2./XZONE_TABLE))*xshparam+i*(1./XZONE_TABLE)*(1-xshparam);
+ znmul[i] = ((sin(i*(pi/XZONE_TABLE)-pi/2.)+1)/2)*xshparam+i*(1./XZONE_TABLE)*(1-xshparam);
break;
case 0:
default:
@@ -358,15 +358,14 @@ V xgroove::do_xzone()
// must reduce crossfade/loop length
if(!xkeep) {
// prefer preservation of cross-fade length
- if(xzone >= plen) // have to reduce cross-fade length
- xzone = plen-1;
-// znmin = smin+xzone,znmax = smax-xzone;
+ if(xzone*2 >= plen) // have to reduce cross-fade length
+ xzone = plen/2;
znmin = xzone,znmax = buf->Frames()-xzone;
}
else {
// prefer preservation of loop length
znmin += o1,znmax -= o2;
- xzone = (buf->Frames()-znmax+znmin)/2;
+ xzone = (buf->Frames()-(znmax-znmin))/2;
}
znsmin = 0,znsmax = buf->Frames();
}
@@ -484,7 +483,7 @@ V xgroove::s_pos_loopzn(I n,S *const *invecs,S *const *outvecs)
S *pos = outvecs[outchns];
BL lpbang = false;
- const F xz = xzone,lmin = znmin,lmax = znmax;
+ const F xz = xzone,lmin = znmin,lmax = znmax,lsh = lmax+xz-lmin;
const F xf = (F)XZONE_TABLE/xz;
// adapt the playing bounds to the current cross-fade zone
@@ -511,14 +510,13 @@ V xgroove::s_pos_loopzn(I n,S *const *invecs,S *const *outvecs)
// in late cross-fade zone
// shift it into early zone
- o -= plen;
+ o -= lsh;
}
// now: lmin-xz <= o < lmax
if(o < lmin) {
// in early cross-fade zone
-// register F inp = o-smin; // -xz/2 <= inp <= xz/2
register F inp = xz-(lmin-o); // 0 <= inp < xz
znidx[i] = inp*xf;
znpos[i] = lmax+inp;
@@ -685,10 +683,10 @@ V xgroove::m_help()
post("\trefresh: checks buffer and refreshes outlets");
post("\t@units 0/1/2/3: set units to frames/buffer size/ms/s");
post("\t@sclmode 0/1/2/3: set range of position to units/units in loop/buffer/loop");
- post("\txzone {unit}: length of loop crossfade zone");
- post("\txsymm -1,0...1: symmetry of crossfade zone inside/outside point");
- post("\txshape 0/1 [param 0...1]: shape of crossfading (linear/trig)");
- post("\txkeep 0/1: try to preserve xzone/loop length");
+ post("\t@xzone {unit}: length of loop crossfade zone");
+ post("\t@xsymm -1,0...1: symmetry of crossfade zone inside/outside point");
+ post("\t@xshape 0/1 [param 0...1]: shape of crossfading (linear/trig)");
+ post("\t@xkeep 0/1: try to preserve xzone/loop length");
post("");
}
diff --git a/externals/grill/xsample/source/main.cpp b/externals/grill/xsample/source/main.cpp
index aa1f731e..1f79335f 100644
--- a/externals/grill/xsample/source/main.cpp
+++ b/externals/grill/xsample/source/main.cpp
@@ -14,9 +14,15 @@ WARRANTIES, see the file, "license.txt," in this distribution.
// Initialization function for xsample library
static V xsample_main()
{
- post("xsample objects, version " XSAMPLE_VERSION ", (C)2001-2003 Thomas Grill");
- post("xsample: xrecord~, xplay~, xgroove~ - send objects a 'help' message to get assistance");
- post("");
+ post("-------------------------------");
+ post("xsample objects, version " XSAMPLE_VERSION);
+ post("");
+ post(" xrecord~, xplay~, xgroove~ ");
+ post(" (C)2001-2003 Thomas Grill ");
+#ifdef FLEXT_DEBUG
+ post(" DEBUG BUILD ");
+#endif
+ post("-------------------------------");
// call the objects' setup routines
FLEXT_DSP_SETUP(xrecord);
diff --git a/externals/grill/xsample/source/main.h b/externals/grill/xsample/source/main.h
index 3ea04d70..2bbe71c7 100644
--- a/externals/grill/xsample/source/main.h
+++ b/externals/grill/xsample/source/main.h
@@ -11,7 +11,7 @@ WARRANTIES, see the file, "license.txt," in this distribution.
#ifndef __XSAMPLE_H
#define __XSAMPLE_H
-#define XSAMPLE_VERSION "0.3.0pre7"
+#define XSAMPLE_VERSION "0.3.0pre8"
#define FLEXT_ATTRIBUTES 1