diff options
-rw-r--r-- | externals/grill/flext/config-pd-linux.txt | 1 | ||||
-rw-r--r-- | externals/grill/xsample/pd/xrecord~.pd | 70 | ||||
-rw-r--r-- | externals/grill/xsample/readme.txt | 1 | ||||
-rw-r--r-- | externals/grill/xsample/source/main.h | 2 | ||||
-rw-r--r-- | externals/grill/xsample/source/record.cpp | 73 |
5 files changed, 96 insertions, 51 deletions
diff --git a/externals/grill/flext/config-pd-linux.txt b/externals/grill/flext/config-pd-linux.txt index 2a07f2eb..6962affc 100644 --- a/externals/grill/flext/config-pd-linux.txt +++ b/externals/grill/flext/config-pd-linux.txt @@ -4,7 +4,6 @@ # your c++ compiler (define only if it's different than g++) # CXX=g++ -CXX=icc # where are the PD header files? (m_pd.h, m_imp.h, g_canvas.h) # if it is a system include path (like /usr/local/include) diff --git a/externals/grill/xsample/pd/xrecord~.pd b/externals/grill/xsample/pd/xrecord~.pd index c9bfc7ce..e5ad866b 100644 --- a/externals/grill/xsample/pd/xrecord~.pd +++ b/externals/grill/xsample/pd/xrecord~.pd @@ -1,4 +1,4 @@ -#N canvas 134 12 859 612 12;
+#N canvas 134 12 861 614 12;
#X obj 14 15 bng 15 250 50 0 empty empty empty 20 8 0 8 -258699 -1
-1;
#X msg 13 35 stop;
@@ -43,12 +43,10 @@ 1;
#X msg 556 263 sigmode \$1;
#X msg 409 360 print;
-#X obj 581 353 hsl 128 15 -0.001 1 0 1 empty empty empty 20 8 0 8 -225271
+#X obj 563 368 hsl 128 15 -0.001 1 0 1 empty empty empty 20 8 0 8 -225271
-1 -1 3200 1;
-#X obj 537 291 tgl 15 0 empty empty empty 20 8 0 8 -225271 -1 -1 1
-1;
-#X msg 557 288 mixmode \$1;
-#X floatatom 629 381 8 0 0 0 - - -;
+#X msg 585 290 mixmode \$1;
+#X floatatom 629 386 8 0 0 0 - - -;
#X obj 411 473 metro 30;
#X obj 18 247 metro 30;
#X obj 640 21 osc~ 10;
@@ -71,13 +69,12 @@ #X text 26 270 position signal;
#X text 619 238 looping on/off;
#X text 644 264 signal mode on/off;
-#X text 700 381 trigger signal;
+#X text 698 379 trigger signal;
#X text 379 121 <----- message triggered;
#X text 173 368 signal triggered ------->;
#X text 493 185 click to activate auto update;
#X text 432 271 start;
#X text 450 295 stop;
-#X text 538 307 mix-in by trigger signal on/off;
#X msg 153 170 all;
#X msg 488 206 100;
#X obj 521 426 line~;
@@ -89,6 +86,11 @@ #X obj 541 28 tgl 15 1 empty empty empty 20 8 0 8 -225271 -1 -1 0 1
;
#X obj 561 24 noise~;
+#X obj 538 292 hradio 15 1 0 3 empty empty empty 0 -6 0 8 -262144 -1
+-1 0;
+#X text 559 309 mixmode (off \, mix-in \, add);
+#X text 566 339 by the trigger signal;
+#X text 565 326 the amount of mixing-in is given;
#X connect 0 0 7 0;
#X connect 1 0 7 0;
#X connect 4 0 7 2;
@@ -96,10 +98,10 @@ #X connect 7 0 9 0;
#X connect 7 1 2 0;
#X connect 7 2 3 0;
-#X connect 7 4 72 0;
+#X connect 7 4 70 0;
#X connect 8 0 7 0;
#X connect 9 0 10 0;
-#X connect 11 0 41 0;
+#X connect 11 0 40 0;
#X connect 12 0 7 0;
#X connect 13 0 14 0;
#X connect 14 0 7 0;
@@ -115,7 +117,7 @@ #X connect 24 2 21 0;
#X connect 25 0 24 0;
#X connect 26 0 27 0;
-#X connect 28 0 40 0;
+#X connect 28 0 39 0;
#X connect 29 0 30 0;
#X connect 30 0 24 0;
#X connect 31 0 32 0;
@@ -123,27 +125,27 @@ #X connect 33 0 34 0;
#X connect 34 0 24 0;
#X connect 35 0 24 0;
-#X connect 36 0 39 0;
-#X connect 36 0 70 0;
-#X connect 37 0 38 0;
-#X connect 38 0 24 0;
-#X connect 40 0 26 0;
-#X connect 41 0 9 0;
-#X connect 42 0 46 0;
-#X connect 43 0 7 0;
-#X connect 44 0 24 0;
-#X connect 46 0 45 0;
-#X connect 47 0 46 1;
-#X connect 48 0 45 0;
-#X connect 49 0 48 1;
-#X connect 50 0 48 0;
-#X connect 50 1 48 0;
-#X connect 67 0 7 0;
-#X connect 68 0 32 0;
-#X connect 69 0 24 1;
-#X connect 70 0 69 0;
+#X connect 36 0 38 0;
+#X connect 36 0 68 0;
+#X connect 37 0 24 0;
+#X connect 39 0 26 0;
+#X connect 40 0 9 0;
+#X connect 41 0 45 0;
+#X connect 42 0 7 0;
+#X connect 43 0 24 0;
+#X connect 45 0 44 0;
+#X connect 46 0 45 1;
+#X connect 47 0 44 0;
+#X connect 48 0 47 1;
+#X connect 49 0 47 0;
+#X connect 49 1 47 0;
+#X connect 65 0 7 0;
+#X connect 66 0 32 0;
+#X connect 67 0 24 1;
+#X connect 68 0 67 0;
+#X connect 69 0 7 0;
#X connect 71 0 7 0;
-#X connect 73 0 7 0;
-#X connect 74 0 45 0;
-#X connect 75 0 74 1;
-#X connect 76 0 74 0;
+#X connect 72 0 44 0;
+#X connect 73 0 72 1;
+#X connect 74 0 72 0;
+#X connect 75 0 37 0;
diff --git a/externals/grill/xsample/readme.txt b/externals/grill/xsample/readme.txt index b2fe3ebf..21c005c0 100644 --- a/externals/grill/xsample/readme.txt +++ b/externals/grill/xsample/readme.txt @@ -123,6 +123,7 @@ Version history: - makefiles for command line MSVC++, BCC, cygwin GCC - better handling of non-existent buffers - fixed flext-related error on setting buffers +- xrecord~: mixmode has now 3 states (off, mix-in, add) 0.2.4: - according to flext 0.2.3 changed sample type to t_sample (S) diff --git a/externals/grill/xsample/source/main.h b/externals/grill/xsample/source/main.h index 367632d6..d3ff0017 100644 --- a/externals/grill/xsample/source/main.h +++ b/externals/grill/xsample/source/main.h @@ -12,7 +12,7 @@ WARRANTIES, see the file, "license.txt," in this distribution. #define __XSAMPLE_H -#define XSAMPLE_VERSION "0.3.0pre15" +#define XSAMPLE_VERSION "0.3.0pre16" #define FLEXT_ATTRIBUTES 1 diff --git a/externals/grill/xsample/source/record.cpp b/externals/grill/xsample/source/record.cpp index 2f16a746..51fd56fc 100644 --- a/externals/grill/xsample/source/record.cpp +++ b/externals/grill/xsample/source/record.cpp @@ -51,7 +51,8 @@ protected: BL sigmode,appmode; F drintv; - BL dorec,doloop,mixmode; + BL dorec,doloop; + I mixmode; L curpos; // in samples inline V outputmin() { ToOutFloat(1,curmin*s2u); } @@ -77,7 +78,7 @@ private: FLEXT_CALLBACK_F(m_max) FLEXT_ATTRVAR_B(doloop) - FLEXT_ATTRVAR_B(mixmode) + FLEXT_ATTRVAR_I(mixmode) FLEXT_ATTRVAR_B(sigmode) FLEXT_CALLSET_B(m_append) FLEXT_ATTRGET_B(appmode) @@ -108,7 +109,7 @@ V xrecord::setup(t_classid c) xrecord::xrecord(I argc,const t_atom *argv): dorec(false), - sigmode(false),mixmode(false), + sigmode(false),mixmode(0), appmode(true),doloop(false), drintv(0), inchns(1) @@ -291,7 +292,8 @@ TMPLDEF V xrecord::s_rec(I n,S *const *invecs,S *const *outvecs) if(appmode) { // append to current position - if(!mixmode) { + switch(mixmode) { + case 0: for(i = 0; i < ncur; ++i,++si) { if(*(on++) >= 0) { for(int ci = 0; ci < ICHNS; ++ci) @@ -302,8 +304,8 @@ TMPLDEF V xrecord::s_rec(I n,S *const *invecs,S *const *outvecs) else *(pos++) = p; } - } - else { + break; + case 1: for(i = 0; i < ncur; ++i,++si) { register const S g = *(on++); if(g >= 0) { @@ -315,11 +317,25 @@ TMPLDEF V xrecord::s_rec(I n,S *const *invecs,S *const *outvecs) else *(pos++) = p; } - } + break; + case 2: + for(i = 0; i < ncur; ++i,++si) { + if(*(on++) >= 0) { + for(int ci = 0; ci < ICHNS; ++ci) + bf[ci] += sig[ci][si]; + bf += BCHNS; + *(pos++) = p,p += pf,++o; + } + else + *(pos++) = p; + } + break; + } } else { // don't append - if(!mixmode) { + switch(mixmode) { + case 0: for(i = 0; i < ncur; ++i,++si) { if(*(on++) >= 0) { @@ -333,8 +349,8 @@ TMPLDEF V xrecord::s_rec(I n,S *const *invecs,S *const *outvecs) bf = buf->Data(); } } - } - else { + break; + case 1: for(i = 0; i < ncur; ++i,++si) { register const S g = *(on++); if(g >= 0) { @@ -348,6 +364,22 @@ TMPLDEF V xrecord::s_rec(I n,S *const *invecs,S *const *outvecs) bf = buf->Data(); } } + break; + case 2: + for(i = 0; i < ncur; ++i,++si) { + if(*(on++) >= 0) + { + for(int ci = 0; ci < ICHNS; ++ci) + bf[ci] += sig[ci][si]; + bf += BCHNS; + *(pos++) = p,p += pf,++o; + } + else { + *(pos++) = p = scale(o = 0); + bf = buf->Data(); + } + } + break; } } } @@ -355,22 +387,33 @@ TMPLDEF V xrecord::s_rec(I n,S *const *invecs,S *const *outvecs) // message mode // Altivec optimization for that! - if(!mixmode) { + switch(mixmode) { + case 0: for(int ci = 0; ci < ICHNS; ++ci) { register S *b = bf+ci; register const F *s = sig[ci]; for(i = 0; i < ncur; ++i,b += BCHNS,++s) *b = *s; } si += ncur; - } - else { + break; + case 1: for(i = 0; i < ncur; ++i,++si) { register const S w = *(on++); for(int ci = 0; ci < ICHNS; ++ci) bf[ci] = bf[ci]*(1.-w)+sig[ci][si]*w; bf += BCHNS; } + break; + case 2: + for(int ci = 0; ci < ICHNS; ++ci) { + register S *b = bf+ci; + register const F *s = sig[ci]; + for(i = 0; i < ncur; ++i,b += BCHNS,++s) *b += *s; + } + si += ncur; + break; } + for(i = 0; i < ncur; ++i) { *(pos++) = p,p += pf,++o; } @@ -442,7 +485,7 @@ V xrecord::m_help() post("\t@sigmode 0/1: specify message or signal triggered recording"); post("\t@append 0/1: reset recording position or append to current position"); post("\t@loop 0/1: switches looping off/on"); - post("\t@mixmode 0/1: specify if audio signal should be mixed in"); + post("\t@mixmode 0/1/2: specify how audio signal should be mixed in (none,mixed,added)"); post("\tmin {unit}: set minimum recording point"); post("\tmax {unit}: set maximum recording point"); post("\tall: select entire buffer length"); @@ -464,7 +507,7 @@ V xrecord::m_print() post("%s - current settings:",thisName()); post("bufname = '%s', length = %.3f, channels = %i",buf->Name(),(F)(buf->Frames()*s2u),buf->Channels()); post("in channels = %i, frames/unit = %.3f, scale mode = %s",inchns,(F)(1./s2u),sclmode_txt[sclmode]); - post("sigmode = %s, append = %s, loop = %s, mixmode = %s",sigmode?"yes":"no",appmode?"yes":"no",doloop?"yes":"no",mixmode?"yes":"no"); + post("sigmode = %s, append = %s, loop = %s, mixmode = %i",sigmode?"yes":"no",appmode?"yes":"no",doloop?"yes":"no",mixmode); post(""); } |