diff options
-rw-r--r-- | tab/tabosc4aa~-help.pd | 233 | ||||
-rw-r--r-- | tab/tabosc4aa~.c | 256 | ||||
-rw-r--r-- | tab/tabosc4cloop~-help.pd | 78 | ||||
-rw-r--r-- | tab/tabosc4cloop~.c | 240 | ||||
-rw-r--r-- | tab/tabosc4h~-help.pd | 110 | ||||
-rw-r--r-- | tab/tabosc4h~.c | 270 | ||||
-rw-r--r-- | tab/tabread4h~-help.pd | 33 | ||||
-rw-r--r-- | tab/tabread6c~-help.pd | 56 | ||||
-rw-r--r-- | tab/tabread6c~.c | 192 |
9 files changed, 0 insertions, 1468 deletions
diff --git a/tab/tabosc4aa~-help.pd b/tab/tabosc4aa~-help.pd deleted file mode 100644 index 1b5d0c9..0000000 --- a/tab/tabosc4aa~-help.pd +++ /dev/null @@ -1,233 +0,0 @@ -#N canvas 635 121 774 681 12; -#X floatatom 41 42 9 0 0 0 - - -; -#N canvas 0 0 450 300 (subpatch) 0; -#X array array99 11 float 0; -#X coords 0 1 10 -1 250 200 1; -#X restore 436 180 graph; -#X obj 437 48 loadbang; -#X floatatom 41 -1 5 0 135 0 - - -; -#X obj 41 19 mtof; -#X floatatom 77 307 0 0 0 0 - - -; -#N canvas 159 26 706 447 output 0; -#X obj 414 196 t b; -#X obj 414 134 f; -#X obj 414 73 inlet; -#X text 421 36 mute; -#X obj 414 227 f; -#X msg 521 218 0; -#X msg 414 104 bang; -#X obj 414 166 moses 1; -#X obj 521 187 t b f; -#X obj 486 143 moses 1; -#X obj 102 181 dbtorms; -#X obj 486 113 r master-lvl; -#X obj 102 52 r master-lvl; -#X obj 414 257 s master-lvl; -#X obj 26 222 inlet~; -#X obj 244 50 inlet; -#X text 244 22 level; -#X obj 244 122 s master-lvl; -#X msg 118 80 set \$1; -#X obj 118 109 outlet; -#X msg 262 78 \; pd dsp 1; -#X obj 102 238 line~; -#X obj 26 259 *~; -#X obj 26 295 dac~; -#X obj 102 210 pack 0 50; -#X text 24 195 audio; -#X text 114 135 show level; -#X connect 0 0 4 0; -#X connect 1 0 7 0; -#X connect 2 0 6 0; -#X connect 4 0 13 0; -#X connect 5 0 13 0; -#X connect 6 0 1 0; -#X connect 7 0 0 0; -#X connect 7 1 8 0; -#X connect 8 0 5 0; -#X connect 9 1 4 1; -#X connect 10 0 24 0; -#X connect 11 0 1 1; -#X connect 11 0 9 0; -#X connect 12 0 10 0; -#X connect 12 0 18 0; -#X connect 14 0 22 0; -#X connect 15 0 17 0; -#X connect 15 0 20 0; -#X connect 18 0 19 0; -#X connect 21 0 22 1; -#X connect 22 0 23 0; -#X connect 22 0 23 1; -#X connect 24 0 21 0; -#X restore 43 333 pd output; -#X msg 113 307 MUTE; -#X obj 179 230 *~; -#X msg 356 42 \$1 30; -#X obj 359 19 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144 --1 -1 12700 1; -#X obj 357 89 -~ 1; -#X obj 356 113 *~ -1; -#X obj 356 66 line~; -#X obj 43 231 *~; -#X msg 294 67 0; -#X msg 437 75 \; array99 resize 11 \; array99 0 0 0 -0.5 -0.5 1 -1 -0.5 -1 0 0 0 \; pd dsp 1 \;; -#X text 40 395 tabosc4c~ is a drop in remplacement for tabosc4~ \, -but offer a 4 points cubic interpolation with tengent continuity. So -\, in some case \, quality is better than the standart interpolation -; -#X obj 179 122 tabosc4~ array99; -#X obj 157 498 oscillo~; -#X text 279 17 tabosc4~; -#X text 498 18 tabosc4aa~; -#N canvas 607 39 645 763 osc~ 0; -#X obj 12 133 pack~; -#X obj 14 7 inlet~; -#X text 269 6 change block size; -#X msg 77 379 0; -#X obj 47 403 f; -#X obj 63 428 + 1; -#X obj 17 379 t a b; -#X obj 16 245 gemhead; -#X text 72 7 audio input; -#X obj 13 29 rfft~; -#X obj 13 51 *~; -#X obj 53 53 *~; -#X obj 173 6 block~ 4096 4; -#X obj 12 75 /~ 4096; -#X obj 12 95 log~; -#X obj 12 114 *~ 0.05; -#X obj 12 152 list prepend 0; -#X obj 12 173 s \$0-fft; -#X obj 172 26 table \$0-fft 2048; -#X obj 172 46 table \$0-fft-lop 2048; -#X obj 401 13 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 --1; -#X obj 401 31 t b b; -#X obj 400 71 until; -#X msg 401 52 2048; -#X msg 443 74 0; -#X obj 400 96 f; -#X obj 415 119 + 1; -#X obj 400 163 tabread \$0-fft; -#X obj 494 163 tabread \$0-fft-lop; -#X obj 400 213 +; -#X obj 400 256 tabwrite \$0-fft-lop; -#X obj 400 138 t f f f; -#X obj 424 7 bang~; -#X obj 400 235 / 8; -#X obj 495 187 * 7; -#X obj 77 494 tabread \$0-fft-lop; -#X obj 30 589 loadbang; -#X obj 47 451 t f f; -#X obj 98 591 l; -#X msg 30 611 res 3; -#X obj 22 224 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 -1; -#X obj 97 560 t l b; -#X obj 18 659 curve 2; -#X obj 46 519 pack f f f; -#X floatatom 36 296 5 0 0 0 - - -; -#X floatatom 78 297 5 0 0 0 - - -; -#X obj 17 334 t a b; -#X floatatom 72 250 5 0 0 0 - - -; -#X floatatom 114 251 5 0 0 0 - - -; -#X obj 17 358 repeat 2048; -#X obj 14 277 translateXYZ -4 0 0; -#X obj 47 471 log; -#X obj 17 314 scaleXYZ 1.04 6 0; -#X connect 0 0 16 0; -#X connect 1 0 9 0; -#X connect 3 0 4 0; -#X connect 4 0 5 0; -#X connect 4 0 37 0; -#X connect 5 0 4 1; -#X connect 6 0 42 0; -#X connect 6 1 4 0; -#X connect 7 0 50 0; -#X connect 9 0 10 0; -#X connect 9 0 10 1; -#X connect 9 1 11 0; -#X connect 9 1 11 1; -#X connect 10 0 13 0; -#X connect 11 0 13 0; -#X connect 13 0 14 0; -#X connect 14 0 15 0; -#X connect 15 0 0 0; -#X connect 16 0 17 0; -#X connect 20 0 21 0; -#X connect 21 0 23 0; -#X connect 21 1 24 0; -#X connect 22 0 25 0; -#X connect 23 0 22 0; -#X connect 24 0 25 1; -#X connect 25 0 26 0; -#X connect 25 0 31 0; -#X connect 26 0 25 1; -#X connect 27 0 29 0; -#X connect 28 0 34 0; -#X connect 29 0 33 0; -#X connect 31 0 27 0; -#X connect 31 1 28 0; -#X connect 31 2 30 1; -#X connect 32 0 21 0; -#X connect 33 0 30 0; -#X connect 34 0 29 1; -#X connect 35 0 43 1; -#X connect 36 0 39 0; -#X connect 37 0 51 0; -#X connect 37 1 35 0; -#X connect 38 0 42 2; -#X connect 39 0 42 0; -#X connect 40 0 7 0; -#X connect 41 0 38 1; -#X connect 41 1 38 0; -#X connect 43 0 41 0; -#X connect 43 0 42 1; -#X connect 44 0 52 1; -#X connect 45 0 52 2; -#X connect 46 0 49 0; -#X connect 46 1 3 0; -#X connect 47 0 50 1; -#X connect 48 0 50 2; -#X connect 49 0 6 0; -#X connect 50 0 52 0; -#X connect 51 0 43 0; -#X connect 52 0 46 0; -#X restore 205 288 pd osc~; -#X msg 305 230 reset \, create \, 1; -#X msg 311 252 0 \, destroy; -#X msg 41 60 \$1 100; -#X obj 41 83 line~; -#X obj 42 123 tabosc4aa~ array99; -#X obj 305 274 gemwin 20; -#X floatatom 106 4 5 0 0 0 - - -; -#X connect 0 0 25 0; -#X connect 2 0 16 0; -#X connect 3 0 4 0; -#X connect 4 0 0 0; -#X connect 5 0 6 1; -#X connect 6 0 5 0; -#X connect 7 0 6 2; -#X connect 8 0 6 0; -#X connect 8 0 19 0; -#X connect 8 0 22 0; -#X connect 9 0 13 0; -#X connect 10 0 9 0; -#X connect 11 0 12 0; -#X connect 12 0 8 1; -#X connect 13 0 11 0; -#X connect 13 0 14 1; -#X connect 14 0 6 0; -#X connect 14 0 19 0; -#X connect 14 0 22 0; -#X connect 15 0 18 1; -#X connect 15 0 27 1; -#X connect 18 0 8 0; -#X connect 23 0 28 0; -#X connect 24 0 28 0; -#X connect 25 0 26 0; -#X connect 26 0 18 0; -#X connect 26 0 27 0; -#X connect 27 0 14 0; -#X connect 29 0 4 0; diff --git a/tab/tabosc4aa~.c b/tab/tabosc4aa~.c deleted file mode 100644 index fece19f..0000000 --- a/tab/tabosc4aa~.c +++ /dev/null @@ -1,256 +0,0 @@ -// tabosc4aa~ -// can replace with tabosc4~ -// most of this code comes from pd. just the interpolation shematic is diferent. - -/* -This software is copyrighted by Miller Puckette and others. The following -terms (the "Standard Improved BSD License") apply to all files associated with -the software unless explicitly disclaimed in individual files: - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. -3. The name of the author may not be used to endorse or promote - products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -THE POSSIBILITY OF SUCH DAMAGE. -*/ - -// Cyrille Henry 06 2008 - - -#include "m_pd.h" - -/******************** tabosc4aa~ ***********************/ - -/* this is all copied from d_osc.c... what include file could this go in? */ -#define UNITBIT32 1572864. /* 3*2^19; bit 32 has place value 1 */ - - /* machine-dependent definitions. These ifdefs really - should have been by CPU type and not by operating system! */ -#ifdef IRIX - /* big-endian. Most significant byte is at low address in memory */ -#define HIOFFSET 0 /* word offset to find MSB */ -#define LOWOFFSET 1 /* word offset to find LSB */ -#define int32 long /* a data type that has 32 bits */ -#endif /* IRIX */ - -#ifdef MSW - /* little-endian; most significant byte is at highest address */ -#define HIOFFSET 1 -#define LOWOFFSET 0 -#define int32 long -#endif - -#if defined(__FreeBSD__) || defined(__APPLE__) -#include <machine/endian.h> -#endif - -#ifdef __linux__ -#include <endian.h> -#endif - -#if defined(__unix__) || defined(__APPLE__) -#if !defined(BYTE_ORDER) || !defined(LITTLE_ENDIAN) -#error No byte order defined -#endif - -#if BYTE_ORDER == LITTLE_ENDIAN -#define HIOFFSET 1 -#define LOWOFFSET 0 -#else -#define HIOFFSET 0 /* word offset to find MSB */ -#define LOWOFFSET 1 /* word offset to find LSB */ -#endif /* __BYTE_ORDER */ -#include <sys/types.h> -#define int32 int32_t -#endif /* __unix__ or __APPLE__*/ - -union tabfudge -{ - double tf_d; - int32 tf_i[2]; -}; - -static t_class *tabosc4aa_tilde_class; - -typedef struct _tabosc4aa_tilde -{ - t_object x_obj; - t_float x_fnpoints; - t_float x_finvnpoints; - t_word *x_vec; - t_symbol *x_arrayname; - t_float x_f; - double x_phase; - t_float x_conv; - t_sample x_prev_in, x_last_in, x_prev_out, x_last_out; -} t_tabosc4aa_tilde; - -static void *tabosc4aa_tilde_new(t_symbol *s) -{ - t_tabosc4aa_tilde *x = (t_tabosc4aa_tilde *)pd_new(tabosc4aa_tilde_class); - x->x_arrayname = s; - x->x_vec = 0; - x->x_fnpoints = 512.; - x->x_finvnpoints = (1./512.); - outlet_new(&x->x_obj, gensym("signal")); - inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1")); - x->x_f = 0; - return (x); -} - -static t_int *tabosc4aa_tilde_perform(t_int *w) -{ - t_tabosc4aa_tilde *x = (t_tabosc4aa_tilde *)(w[1]); - t_sample *in = (t_sample *)(w[2]); - t_sample *out = (t_sample *)(w[3]); - int n = (int)(w[4]); - int normhipart; - union tabfudge tf; - double a1,a2,a3; // CH - t_float fnpoints = x->x_fnpoints; - int mask = fnpoints - 1; - t_float conv = fnpoints * x->x_conv; - int maxindex; - t_word *tab = x->x_vec, *addr; - int i; - double dphase = fnpoints * x->x_phase + UNITBIT32; - - if (!tab) goto zero; - tf.tf_d = UNITBIT32; - normhipart = tf.tf_i[HIOFFSET]; - -#if 1 - while (n--) - { - t_sample frac, a, b, c, d, cminusb, temp, sum, filter_out; - - sum = 0; - for (i=0;i<4;i++) - { - tf.tf_d = dphase; - dphase += *in/4 * conv; - addr = tab + (tf.tf_i[HIOFFSET] & mask); - tf.tf_i[HIOFFSET] = normhipart; - frac = tf.tf_d - UNITBIT32; - a = addr[0].w_float; - b = addr[1].w_float; - c = addr[2].w_float; - d = addr[3].w_float; - - // 4-point, 3rd-order Hermite (x-form) - a1 = 0.5f * (c - a); - a2 = a - 2.5 * b + 2.f * c - 0.5f * d; - a3 = 0.5f * (d - a) + 1.5f * (b - c); - - temp = ((a3 * frac + a2) * frac + a1) * frac + b; - -// temp = cut_filter(x, temp); -// t_sample filter_out; - - filter_out = 0.0603297 * temp + 0.120659 * x->x_last_in + 0.0603297 * x->x_prev_in + 1.1565 * x->x_last_out - 0.397817 * x->x_prev_out; - - x->x_prev_in = x->x_last_in; - x->x_last_in = temp; - x->x_prev_out = x->x_last_out; - x->x_last_out = filter_out; - sum += filter_out; - - } - *out++ = sum/4; - *in++; - } -#endif - - tf.tf_d = UNITBIT32 * fnpoints; - normhipart = tf.tf_i[HIOFFSET]; - tf.tf_d = dphase + (UNITBIT32 * fnpoints - UNITBIT32); - tf.tf_i[HIOFFSET] = normhipart; - x->x_phase = (tf.tf_d - UNITBIT32 * fnpoints) * x->x_finvnpoints; - return (w+5); - zero: - while (n--) *out++ = 0; - - return (w+5); -} - -void tabosc4aa_tilde_set(t_tabosc4aa_tilde *x, t_symbol *s) -{ - t_garray *a; - int npoints, pointsinarray; - - x->x_arrayname = s; - if (!(a = (t_garray *)pd_findbyclass(x->x_arrayname, garray_class))) - { - if (*s->s_name) - pd_error(x, "tabosc4aa~: %s: no such array", x->x_arrayname->s_name); - x->x_vec = 0; - } - else if (!garray_getfloatwords(a, &pointsinarray, &x->x_vec)) - { - pd_error(x, "%s: bad template for tabosc4aa~", x->x_arrayname->s_name); - x->x_vec = 0; - } - else if ((npoints = pointsinarray - 3) != (1 << ilog2(pointsinarray - 3))) - { - pd_error(x, "%s: number of points (%d) not a power of 2 plus three", - x->x_arrayname->s_name, pointsinarray); - x->x_vec = 0; - garray_usedindsp(a); - } - else - { - x->x_fnpoints = npoints; - x->x_finvnpoints = 1./npoints; - garray_usedindsp(a); - } -} - -static void tabosc4aa_tilde_ft1(t_tabosc4aa_tilde *x, t_float f) -{ - x->x_phase = f; -} - -static void tabosc4aa_tilde_dsp(t_tabosc4aa_tilde *x, t_signal **sp) -{ - x->x_conv = 1. / sp[0]->s_sr; - tabosc4aa_tilde_set(x, x->x_arrayname); - - dsp_add(tabosc4aa_tilde_perform, 4, x, - sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); -} - -void tabosc4aa_tilde_setup(void) -{ - tabosc4aa_tilde_class = class_new(gensym("tabosc4aa~"), - (t_newmethod)tabosc4aa_tilde_new, 0, - sizeof(t_tabosc4aa_tilde), 0, A_DEFSYM, 0); - CLASS_MAINSIGNALIN(tabosc4aa_tilde_class, t_tabosc4aa_tilde, x_f); - class_addmethod(tabosc4aa_tilde_class, (t_method)tabosc4aa_tilde_dsp, - gensym("dsp"), 0); - class_addmethod(tabosc4aa_tilde_class, (t_method)tabosc4aa_tilde_set, - gensym("set"), A_SYMBOL, 0); - class_addmethod(tabosc4aa_tilde_class, (t_method)tabosc4aa_tilde_ft1, - gensym("ft1"), A_FLOAT, 0); -} - diff --git a/tab/tabosc4cloop~-help.pd b/tab/tabosc4cloop~-help.pd deleted file mode 100644 index 6fdc98b..0000000 --- a/tab/tabosc4cloop~-help.pd +++ /dev/null @@ -1,78 +0,0 @@ -#N canvas 366 99 606 399 12; -#X floatatom 40 42 9 0 0 0 - - -; -#X obj 40 63 sig~ 100; -#N canvas 0 0 450 300 (subpatch) 0; -#X array array99 8 float 0; -#X coords 0 1 7 -1 250 200 1; -#X restore 250 120 graph; -#X obj 251 14 loadbang; -#X floatatom 40 -1 5 0 0 0 - - -; -#X obj 40 19 mtof; -#X floatatom 74 124 0 0 0 0 - - -; -#N canvas 159 26 706 447 output 0; -#X obj 414 196 t b; -#X obj 414 134 f; -#X obj 414 73 inlet; -#X text 421 36 mute; -#X obj 414 227 f; -#X msg 521 218 0; -#X msg 414 104 bang; -#X obj 414 166 moses 1; -#X obj 521 187 t b f; -#X obj 486 143 moses 1; -#X obj 102 181 dbtorms; -#X obj 486 113 r master-lvl; -#X obj 102 52 r master-lvl; -#X obj 414 257 s master-lvl; -#X obj 26 222 inlet~; -#X obj 244 50 inlet; -#X text 244 22 level; -#X obj 244 122 s master-lvl; -#X msg 118 80 set \$1; -#X obj 118 109 outlet; -#X msg 262 78 \; pd dsp 1; -#X obj 102 238 line~; -#X obj 26 259 *~; -#X obj 26 295 dac~; -#X obj 102 210 pack 0 50; -#X text 24 195 audio; -#X text 114 135 show level; -#X connect 0 0 4 0; -#X connect 1 0 7 0; -#X connect 2 0 6 0; -#X connect 4 0 13 0; -#X connect 5 0 13 0; -#X connect 6 0 1 0; -#X connect 7 0 0 0; -#X connect 7 1 8 0; -#X connect 8 0 5 0; -#X connect 9 1 4 1; -#X connect 10 0 24 0; -#X connect 11 0 1 1; -#X connect 11 0 9 0; -#X connect 12 0 10 0; -#X connect 12 0 18 0; -#X connect 14 0 22 0; -#X connect 15 0 17 0; -#X connect 15 0 20 0; -#X connect 18 0 19 0; -#X connect 21 0 22 1; -#X connect 22 0 23 0; -#X connect 22 0 23 1; -#X connect 24 0 21 0; -#X restore 40 150 pd output; -#X msg 110 124 MUTE; -#X obj 41 92 tabosc4cloop~ array99; -#X msg 251 39 \; array99 resize 8 \; array99 0 0 0 -0.5 -0.5 1 -1 0.5 -0.5 \; pd dsp 1 \;; -#X text 42 345 just like tabosc4c~ \, but does not need to copy the -first 3 point in the end. So \, table must be a power of 2; -#X connect 0 0 1 0; -#X connect 1 0 9 0; -#X connect 3 0 10 0; -#X connect 4 0 5 0; -#X connect 5 0 0 0; -#X connect 6 0 7 1; -#X connect 7 0 6 0; -#X connect 8 0 7 2; -#X connect 9 0 7 0; diff --git a/tab/tabosc4cloop~.c b/tab/tabosc4cloop~.c deleted file mode 100644 index 5e9f9da..0000000 --- a/tab/tabosc4cloop~.c +++ /dev/null @@ -1,240 +0,0 @@ -// tabosc4cloop~ -// most of this code comes from pd. just the interpolation shematic is diferent. -// and the modulo for the position is made for all sample, so you don't need to copy the first 3 points in the end of the table for a smoth loop - -/* -This software is copyrighted by Miller Puckette and others. The following -terms (the "Standard Improved BSD License") apply to all files associated with -the software unless explicitly disclaimed in individual files: - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. -3. The name of the author may not be used to endorse or promote - products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -THE POSSIBILITY OF SUCH DAMAGE. -*/ - -// Cyrille Henry 06 2008 - - -#include "m_pd.h" - -/******************** tabosc4cloop~ ***********************/ - -/* this is all copied from d_osc.c... what include file could this go in? */ -#define UNITBIT32 1572864. /* 3*2^19; bit 32 has place value 1 */ - - /* machine-dependent definitions. These ifdefs really - should have been by CPU type and not by operating system! */ -#ifdef IRIX - /* big-endian. Most significant byte is at low address in memory */ -#define HIOFFSET 0 /* word offset to find MSB */ -#define LOWOFFSET 1 /* word offset to find LSB */ -#define int32 long /* a data type that has 32 bits */ -#endif /* IRIX */ - -#ifdef MSW - /* little-endian; most significant byte is at highest address */ -#define HIOFFSET 1 -#define LOWOFFSET 0 -#define int32 long -#endif - -#if defined(__FreeBSD__) || defined(__APPLE__) -#include <machine/endian.h> -#endif - -#ifdef __linux__ -#include <endian.h> -#endif - -#if defined(__unix__) || defined(__APPLE__) -#if !defined(BYTE_ORDER) || !defined(LITTLE_ENDIAN) -#error No byte order defined -#endif - -#if BYTE_ORDER == LITTLE_ENDIAN -#define HIOFFSET 1 -#define LOWOFFSET 0 -#else -#define HIOFFSET 0 /* word offset to find MSB */ -#define LOWOFFSET 1 /* word offset to find LSB */ -#endif /* __BYTE_ORDER */ -#include <sys/types.h> -#define int32 int32_t -#endif /* __unix__ or __APPLE__*/ - -union tabfudge -{ - double tf_d; - int32 tf_i[2]; -}; - -static t_class *tabosc4cloop_tilde_class; - -typedef struct _tabosc4cloop_tilde -{ - t_object x_obj; - t_float x_fnpoints; - t_float x_finvnpoints; - t_word *x_vec; - t_symbol *x_arrayname; - t_float x_f; - double x_phase; - t_float x_conv; -} t_tabosc4cloop_tilde; - -static void *tabosc4cloop_tilde_new(t_symbol *s) -{ - t_tabosc4cloop_tilde *x = (t_tabosc4cloop_tilde *)pd_new(tabosc4cloop_tilde_class); - x->x_arrayname = s; - x->x_vec = 0; - x->x_fnpoints = 512.; - x->x_finvnpoints = (1./512.); - outlet_new(&x->x_obj, gensym("signal")); - inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1")); - x->x_f = 0; - return (x); -} - -static t_int *tabosc4cloop_tilde_perform(t_int *w) -{ - t_tabosc4cloop_tilde *x = (t_tabosc4cloop_tilde *)(w[1]); - t_sample *in = (t_sample *)(w[2]); - t_sample *out = (t_sample *)(w[3]); - int n = (int)(w[4]); - int normhipart; - union tabfudge tf; - double a0,a1,a2,a3; // CH - t_float fnpoints = x->x_fnpoints; - int mask = fnpoints -1; - t_float conv = fnpoints * x->x_conv; - int maxindex; - t_word *tab = x->x_vec, *addr; - int i; - double dphase = fnpoints * x->x_phase + UNITBIT32; - - if (!tab) goto zero; - tf.tf_d = UNITBIT32; - normhipart = tf.tf_i[HIOFFSET]; - -#if 1 - while (n--) - { - t_sample frac, a, b, c, d, cminusb; - tf.tf_d = dphase; - dphase += *in++ * conv; - addr = tab + (tf.tf_i[HIOFFSET] & mask); -// thx to dh - a = addr[0].w_float; - addr = tab + ((1+tf.tf_i[HIOFFSET]) & mask); - b = addr[0].w_float; - addr = tab + ((2+tf.tf_i[HIOFFSET]) & mask); - c = addr[0].w_float; - addr = tab + ((3+tf.tf_i[HIOFFSET]) & mask); - d = addr[0].w_float; - tf.tf_i[HIOFFSET] = normhipart; - frac = tf.tf_d - UNITBIT32; -// CH - a0 = d - c - a + b; - a1 = a - b - a0; - a2 = c - a; - a3 = b; - *out++ = ((a0*frac+a1)*frac+a2)*frac+a3; - - } -#endif - - tf.tf_d = UNITBIT32 * fnpoints; - normhipart = tf.tf_i[HIOFFSET]; - tf.tf_d = dphase + (UNITBIT32 * fnpoints - UNITBIT32); - tf.tf_i[HIOFFSET] = normhipart; - x->x_phase = (tf.tf_d - UNITBIT32 * fnpoints) * x->x_finvnpoints; - return (w+5); - zero: - while (n--) *out++ = 0; - - return (w+5); -} - -void tabosc4cloop_tilde_set(t_tabosc4cloop_tilde *x, t_symbol *s) -{ - t_garray *a; - int npoints, pointsinarray; - - x->x_arrayname = s; - if (!(a = (t_garray *)pd_findbyclass(x->x_arrayname, garray_class))) - { - if (*s->s_name) - pd_error(x, "tabosc4cloop~: %s: no such array", x->x_arrayname->s_name); - x->x_vec = 0; - } - else if (!garray_getfloatwords(a, &pointsinarray, &x->x_vec)) - { - pd_error(x, "%s: bad template for tabosc4cloop~", x->x_arrayname->s_name); - x->x_vec = 0; - } - else if (pointsinarray != (1 << ilog2(pointsinarray))) - { - pd_error(x, "%s: number of points (%d) not a power of 2", - x->x_arrayname->s_name, pointsinarray); - x->x_vec = 0; - garray_usedindsp(a); - } - else - { - x->x_fnpoints = pointsinarray; - x->x_finvnpoints = 1./pointsinarray; - garray_usedindsp(a); - } -} - -static void tabosc4cloop_tilde_ft1(t_tabosc4cloop_tilde *x, t_float f) -{ - x->x_phase = f; -} - -static void tabosc4cloop_tilde_dsp(t_tabosc4cloop_tilde *x, t_signal **sp) -{ - x->x_conv = 1. / sp[0]->s_sr; - tabosc4cloop_tilde_set(x, x->x_arrayname); - - dsp_add(tabosc4cloop_tilde_perform, 4, x, - sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); -} - -void tabosc4cloop_tilde_setup(void) -{ - tabosc4cloop_tilde_class = class_new(gensym("tabosc4cloop~"), - (t_newmethod)tabosc4cloop_tilde_new, 0, - sizeof(t_tabosc4cloop_tilde), 0, A_DEFSYM, 0); - CLASS_MAINSIGNALIN(tabosc4cloop_tilde_class, t_tabosc4cloop_tilde, x_f); - class_addmethod(tabosc4cloop_tilde_class, (t_method)tabosc4cloop_tilde_dsp, - gensym("dsp"), 0); - class_addmethod(tabosc4cloop_tilde_class, (t_method)tabosc4cloop_tilde_set, - gensym("set"), A_SYMBOL, 0); - class_addmethod(tabosc4cloop_tilde_class, (t_method)tabosc4cloop_tilde_ft1, - gensym("ft1"), A_FLOAT, 0); -} - diff --git a/tab/tabosc4h~-help.pd b/tab/tabosc4h~-help.pd deleted file mode 100644 index 4ba7e2a..0000000 --- a/tab/tabosc4h~-help.pd +++ /dev/null @@ -1,110 +0,0 @@ -#N canvas 398 81 891 660 12; -#X floatatom 40 43 9 0 0 0 - - -; -#X obj 40 63 sig~ 100; -#X text 116 41 signal input for frequency (Hz.); -#X obj 78 127 oscillo~; -#N canvas 0 0 450 300 (subpatch) 0; -#X array array99 11 float 0; -#X coords 0 1 10 -1 250 200 1; -#X restore 522 197 graph; -#X obj 511 40 loadbang; -#X floatatom 40 0 5 0 0 0 - - -; -#X obj 40 21 mtof; -#X floatatom 85 592 0 0 0 0 - - -; -#N canvas 159 26 706 447 output 0; -#X obj 414 196 t b; -#X obj 414 134 f; -#X obj 414 73 inlet; -#X text 421 36 mute; -#X obj 414 227 f; -#X msg 521 218 0; -#X msg 414 104 bang; -#X obj 414 166 moses 1; -#X obj 521 187 t b f; -#X obj 486 143 moses 1; -#X obj 102 181 dbtorms; -#X obj 486 113 r master-lvl; -#X obj 102 52 r master-lvl; -#X obj 414 257 s master-lvl; -#X obj 26 222 inlet~; -#X obj 244 50 inlet; -#X text 244 22 level; -#X obj 244 122 s master-lvl; -#X msg 118 80 set \$1; -#X obj 118 109 outlet; -#X msg 262 78 \; pd dsp 1; -#X obj 102 238 line~; -#X obj 26 259 *~; -#X obj 26 295 dac~; -#X obj 102 210 pack 0 50; -#X text 24 195 audio; -#X text 114 135 show level; -#X connect 0 0 4 0; -#X connect 1 0 7 0; -#X connect 2 0 6 0; -#X connect 4 0 13 0; -#X connect 5 0 13 0; -#X connect 6 0 1 0; -#X connect 7 0 0 0; -#X connect 7 1 8 0; -#X connect 8 0 5 0; -#X connect 9 1 4 1; -#X connect 10 0 24 0; -#X connect 11 0 1 1; -#X connect 11 0 9 0; -#X connect 12 0 10 0; -#X connect 12 0 18 0; -#X connect 14 0 22 0; -#X connect 15 0 17 0; -#X connect 15 0 20 0; -#X connect 18 0 19 0; -#X connect 21 0 22 1; -#X connect 22 0 23 0; -#X connect 22 0 23 1; -#X connect 24 0 21 0; -#X restore 51 618 pd output; -#X msg 121 592 MUTE; -#X obj 80 342 oscillo~; -#X obj 40 564 *~; -#X msg 116 456 \$1 30; -#X obj 119 433 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144 --1 -1 0 1; -#X obj 117 503 -~ 1; -#X obj 116 527 *~ -1; -#X obj 116 480 line~; -#X obj 60 511 *~; -#X msg 190 67 0; -#X msg 514 74 \; array99 resize 11 \; array99 0 0 0 -1 0.5 -0.5 -0.5 --0.5 0.5 1 0 0 \; pd dsp 1 \;; -#X msg 81 273 tension \$1; -#X floatatom 81 251 5 0 0 0 - - -; -#X obj 62 94 tabosc4~ array99; -#X obj 41 303 tabosc4h~ array99; -#X text 172 272 with tension = -1 \, tabosc4h~ is like tabosc4c~; -#X text 174 256 -1 < tension < 1; -#X text 300 598 tabosc4h~ is a drop in remplacement for tabosc4~; -#X connect 0 0 1 0; -#X connect 1 0 23 0; -#X connect 1 0 24 0; -#X connect 5 0 20 0; -#X connect 6 0 7 0; -#X connect 7 0 0 0; -#X connect 8 0 9 1; -#X connect 9 0 8 0; -#X connect 10 0 9 2; -#X connect 12 0 9 0; -#X connect 13 0 17 0; -#X connect 14 0 13 0; -#X connect 15 0 16 0; -#X connect 16 0 12 1; -#X connect 17 0 15 0; -#X connect 17 0 18 1; -#X connect 18 0 9 0; -#X connect 19 0 23 1; -#X connect 19 0 24 1; -#X connect 21 0 24 0; -#X connect 22 0 21 0; -#X connect 23 0 3 0; -#X connect 23 0 18 0; -#X connect 24 0 11 0; -#X connect 24 0 12 0; diff --git a/tab/tabosc4h~.c b/tab/tabosc4h~.c deleted file mode 100644 index e4593db..0000000 --- a/tab/tabosc4h~.c +++ /dev/null @@ -1,270 +0,0 @@ -// tabosc4h~ -// can replace with tabosc4~ -// -// 99% comes from pd. just the interpolation shematic is diferent and comes from : -// http://local.wasp.uwa.edu.au/~pbourke/other/interpolation/ - - -/* -This software is copyrighted by Miller Puckette and others. The following -terms (the "Standard Improved BSD License") apply to all files associated with -the software unless explicitly disclaimed in individual files: - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. -3. The name of the author may not be used to endorse or promote - products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -THE POSSIBILITY OF SUCH DAMAGE. -*/ - -// Cyrille Henry 06 2008 - - -#include "m_pd.h" - -/******************** tabosc4h~ ***********************/ - -/* this is all copied from d_osc.c... what include file could this go in? */ -#define UNITBIT32 1572864. /* 3*2^19; bit 32 has place value 1 */ - - /* machine-dependent definitions. These ifdefs really - should have been by CPU type and not by operating system! */ -#ifdef IRIX - /* big-endian. Most significant byte is at low address in memory */ -#define HIOFFSET 0 /* word offset to find MSB */ -#define LOWOFFSET 1 /* word offset to find LSB */ -#define int32 long /* a data type that has 32 bits */ -#endif /* IRIX */ - -#ifdef MSW - /* little-endian; most significant byte is at highest address */ -#define HIOFFSET 1 -#define LOWOFFSET 0 -#define int32 long -#endif - -#if defined(__FreeBSD__) || defined(__APPLE__) -#include <machine/endian.h> -#endif - -#ifdef __linux__ -#include <endian.h> -#endif - -#if defined(__unix__) || defined(__APPLE__) -#if !defined(BYTE_ORDER) || !defined(LITTLE_ENDIAN) -#error No byte order defined -#endif - -#if BYTE_ORDER == LITTLE_ENDIAN -#define HIOFFSET 1 -#define LOWOFFSET 0 -#else -#define HIOFFSET 0 /* word offset to find MSB */ -#define LOWOFFSET 1 /* word offset to find LSB */ -#endif /* __BYTE_ORDER */ -#include <sys/types.h> -#define int32 int32_t -#endif /* __unix__ or __APPLE__*/ - -#ifndef min -#define min(a, b) ((a) < (b) ? (a) : (b)) -#endif - -#ifndef max -#define max(a, b) ((a) > (b) ? (a) : (b)) -#endif - - -union tabfudge -{ - double tf_d; - int32 tf_i[2]; -}; - -static t_class *tabosc4h_tilde_class; - -typedef struct _tabosc4h_tilde -{ - t_object x_obj; - t_float x_fnpoints; - t_float x_finvnpoints; - t_word *x_vec; - t_symbol *x_arrayname; - t_float x_f; - double x_phase; - t_float x_conv; - t_float x_tension; -} t_tabosc4h_tilde; - -static void *tabosc4h_tilde_new(t_symbol *s, t_floatarg tension) -{ - t_tabosc4h_tilde *x = (t_tabosc4h_tilde *)pd_new(tabosc4h_tilde_class); - x->x_arrayname = s; - x->x_vec = 0; - x->x_fnpoints = 512.; - x->x_finvnpoints = (1./512.); - outlet_new(&x->x_obj, gensym("signal")); - inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1")); - x->x_f = 0; - x->x_tension = min(1,max(-1,tension)); - return (x); -} - -static t_int *tabosc4h_tilde_perform(t_int *w) -{ - t_tabosc4h_tilde *x = (t_tabosc4h_tilde *)(w[1]); - t_sample *in = (t_sample *)(w[2]); - t_sample *out = (t_sample *)(w[3]); - int n = (int)(w[4]); - int normhipart; - union tabfudge tf; - double a0,a1,a2,a3; // CH - double m0,m1,mu,mu2,mu3; // CH - t_float fnpoints = x->x_fnpoints; - int mask = fnpoints - 1; - t_float conv = fnpoints * x->x_conv; - int maxindex; - t_word *tab = x->x_vec, *addr; - int i; - double dphase = fnpoints * x->x_phase + UNITBIT32; - - if (!tab) goto zero; - tf.tf_d = UNITBIT32; - normhipart = tf.tf_i[HIOFFSET]; - -#if 1 - while (n--) - { - t_sample frac, a, b, c, d, cminusb; - tf.tf_d = dphase; - dphase += *in++ * conv; - addr = tab + (tf.tf_i[HIOFFSET] & mask); - tf.tf_i[HIOFFSET] = normhipart; - frac = tf.tf_d - UNITBIT32; - a = addr[0].w_float; - b = addr[1].w_float; - c = addr[2].w_float; - d = addr[3].w_float; - // cminusb = c-b; - // *out++ = b + frac * (cminusb - 0.1666667f * (1.-frac) * ( (d - a - 3.0f * cminusb) * frac + (d + 2.0f*a - 3.0f*b) ) ); -// CH - mu = frac; - mu2 = mu * mu; - mu3 = mu2 * mu; - - m0 = (b-a)*(1-x->x_tension)/2; - m0 += (c-b)*(1-x->x_tension)/2; - m1 = (c-b)*(1-x->x_tension)/2; - m1 += (d-c)*(1-x->x_tension)/2; - - a0 = 2*mu3 - 3*mu2 + 1; - a1 = mu3 - 2*mu2 + mu; - a2 = mu3 - mu2; - a3 = -2*mu3 + 3*mu2; - - *out++ = a0*b+a1*m0+a2*m1+a3*c; - - } -#endif - - tf.tf_d = UNITBIT32 * fnpoints; - normhipart = tf.tf_i[HIOFFSET]; - tf.tf_d = dphase + (UNITBIT32 * fnpoints - UNITBIT32); - tf.tf_i[HIOFFSET] = normhipart; - x->x_phase = (tf.tf_d - UNITBIT32 * fnpoints) * x->x_finvnpoints; - return (w+5); - zero: - while (n--) *out++ = 0; - - return (w+5); -} - -void tabosc4h_tilde_set(t_tabosc4h_tilde *x, t_symbol *s) -{ - t_garray *a; - int npoints, pointsinarray; - - x->x_arrayname = s; - if (!(a = (t_garray *)pd_findbyclass(x->x_arrayname, garray_class))) - { - if (*s->s_name) - pd_error(x, "tabosc4h~: %s: no such array", x->x_arrayname->s_name); - x->x_vec = 0; - } - else if (!garray_getfloatwords(a, &pointsinarray, &x->x_vec)) - { - pd_error(x, "%s: bad template for tabosc4h~", x->x_arrayname->s_name); - x->x_vec = 0; - } - else if ((npoints = pointsinarray - 3) != (1 << ilog2(pointsinarray - 3))) - { - pd_error(x, "%s: number of points (%d) not a power of 2 plus three", - x->x_arrayname->s_name, pointsinarray); - x->x_vec = 0; - garray_usedindsp(a); - } - else - { - x->x_fnpoints = npoints; - x->x_finvnpoints = 1./npoints; - garray_usedindsp(a); - } -} - -static void tabosc4h_tilde_ft1(t_tabosc4h_tilde *x, t_float f) -{ - x->x_phase = f; -} - -static void tabosc4h_tilde_tension(t_tabosc4h_tilde *x, t_float f) -{ - x->x_tension = min(1,max(-1,f)); -} - -static void tabosc4h_tilde_dsp(t_tabosc4h_tilde *x, t_signal **sp) -{ - x->x_conv = 1. / sp[0]->s_sr; - tabosc4h_tilde_set(x, x->x_arrayname); - - dsp_add(tabosc4h_tilde_perform, 4, x, - sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); -} - -void tabosc4h_tilde_setup(void) -{ - tabosc4h_tilde_class = class_new(gensym("tabosc4h~"), - (t_newmethod)tabosc4h_tilde_new, 0, - sizeof(t_tabosc4h_tilde), 0, A_DEFSYM, A_DEFFLOAT, 0); - CLASS_MAINSIGNALIN(tabosc4h_tilde_class, t_tabosc4h_tilde, x_f); - class_addmethod(tabosc4h_tilde_class, (t_method)tabosc4h_tilde_dsp, - gensym("dsp"), 0); - class_addmethod(tabosc4h_tilde_class, (t_method)tabosc4h_tilde_set, - gensym("set"), A_SYMBOL, 0); - class_addmethod(tabosc4h_tilde_class, (t_method)tabosc4h_tilde_ft1, - gensym("ft1"), A_FLOAT, 0); - class_addmethod(tabosc4h_tilde_class, (t_method)tabosc4h_tilde_tension, - gensym("tension"), A_FLOAT, 0); -} - diff --git a/tab/tabread4h~-help.pd b/tab/tabread4h~-help.pd deleted file mode 100644 index 193a072..0000000 --- a/tab/tabread4h~-help.pd +++ /dev/null @@ -1,33 +0,0 @@ -#N canvas 413 327 814 475 10; -#X text 27 173 signal input x(n); -#X msg 727 51 \; pd dsp 0; -#N canvas 0 0 450 300 (subpatch) 0; -#X array array99 11 float 0; -#X coords 0 1 10 -1 250 200 1; -#X restore 514 173 graph; -#X text 127 21 4-point-interpolating table lookup; -#X msg 452 50 \; readout 1 \; array99 resize 10 \; array99 0 -0.5 -0.5 --0.5 0.5 0.5 0.5 \; pd dsp 1 \;; -#X msg 40 144 set array99; -#X text 122 144 "set" message permits you to switch between arrays -; -#X text 145 194 creation argument initializes array name; -#X text 509 27 click here to test; -#X text 7 58 Tabread4~ is used to build samplers and other table lookup -algorithms. The interpolation scheme is 4-point polynomial.; -#X text 616 460 updated for Pd version 0.29; -#X obj 15 120 line~; -#X obj 149 87 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 --1; -#X obj 458 6 table save1 44100; -#X obj 16 224 tabwrite~ save1; -#X floatatom 25 31 5 0 0 0 - - -; -#X msg 15 97 0 \, 10 1000; -#X obj 16 194 tabread4h~ array99; -#X connect 5 0 17 0; -#X connect 11 0 17 0; -#X connect 12 0 16 0; -#X connect 12 0 14 0; -#X connect 15 0 11 0; -#X connect 16 0 11 0; -#X connect 17 0 14 0; diff --git a/tab/tabread6c~-help.pd b/tab/tabread6c~-help.pd deleted file mode 100644 index 9867b91..0000000 --- a/tab/tabread6c~-help.pd +++ /dev/null @@ -1,56 +0,0 @@ -#N canvas 334 239 834 544 10; -#N canvas 0 0 450 300 (subpatch) 0; -#X array array99 20 float 0; -#X coords 0 1 19 -1 250 200 1; -#X restore 515 66 graph; -#X obj 69 195 line~; -#X obj 36 139 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 --1; -#X obj 36 32 loadbang; -#X obj 300 195 line~; -#X obj 36 55 t b b; -#N canvas 0 0 450 300 (subpatch) 0; -#X array test_4c 44100 float 0; -#X coords 0 1 44099 -1 250 200 1; -#X restore 278 316 graph; -#X obj 70 219 tabread6c~ array99; -#N canvas 0 0 450 300 (subpatch) 0; -#X array test_6c 44100 float 0; -#X coords 0 1 44099 -1 250 200 1; -#X restore 18 317 graph; -#X obj 301 219 tabread4c~ array99; -#X obj 583 373 phasor~ 222; -#X msg 68 77 \; array99 resize 20 \; array99 0 0 0 0 0 0 -0.5 -0.5 --0.5 0.5 0.5 0.5 -0.5 0 0 0.5 0 0 0 0 0 \; pd dsp 1 \;; -#X msg 70 171 2 \, 17 1000; -#X msg 300 172 2 \, 17 1000; -#X obj 583 400 *~ 15; -#X obj 582 425 +~ 2; -#X obj 582 448 tabread6c~ array99; -#X obj 606 471 tabread4c~ array99; -#X obj 582 494 dac~; -#X floatatom 583 354 5 0 0 0 - - -; -#X floatatom 583 314 5 0 0 0 - - -; -#X obj 583 333 mtof; -#X obj 302 258 tabwrite~ test_4c; -#X obj 36 250 tabwrite~ test_6c; -#X connect 1 0 7 0; -#X connect 2 0 12 0; -#X connect 2 0 13 0; -#X connect 2 0 22 0; -#X connect 2 0 23 0; -#X connect 3 0 5 0; -#X connect 4 0 9 0; -#X connect 5 0 2 0; -#X connect 5 1 11 0; -#X connect 7 0 23 0; -#X connect 9 0 22 0; -#X connect 10 0 14 0; -#X connect 12 0 1 0; -#X connect 13 0 4 0; -#X connect 14 0 15 0; -#X connect 15 0 16 0; -#X connect 15 0 17 0; -#X connect 19 0 10 0; -#X connect 20 0 21 0; -#X connect 21 0 19 0; diff --git a/tab/tabread6c~.c b/tab/tabread6c~.c deleted file mode 100644 index 45026cb..0000000 --- a/tab/tabread6c~.c +++ /dev/null @@ -1,192 +0,0 @@ -// tabread6c~ -// most of this code comes from pd. just the interpolation shematic is diferent. - - -/* -This software is copyrighted by Miller Puckette and others. The following -terms (the "Standard Improved BSD License") apply to all files associated with -the software unless explicitly disclaimed in individual files: - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. -3. The name of the author may not be used to endorse or promote - products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -THE POSSIBILITY OF SUCH DAMAGE. -*/ - -// Cyrille Henry 06 2008 - -#include "m_pd.h" - -/******************** tabread6c~ ***********************/ - -static t_class *tabread6c_tilde_class; - -typedef struct _tabread6c_tilde -{ - t_object x_obj; - int x_npoints; - t_word *x_vec; - t_symbol *x_arrayname; - t_float x_f; -} t_tabread6c_tilde; - -static void *tabread6c_tilde_new(t_symbol *s) -{ - t_tabread6c_tilde *x = (t_tabread6c_tilde *)pd_new(tabread6c_tilde_class); - x->x_arrayname = s; - x->x_vec = 0; - outlet_new(&x->x_obj, gensym("signal")); - x->x_f = 0; - return (x); -} - -static t_int *tabread6c_tilde_perform(t_int *w) -{ - t_tabread6c_tilde *x = (t_tabread6c_tilde *)(w[1]); - t_sample *in = (t_sample *)(w[2]); - t_sample *out = (t_sample *)(w[3]); - int n = (int)(w[4]); - int maxindex; - t_word *buf = x->x_vec, *wp; - int i; - double a0,a1,a2,a3,a4,a5; // CH - - maxindex = x->x_npoints - 3; - - if (!buf) goto zero; - -#if 0 /* test for spam -- I'm not ready to deal with this */ - for (i = 0, xmax = 0, xmin = maxindex, fp = in1; i < n; i++, fp++) - { - t_sample f = *in1; - if (f < xmin) xmin = f; - else if (f > xmax) xmax = f; - } - if (xmax < xmin + x->c_maxextent) xmax = xmin + x->c_maxextent; - for (i = 0, splitlo = xmin+ x->c_maxextent, splithi = xmax - x->c_maxextent, - fp = in1; i < n; i++, fp++) - { - t_sample f = *in1; - if (f > splitlo && f < splithi) goto zero; - } -#endif - - for (i = 0; i < n; i++) - { - t_sample findex = *in++; - int index = findex; - t_sample frac, a, b, c, d, e, f, cminusb; - static int count; - if (index < 1) - index = 1, frac = 0; - else if (index > maxindex) - index = maxindex, frac = 1; - else frac = findex - index; - wp = buf + index; - a = wp[-2].w_float; - b = wp[-1].w_float; - c = wp[0].w_float; - d = wp[1].w_float; - e = wp[2].w_float; - f = wp[3].w_float; -// CH - -/* a0 = c; - a1 = ( 1./12.)*a - ( 2./3. )*b + ( 2./3. )*d - ( 1./12.)*e; - a2 = (-1./24.)*a + ( 2./3. )*b - ( 5./4. )*c + ( 2./3. )*d - ( 1./24.)*e; - a3 = (-3./8. )*a + (13./8. )*b - (35./12.)*c + (11./4. )*d - (11./8. )*e + ( 7./24.)*f; - a4 = (13./24.)*a - ( 8./3. )*b + (21./4. )*c - (31./6. )*d + (61./24.)*e - ( 1./2. )*f; - a5 = (-5./24.)*a + (25./24.)*b - (25./12.)*c + (25./12.)*d - (25./24.)*e + ( 5./24.)*f; - - *out++ = ((((a5 * frac + a4 ) * frac + a3) * frac + a2) * frac + a1) * frac + a0; -*/ -// same but optimized : - - t_sample a3plusa4plusa5 = 0.25f*c+0.125f*e-(1./3.)*d-(1./24.)*a; - t_sample fminusa = f-a; - t_sample eminusb = e-b; - t_sample dminusc = d-c; - - a5 = (5./24.)*((fminusa-5.f*eminusb+10.f*dminusc)); - a4 = (8./3.)*eminusb-0.5f*fminusa-5.5f*dminusc-a3plusa4plusa5; - a3 = a3plusa4plusa5-a4-a5; - a2 = (2./3.)*(d+b)-(1./24.)*(a+e)-1.25f*c; - a1 = (2./3.)*(d-b)+(1./12.)*(a-e); - a0 = c; - - *out++ = ((((a5 * frac + a4 ) * frac + a3) * frac + a2) * frac + a1) -* frac + a0; - - } - return (w+5); - zero: - while (n--) *out++ = 0; - - return (w+5); -} - -void tabread6c_tilde_set(t_tabread6c_tilde *x, t_symbol *s) -{ - t_garray *a; - - x->x_arrayname = s; - if (!(a = (t_garray *)pd_findbyclass(x->x_arrayname, garray_class))) - { - if (*s->s_name) - pd_error(x, "tabread6c~: %s: no such array", x->x_arrayname->s_name); - x->x_vec = 0; - } - else if (!garray_getfloatwords(a, &x->x_npoints, &x->x_vec)) - { - pd_error(x, "%s: bad template for tabread6c~", x->x_arrayname->s_name); - x->x_vec = 0; - } - else garray_usedindsp(a); -} - -static void tabread6c_tilde_dsp(t_tabread6c_tilde *x, t_signal **sp) -{ - tabread6c_tilde_set(x, x->x_arrayname); - - dsp_add(tabread6c_tilde_perform, 4, x, - sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); - -} - -static void tabread6c_tilde_free(t_tabread6c_tilde *x) -{ -} - -void tabread6c_tilde_setup(void) -{ - tabread6c_tilde_class = class_new(gensym("tabread6c~"), - (t_newmethod)tabread6c_tilde_new, (t_method)tabread6c_tilde_free, - sizeof(t_tabread6c_tilde), 0, A_DEFSYM, 0); - CLASS_MAINSIGNALIN(tabread6c_tilde_class, t_tabread6c_tilde, x_f); - class_addmethod(tabread6c_tilde_class, (t_method)tabread6c_tilde_dsp, - gensym("dsp"), 0); - class_addmethod(tabread6c_tilde_class, (t_method)tabread6c_tilde_set, - gensym("set"), A_SYMBOL, 0); -} |