From bd3d7f243bb5a105b99ce701774cf3d402396576 Mon Sep 17 00:00:00 2001 From: musil Date: Wed, 8 Nov 2006 16:24:39 +0000 Subject: change sig*.c to *~.c and sig* to *_tilde change makefiles svn path=/trunk/externals/iemlib/; revision=6235 --- src/iem_t3_lib/iem_t3_lib.c | 32 +---- src/iem_t3_lib/makefile_linux | 51 ++++++++ src/iem_t3_lib/makefile_win | 6 +- src/iem_t3_lib/sigt3_line.c | 279 ------------------------------------------ src/iem_t3_lib/sigt3_sig.c | 200 ------------------------------ src/iem_t3_lib/t3_bpe.c | 12 +- src/iem_t3_lib/t3_delay.c | 8 -- src/iem_t3_lib/t3_line~.c | 272 ++++++++++++++++++++++++++++++++++++++++ src/iem_t3_lib/t3_metro.c | 7 -- src/iem_t3_lib/t3_sig~.c | 192 +++++++++++++++++++++++++++++ src/iem_t3_lib/t3_timer.c | 13 +- 11 files changed, 527 insertions(+), 545 deletions(-) create mode 100644 src/iem_t3_lib/makefile_linux delete mode 100644 src/iem_t3_lib/sigt3_line.c delete mode 100644 src/iem_t3_lib/sigt3_sig.c create mode 100644 src/iem_t3_lib/t3_line~.c create mode 100644 src/iem_t3_lib/t3_sig~.c (limited to 'src/iem_t3_lib') diff --git a/src/iem_t3_lib/iem_t3_lib.c b/src/iem_t3_lib/iem_t3_lib.c index 617b202..b911c5d 100644 --- a/src/iem_t3_lib/iem_t3_lib.c +++ b/src/iem_t3_lib/iem_t3_lib.c @@ -3,33 +3,9 @@ iem_t3_lib written by Gerhard Eckel, Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */ -#ifdef _MSC_VER -#pragma warning( disable : 4244 ) -#pragma warning( disable : 4305 ) -#endif - #include "m_pd.h" #include "iemlib.h" -#include -#include -#include -#include -/* -#include -#include -#include -#include -#include -#ifndef _WIN32 -#include -#include -#endif - -#ifdef _WIN32 -#include -#endif -*/ static t_class *iem_t3_lib_class; @@ -40,11 +16,11 @@ static void *iem_t3_lib_new(void) return (x); } -void sigt3_line_setup(void); -void sigt3_sig_setup(void); void t3_bpe_setup(void); void t3_delay_setup(void); +void t3_line_tilde_setup(void); void t3_metro_setup(void); +void t3_sig_tilde_setup(void); void t3_timer_setup(void); /* ------------------------ setup routine ------------------------- */ @@ -54,11 +30,11 @@ void iem_t3_lib_setup(void) iem_t3_lib_class = class_new(gensym("iem_t3_lib"), iem_t3_lib_new, 0, sizeof(t_object), CLASS_NOINLET, 0); - sigt3_line_setup(); - sigt3_sig_setup(); t3_bpe_setup(); t3_delay_setup(); + t3_line_tilde_setup(); t3_metro_setup(); + t3_sig_tilde_setup(); t3_timer_setup(); post("iem_t3_lib (R-1.16) library loaded! (c) Gerhard Eckel, Thomas Musil 05.2005"); diff --git a/src/iem_t3_lib/makefile_linux b/src/iem_t3_lib/makefile_linux new file mode 100644 index 0000000..3705f69 --- /dev/null +++ b/src/iem_t3_lib/makefile_linux @@ -0,0 +1,51 @@ +current: all + +.SUFFIXES: .pd_linux + +INCLUDE = -I. -I/usr/local/src/pd/src + +LDFLAGS = -export-dynamic -shared +LIB = -ldl -lm -lpthread + +#select either the DBG and OPT compiler flags below: + +CFLAGS = -DPD -DUNIX -W -Werror -Wno-unused \ + -Wno-parentheses -Wno-switch -O6 -funroll-loops -fomit-frame-pointer -fno-strict-aliasing \ + -DDL_OPEN + +SYSTEM = $(shell uname -m) + +# the sources + +SRC = t3_bpe.c \ + t3_delay.c \ + t3_line~.c \ + t3_metro.c \ + t3_sig~.c \ + t3_timer.c \ + iem_t3_lib.c + +TARGET = iem_t3_lib.pd_linux + + +OBJ = $(SRC:.c=.o) + +# +# ------------------ targets ------------------------------------ +# + +clean: + rm $(TARGET) + rm *.o + +all: $(OBJ) + @echo :: $(OBJ) + $(LD) $(LDFLAGS) -o $(TARGET) *.o $(LIB) + strip --strip-unneeded $(TARGET) + +$(OBJ) : %.o : %.c + $(CC) $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c + + + + diff --git a/src/iem_t3_lib/makefile_win b/src/iem_t3_lib/makefile_win index 80df3ce..30e9a68 100644 --- a/src/iem_t3_lib/makefile_win +++ b/src/iem_t3_lib/makefile_win @@ -15,11 +15,11 @@ PD_WIN_LIB = /NODEFAULTLIB:libc /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel /NOD $(PD_INST_PATH)\bin\pthreadVC.lib \ $(PD_INST_PATH)\bin\pd.lib -SRC = sigt3_line.c \ - sigt3_sig.c \ - t3_bpe.c \ +SRC = t3_bpe.c \ t3_delay.c \ + t3_line~.c \ t3_metro.c \ + t3_sig~.c \ t3_timer.c \ iem_t3_lib.c diff --git a/src/iem_t3_lib/sigt3_line.c b/src/iem_t3_lib/sigt3_line.c deleted file mode 100644 index 108fde2..0000000 --- a/src/iem_t3_lib/sigt3_line.c +++ /dev/null @@ -1,279 +0,0 @@ -/* For information on usage and redistribution, and for a DISCLAIMER OF ALL -* WARRANTIES, see the file, "LICENSE.txt," in this distribution. - -iem_t3_lib written by Gerhard Eckel, Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */ - -#ifdef _MSC_VER -#pragma warning( disable : 4244 ) -#pragma warning( disable : 4305 ) -#endif - -#include "m_pd.h" -#include "iemlib.h" -#include -#include -#include - -/* -------------------------- t3_line~ ------------------------------ */ -static t_class *sigt3_line_class; - -typedef struct _sigt3_line -{ - t_object x_obj; - t_clock *x_clock; - float *x_beg; - double x_cur_val; - double x_dst_val; - double x_inlet_val; - double x_inc64; - double x_inc; - double x_ms2samps; - double x_ticks2ms; - double x_inlet_time; - double x_dst_time; - int x_cur_samps; - int x_dur_samps; - int x_n; - int x_t3_bang_samps; - int x_transient; -} t_sigt3_line; - -static void sigt3_line_nontransient(float *vec, t_sigt3_line *x, int n) -{ - int cur_samps = x->x_cur_samps, i; - double inc = x->x_inc; - double cur_val = x->x_cur_val; - - if(cur_samps) - { - if(cur_samps > n) - { - x->x_cur_samps -= n; - while(n--) - { - cur_val += inc; - *vec++ = (float)cur_val; - } - x->x_cur_val += x->x_inc64; - } - else if(cur_samps == n) - { - x->x_cur_samps = 0; - while(n--) - { - cur_val += inc; - *vec++ = (float)cur_val; - } - x->x_cur_val = x->x_dst_val; - } - else - { - for(i=0; ix_cur_val = cur_val = x->x_dst_val; - for(i=cur_samps; ix_cur_samps = 0; - } - } - else - { - while(n--) - *vec++ = (float)cur_val; - } -} - -static t_int *sigt3_line_perform(t_int *w) -{ - t_float *out = (t_float *)(w[1]); - t_sigt3_line *x = (t_sigt3_line *)(w[2]); - int n = (int)(w[3]); - - if(x->x_transient) - { - float *trans = x->x_beg; - - while(n--) - *out++ = *trans++; - x->x_transient = 0; - } - else - sigt3_line_nontransient(out, x, n); - return(w+4); -} - -static void sigt3_line_tick(t_sigt3_line *x) -{ - float *trans = x->x_beg; - int n = x->x_n, t3_bang_samps, cur_samps, i; - double inc, cur_val; - - if(!x->x_transient) - sigt3_line_nontransient(trans, x, n); - t3_bang_samps = x->x_t3_bang_samps; - x->x_dst_val = x->x_inlet_val; - if(x->x_inlet_time <= 0.0) - { - x->x_inlet_time = 0.0; - x->x_dst_time = 0.0; - x->x_dur_samps = 0; - x->x_cur_samps = 0; - cur_val = x->x_cur_val = x->x_dst_val; - for(i=t3_bang_samps; ix_dst_time = x->x_inlet_time; - x->x_inlet_time = 0.0; - cur_samps = (int)(x->x_dst_time * x->x_ms2samps); - if(!cur_samps) - cur_samps = 1; - x->x_dur_samps = cur_samps; - x->x_cur_samps = cur_samps; - cur_val = x->x_cur_val = (double)trans[t3_bang_samps]; - inc = x->x_inc = (x->x_dst_val - cur_val)/(double)cur_samps; - x->x_inc64 = (double)x->x_n * inc; - diff = n - t3_bang_samps; - if(cur_samps > diff) - { - for(i=t3_bang_samps; ix_cur_val += (double)diff * inc; - x->x_cur_samps -= diff; - } - else if(cur_samps == diff) - { - for(i=t3_bang_samps; ix_cur_val = x->x_dst_val; - x->x_cur_samps = 0; - } - else - { - end = t3_bang_samps + cur_samps; - for(i=t3_bang_samps; ix_cur_val = x->x_dst_val; - x->x_cur_samps = 0; - for(i=end; ix_transient = 1; -} - -static void sigt3_line_list(t_sigt3_line *x, t_symbol *s, int ac, t_atom *av) -{ - if((ac >= 2)&&IS_A_FLOAT(av,0)&&IS_A_FLOAT(av,1)) - { - int t3_bang_samps, ticks; - double time; - - x->x_inlet_val = (double)atom_getfloatarg(1, ac, av); - t3_bang_samps = (int)((float)atom_getfloatarg(0, ac, av)*x->x_ms2samps); - if(t3_bang_samps < 0) - t3_bang_samps = 0; - ticks = t3_bang_samps / x->x_n; - x->x_t3_bang_samps = t3_bang_samps - x->x_n * ticks; - if((ac >= 3)&&IS_A_FLOAT(av,2)) - { - time = (double)atom_getfloatarg(2, ac, av); - if(time < 0.0) - time = 0.0; - x->x_inlet_time = time; - } - if(ticks < 1) - sigt3_line_tick(x); - else - clock_delay(x->x_clock, (double)ticks * x->x_ticks2ms); - } -} - -static void sigt3_line_ft1(t_sigt3_line *x, t_float time) -{ - if(time < 0.0) - time = 0.0; - x->x_inlet_time = (double)time; -} - -static void sigt3_line_stop(t_sigt3_line *x) -{ - clock_unset(x->x_clock); - x->x_cur_samps = x->x_dur_samps = x->x_transient = 0; - x->x_inc = x->x_inc64 = x->x_inlet_time = x->x_dst_time = 0.0; -} - -static void sigt3_line_dsp(t_sigt3_line *x, t_signal **sp) -{ - int i; - float val, *trans; - - if(sp[0]->s_n > x->x_n) - { - freebytes(x->x_beg, x->x_n*sizeof(float)); - x->x_n = (int)sp[0]->s_n; - x->x_beg = (float *)getbytes(x->x_n*sizeof(float)); - } - else - x->x_n = (int)sp[0]->s_n; - i = x->x_n; - val = x->x_cur_val; - trans = x->x_beg; - while(i--) - *trans++ = val; - x->x_ms2samps = 0.001*(double)sp[0]->s_sr; - x->x_ticks2ms = (double)x->x_n / x->x_ms2samps; - dsp_add(sigt3_line_perform, 3, sp[0]->s_vec, x, sp[0]->s_n); -} - -static void sigt3_line_free(t_sigt3_line *x) -{ - if(x->x_beg) - freebytes(x->x_beg, x->x_n*sizeof(float)); - clock_free(x->x_clock); -} - -static void *sigt3_line_new(t_floatarg init_val) -{ - t_sigt3_line *x = (t_sigt3_line *)pd_new(sigt3_line_class); - int i; - - x->x_n = (int)sys_getblksize(); - x->x_beg = (float *)getbytes(x->x_n*sizeof(float)); - x->x_inlet_val = x->x_cur_val = x->x_dst_val = init_val; - x->x_t3_bang_samps = x->x_cur_samps = x->x_dur_samps = x->x_transient = 0; - x->x_inlet_time = x->x_dst_time = 0.0; - x->x_inc64 = x->x_inc = 0.0; - x->x_ms2samps = 0.001 * (double)sys_getsr(); - x->x_ticks2ms = (double)x->x_n / x->x_ms2samps; - x->x_clock = clock_new(x, (t_method)sigt3_line_tick); - outlet_new(&x->x_obj, &s_signal); - inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("ft1")); - return (x); -} - -void sigt3_line_setup(void) -{ - sigt3_line_class = class_new(gensym("t3_line~"), (t_newmethod)sigt3_line_new, - (t_method)sigt3_line_free, sizeof(t_sigt3_line), 0, A_DEFFLOAT, 0); - class_addmethod(sigt3_line_class, (t_method)sigt3_line_dsp, gensym("dsp"), 0); - class_addmethod(sigt3_line_class, (t_method)sigt3_line_stop, gensym("stop"), 0); - class_addmethod(sigt3_line_class, (t_method)sigt3_line_ft1, gensym("ft1"), A_FLOAT, 0); - class_addlist(sigt3_line_class, (t_method)sigt3_line_list); - class_sethelpsymbol(sigt3_line_class, gensym("iemhelp/help-t3_line~")); -} diff --git a/src/iem_t3_lib/sigt3_sig.c b/src/iem_t3_lib/sigt3_sig.c deleted file mode 100644 index 59ddbdb..0000000 --- a/src/iem_t3_lib/sigt3_sig.c +++ /dev/null @@ -1,200 +0,0 @@ -/* For information on usage and redistribution, and for a DISCLAIMER OF ALL -* WARRANTIES, see the file, "LICENSE.txt," in this distribution. - -iem_t3_lib written by Gerhard Eckel, Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */ - -#ifdef _MSC_VER -#pragma warning( disable : 4244 ) -#pragma warning( disable : 4305 ) -#endif - -#include "m_pd.h" -#include "iemlib.h" -#include -#include -#include - -/* -------------------------- sigt3_sig~ ------------------------------ */ -static t_class *sigt3_sig_class; - -typedef struct _sigt3_sig -{ - t_object x_obj; - t_clock *x_clock; - float x_old_val; - float x_new_val; - float *x_beg; - int x_n; - int x_t3_bang_samps; - int x_transient; - float x_ms2samps; - float x_ticks2ms; -} t_sigt3_sig; - -static void sigt3_sig_tick(t_sigt3_sig *x) -{ - float *trans = x->x_beg, val; - int n = x->x_n, t3_bang_samps, i; - - t3_bang_samps = x->x_t3_bang_samps; - if(!x->x_transient) - { - val = x->x_old_val; - for(i=0; ix_transient = 1; - } - val = x->x_old_val = x->x_new_val; - for(i=t3_bang_samps; ix_clock); - x->x_new_val = x->x_old_val; -} - -static void sigt3_sig_list(t_sigt3_sig *x, t_symbol *s, int ac, t_atom *av) -{ - if((ac == 2)&&IS_A_FLOAT(av,0)&&IS_A_FLOAT(av,1)) - { - int n = x->x_n, t3_bang_samps, ticks; - - t3_bang_samps = (int)((float)atom_getfloatarg(0, ac, av)*x->x_ms2samps); - x->x_new_val = (float)atom_getfloatarg(1, ac, av); - if(t3_bang_samps < 0) - t3_bang_samps = 0; - ticks = t3_bang_samps / n; - x->x_t3_bang_samps = t3_bang_samps - n*ticks; - if(ticks < 1) - sigt3_sig_tick(x); - else - clock_delay(x->x_clock, (double)ticks * (double)x->x_ticks2ms); - } -} - -static t_int *sigt3_sig_perform(t_int *w) -{ - t_float *out = (t_float *)(w[1]); - t_sigt3_sig *x = (t_sigt3_sig *)(w[2]); - int n = (int)(w[3]); - - if(x->x_transient) - { - float *trans = x->x_beg; - - while(n--) - *out++ = *trans++; - x->x_transient = 0; - } - else - { - float val = x->x_new_val; - - while(n--) - *out++ = val; - } - return (w+4); -} - -static t_int *sigt3_sig_perf8(t_int *w) -{ - t_float *out = (t_float *)(w[1]); - t_sigt3_sig *x = (t_sigt3_sig *)(w[2]); - int n = (int)(w[3]), i; - - if(x->x_transient) - { - float *trans = x->x_beg; - - for(i=0; ix_transient = 0; - } - else - { - float val = x->x_new_val; - - for(i=0; is_n > x->x_n) - { - freebytes(x->x_beg, x->x_n*sizeof(float)); - x->x_n = sp[0]->s_n; - x->x_beg = (float *)getbytes(x->x_n*sizeof(float)); - } - else - x->x_n = sp[0]->s_n; - x->x_ms2samps = 0.001*(float)sp[0]->s_sr; - x->x_ticks2ms = (float)x->x_n / x->x_ms2samps; - i = x->x_n; - val = x->x_new_val; - trans = x->x_beg; - while(i--) - *trans++ = val; - - if((sp[0]->s_n)&7) - dsp_add(sigt3_sig_perform, 3, sp[0]->s_vec, x, sp[0]->s_n); - else - dsp_add(sigt3_sig_perf8, 3, sp[0]->s_vec, x, sp[0]->s_n); -} - -static void sigt3_sig_free(t_sigt3_sig *x) -{ - if(x->x_beg) - freebytes(x->x_beg, x->x_n*sizeof(float)); - clock_free(x->x_clock); -} - -static void *sigt3_sig_new(t_floatarg init_val) -{ - t_sigt3_sig *x = (t_sigt3_sig *)pd_new(sigt3_sig_class); - - x->x_new_val = x->x_old_val = init_val; - x->x_n = (int)sys_getblksize(); - x->x_beg = (float *)getbytes(x->x_n*sizeof(float)); - x->x_t3_bang_samps = x->x_transient = 0; - x->x_ms2samps = 0.001 * (float)sys_getsr(); - x->x_ticks2ms = (float)x->x_n / x->x_ms2samps; - x->x_clock = clock_new(x, (t_method)sigt3_sig_tick); - outlet_new(&x->x_obj, &s_signal); - return (x); -} - -void sigt3_sig_setup(void) -{ - sigt3_sig_class = class_new(gensym("t3_sig~"), (t_newmethod)sigt3_sig_new, - (t_method)sigt3_sig_free, sizeof(t_sigt3_sig), 0, A_DEFFLOAT, 0); - class_addmethod(sigt3_sig_class, (t_method)sigt3_sig_dsp, gensym("dsp"), 0); - class_addmethod(sigt3_sig_class, (t_method)sigt3_sig_stop, gensym("stop"), 0); - class_addlist(sigt3_sig_class, (t_method)sigt3_sig_list); - class_sethelpsymbol(sigt3_sig_class, gensym("iemhelp/help-t3_sig~")); -} diff --git a/src/iem_t3_lib/t3_bpe.c b/src/iem_t3_lib/t3_bpe.c index eb72d3c..4b6c5d1 100644 --- a/src/iem_t3_lib/t3_bpe.c +++ b/src/iem_t3_lib/t3_bpe.c @@ -3,16 +3,8 @@ iem_t3_lib written by Gerhard Eckel, Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */ -#ifdef _MSC_VER -#pragma warning( disable : 4244 ) -#pragma warning( disable : 4305 ) -#endif - #include "m_pd.h" #include "iemlib.h" -#include -#include -#include /* ------------------------ t3_bpe ---------------------------- */ static t_class *t3_bpe_class; @@ -42,7 +34,7 @@ static void t3_bpe_stop(t_t3_bpe *x) static void t3_bpe_tick(t_t3_bpe *x) { t_atom *vec = x->x_beg; - float val; + t_float val; double dticks, time; int iticks; @@ -57,7 +49,7 @@ static void t3_bpe_tick(t_t3_bpe *x) vec += x->x_curindex; val = atom_getfloat(vec++); time = (double)atom_getfloat(vec); - outlet_float(x->x_out_time, (float)time); + outlet_float(x->x_out_time, time); x->x_at[1].a_w.w_float = val; x->x_at[0].a_w.w_float = x->x_t3_bang; outlet_list(x->x_obj.ob_outlet, &s_list, 2, x->x_at); diff --git a/src/iem_t3_lib/t3_delay.c b/src/iem_t3_lib/t3_delay.c index fc43fb6..e9fb769 100644 --- a/src/iem_t3_lib/t3_delay.c +++ b/src/iem_t3_lib/t3_delay.c @@ -3,16 +3,8 @@ iem_t3_lib written by Gerhard Eckel, Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */ -#ifdef _MSC_VER -#pragma warning( disable : 4244 ) -#pragma warning( disable : 4305 ) -#endif - #include "m_pd.h" #include "iemlib.h" -#include -#include -#include /* ------------------------ t3_delay ---------------------------- */ static t_class *t3_delay_class; diff --git a/src/iem_t3_lib/t3_line~.c b/src/iem_t3_lib/t3_line~.c new file mode 100644 index 0000000..84aa70f --- /dev/null +++ b/src/iem_t3_lib/t3_line~.c @@ -0,0 +1,272 @@ +/* For information on usage and redistribution, and for a DISCLAIMER OF ALL +* WARRANTIES, see the file, "LICENSE.txt," in this distribution. + +iem_t3_lib written by Gerhard Eckel, Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */ + + +#include "m_pd.h" +#include "iemlib.h" + +/* -------------------------- t3_line~ ------------------------------ */ +static t_class *sigt3_line_class; + +typedef struct _sigt3_line +{ + t_object x_obj; + t_clock *x_clock; + t_float *x_beg; + double x_cur_val; + double x_dst_val; + double x_inlet_val; + double x_inc64; + double x_inc; + double x_ms2samps; + double x_ticks2ms; + double x_inlet_time; + double x_dst_time; + int x_cur_samps; + int x_dur_samps; + int x_n; + int x_t3_bang_samps; + int x_transient; +} t_sigt3_line; + +static void sigt3_line_nontransient(t_float *vec, t_sigt3_line *x, int n) +{ + int cur_samps = x->x_cur_samps, i; + double inc = x->x_inc; + double cur_val = x->x_cur_val; + + if(cur_samps) + { + if(cur_samps > n) + { + x->x_cur_samps -= n; + while(n--) + { + cur_val += inc; + *vec++ = (t_float)cur_val; + } + x->x_cur_val += x->x_inc64; + } + else if(cur_samps == n) + { + x->x_cur_samps = 0; + while(n--) + { + cur_val += inc; + *vec++ = (t_float)cur_val; + } + x->x_cur_val = x->x_dst_val; + } + else + { + for(i=0; ix_cur_val = cur_val = x->x_dst_val; + for(i=cur_samps; ix_cur_samps = 0; + } + } + else + { + while(n--) + *vec++ = (t_float)cur_val; + } +} + +static t_int *sigt3_line_perform(t_int *w) +{ + t_float *out = (t_float *)(w[1]); + t_sigt3_line *x = (t_sigt3_line *)(w[2]); + int n = (int)(w[3]); + + if(x->x_transient) + { + t_float *trans = x->x_beg; + + while(n--) + *out++ = *trans++; + x->x_transient = 0; + } + else + sigt3_line_nontransient(out, x, n); + return(w+4); +} + +static void sigt3_line_tick(t_sigt3_line *x) +{ + t_float *trans = x->x_beg; + int n = x->x_n, t3_bang_samps, cur_samps, i; + double inc, cur_val; + + if(!x->x_transient) + sigt3_line_nontransient(trans, x, n); + t3_bang_samps = x->x_t3_bang_samps; + x->x_dst_val = x->x_inlet_val; + if(x->x_inlet_time <= 0.0) + { + x->x_inlet_time = 0.0; + x->x_dst_time = 0.0; + x->x_dur_samps = 0; + x->x_cur_samps = 0; + cur_val = x->x_cur_val = x->x_dst_val; + for(i=t3_bang_samps; ix_dst_time = x->x_inlet_time; + x->x_inlet_time = 0.0; + cur_samps = (int)(x->x_dst_time * x->x_ms2samps); + if(!cur_samps) + cur_samps = 1; + x->x_dur_samps = cur_samps; + x->x_cur_samps = cur_samps; + cur_val = x->x_cur_val = (double)trans[t3_bang_samps]; + inc = x->x_inc = (x->x_dst_val - cur_val)/(double)cur_samps; + x->x_inc64 = (double)x->x_n * inc; + diff = n - t3_bang_samps; + if(cur_samps > diff) + { + for(i=t3_bang_samps; ix_cur_val += (double)diff * inc; + x->x_cur_samps -= diff; + } + else if(cur_samps == diff) + { + for(i=t3_bang_samps; ix_cur_val = x->x_dst_val; + x->x_cur_samps = 0; + } + else + { + end = t3_bang_samps + cur_samps; + for(i=t3_bang_samps; ix_cur_val = x->x_dst_val; + x->x_cur_samps = 0; + for(i=end; ix_transient = 1; +} + +static void sigt3_line_list(t_sigt3_line *x, t_symbol *s, int ac, t_atom *av) +{ + if((ac >= 2)&&IS_A_FLOAT(av,0)&&IS_A_FLOAT(av,1)) + { + int t3_bang_samps, ticks; + double time; + + x->x_inlet_val = (double)atom_getfloatarg(1, ac, av); + t3_bang_samps = (int)((t_float)atom_getfloatarg(0, ac, av)*x->x_ms2samps); + if(t3_bang_samps < 0) + t3_bang_samps = 0; + ticks = t3_bang_samps / x->x_n; + x->x_t3_bang_samps = t3_bang_samps - x->x_n * ticks; + if((ac >= 3)&&IS_A_FLOAT(av,2)) + { + time = (double)atom_getfloatarg(2, ac, av); + if(time < 0.0) + time = 0.0; + x->x_inlet_time = time; + } + if(ticks < 1) + sigt3_line_tick(x); + else + clock_delay(x->x_clock, (double)ticks * x->x_ticks2ms); + } +} + +static void sigt3_line_ft1(t_sigt3_line *x, t_float time) +{ + if(time < 0.0) + time = 0.0; + x->x_inlet_time = (double)time; +} + +static void sigt3_line_stop(t_sigt3_line *x) +{ + clock_unset(x->x_clock); + x->x_cur_samps = x->x_dur_samps = x->x_transient = 0; + x->x_inc = x->x_inc64 = x->x_inlet_time = x->x_dst_time = 0.0; +} + +static void sigt3_line_dsp(t_sigt3_line *x, t_signal **sp) +{ + int i; + t_float val, *trans; + + if(sp[0]->s_n > x->x_n) + { + freebytes(x->x_beg, x->x_n*sizeof(t_float)); + x->x_n = (int)sp[0]->s_n; + x->x_beg = (t_float *)getbytes(x->x_n*sizeof(t_float)); + } + else + x->x_n = (int)sp[0]->s_n; + i = x->x_n; + val = x->x_cur_val; + trans = x->x_beg; + while(i--) + *trans++ = val; + x->x_ms2samps = 0.001*(double)sp[0]->s_sr; + x->x_ticks2ms = (double)x->x_n / x->x_ms2samps; + dsp_add(sigt3_line_perform, 3, sp[0]->s_vec, x, sp[0]->s_n); +} + +static void sigt3_line_free(t_sigt3_line *x) +{ + if(x->x_beg) + freebytes(x->x_beg, x->x_n*sizeof(t_float)); + clock_free(x->x_clock); +} + +static void *sigt3_line_new(t_floatarg init_val) +{ + t_sigt3_line *x = (t_sigt3_line *)pd_new(sigt3_line_class); + int i; + + x->x_n = (int)sys_getblksize(); + x->x_beg = (t_float *)getbytes(x->x_n*sizeof(t_float)); + x->x_inlet_val = x->x_cur_val = x->x_dst_val = init_val; + x->x_t3_bang_samps = x->x_cur_samps = x->x_dur_samps = x->x_transient = 0; + x->x_inlet_time = x->x_dst_time = 0.0; + x->x_inc64 = x->x_inc = 0.0; + x->x_ms2samps = 0.001 * (double)sys_getsr(); + x->x_ticks2ms = (double)x->x_n / x->x_ms2samps; + x->x_clock = clock_new(x, (t_method)sigt3_line_tick); + outlet_new(&x->x_obj, &s_signal); + inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("ft1")); + return (x); +} + +void sigt3_line_setup(void) +{ + sigt3_line_class = class_new(gensym("t3_line~"), (t_newmethod)sigt3_line_new, + (t_method)sigt3_line_free, sizeof(t_sigt3_line), 0, A_DEFFLOAT, 0); + class_addmethod(sigt3_line_class, (t_method)sigt3_line_dsp, gensym("dsp"), 0); + class_addmethod(sigt3_line_class, (t_method)sigt3_line_stop, gensym("stop"), 0); + class_addmethod(sigt3_line_class, (t_method)sigt3_line_ft1, gensym("ft1"), A_FLOAT, 0); + class_addlist(sigt3_line_class, (t_method)sigt3_line_list); + class_sethelpsymbol(sigt3_line_class, gensym("iemhelp/help-t3_line~")); +} diff --git a/src/iem_t3_lib/t3_metro.c b/src/iem_t3_lib/t3_metro.c index 5438554..0f96562 100644 --- a/src/iem_t3_lib/t3_metro.c +++ b/src/iem_t3_lib/t3_metro.c @@ -3,16 +3,9 @@ iem_t3_lib written by Gerhard Eckel, Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */ -#ifdef _MSC_VER -#pragma warning( disable : 4244 ) -#pragma warning( disable : 4305 ) -#endif #include "m_pd.h" #include "iemlib.h" -#include -#include -#include /* ------------------------ t3_metro ---------------------------- */ static t_class *t3_metro_class; diff --git a/src/iem_t3_lib/t3_sig~.c b/src/iem_t3_lib/t3_sig~.c new file mode 100644 index 0000000..41b8969 --- /dev/null +++ b/src/iem_t3_lib/t3_sig~.c @@ -0,0 +1,192 @@ +/* For information on usage and redistribution, and for a DISCLAIMER OF ALL +* WARRANTIES, see the file, "LICENSE.txt," in this distribution. + +iem_t3_lib written by Gerhard Eckel, Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */ + +#include "m_pd.h" +#include "iemlib.h" + +/* -------------------------- sigt3_sig~ ------------------------------ */ +static t_class *sigt3_sig_class; + +typedef struct _sigt3_sig +{ + t_object x_obj; + t_clock *x_clock; + t_float x_old_val; + t_float x_new_val; + t_float *x_beg; + int x_n; + int x_t3_bang_samps; + int x_transient; + t_float x_ms2samps; + t_float x_ticks2ms; +} t_sigt3_sig; + +static void sigt3_sig_tick(t_sigt3_sig *x) +{ + t_float *trans = x->x_beg, val; + int n = x->x_n, t3_bang_samps, i; + + t3_bang_samps = x->x_t3_bang_samps; + if(!x->x_transient) + { + val = x->x_old_val; + for(i=0; ix_transient = 1; + } + val = x->x_old_val = x->x_new_val; + for(i=t3_bang_samps; ix_clock); + x->x_new_val = x->x_old_val; +} + +static void sigt3_sig_list(t_sigt3_sig *x, t_symbol *s, int ac, t_atom *av) +{ + if((ac == 2)&&IS_A_FLOAT(av,0)&&IS_A_FLOAT(av,1)) + { + int n = x->x_n, t3_bang_samps, ticks; + + t3_bang_samps = (int)((t_float)atom_getfloatarg(0, ac, av)*x->x_ms2samps); + x->x_new_val = (t_float)atom_getfloatarg(1, ac, av); + if(t3_bang_samps < 0) + t3_bang_samps = 0; + ticks = t3_bang_samps / n; + x->x_t3_bang_samps = t3_bang_samps - n*ticks; + if(ticks < 1) + sigt3_sig_tick(x); + else + clock_delay(x->x_clock, (double)ticks * (double)x->x_ticks2ms); + } +} + +static t_int *sigt3_sig_perform(t_int *w) +{ + t_float *out = (t_float *)(w[1]); + t_sigt3_sig *x = (t_sigt3_sig *)(w[2]); + int n = (int)(w[3]); + + if(x->x_transient) + { + t_float *trans = x->x_beg; + + while(n--) + *out++ = *trans++; + x->x_transient = 0; + } + else + { + t_float val = x->x_new_val; + + while(n--) + *out++ = val; + } + return (w+4); +} + +static t_int *sigt3_sig_perf8(t_int *w) +{ + t_float *out = (t_float *)(w[1]); + t_sigt3_sig *x = (t_sigt3_sig *)(w[2]); + int n = (int)(w[3]), i; + + if(x->x_transient) + { + t_float *trans = x->x_beg; + + for(i=0; ix_transient = 0; + } + else + { + t_float val = x->x_new_val; + + for(i=0; is_n > x->x_n) + { + freebytes(x->x_beg, x->x_n*sizeof(t_float)); + x->x_n = sp[0]->s_n; + x->x_beg = (t_float *)getbytes(x->x_n*sizeof(t_float)); + } + else + x->x_n = sp[0]->s_n; + x->x_ms2samps = 0.001*(t_float)sp[0]->s_sr; + x->x_ticks2ms = (t_float)x->x_n / x->x_ms2samps; + i = x->x_n; + val = x->x_new_val; + trans = x->x_beg; + while(i--) + *trans++ = val; + + if((sp[0]->s_n)&7) + dsp_add(sigt3_sig_perform, 3, sp[0]->s_vec, x, sp[0]->s_n); + else + dsp_add(sigt3_sig_perf8, 3, sp[0]->s_vec, x, sp[0]->s_n); +} + +static void sigt3_sig_free(t_sigt3_sig *x) +{ + if(x->x_beg) + freebytes(x->x_beg, x->x_n*sizeof(t_float)); + clock_free(x->x_clock); +} + +static void *sigt3_sig_new(t_floatarg init_val) +{ + t_sigt3_sig *x = (t_sigt3_sig *)pd_new(sigt3_sig_class); + + x->x_new_val = x->x_old_val = init_val; + x->x_n = (int)sys_getblksize(); + x->x_beg = (t_float *)getbytes(x->x_n*sizeof(t_float)); + x->x_t3_bang_samps = x->x_transient = 0; + x->x_ms2samps = 0.001 * (t_float)sys_getsr(); + x->x_ticks2ms = (t_float)x->x_n / x->x_ms2samps; + x->x_clock = clock_new(x, (t_method)sigt3_sig_tick); + outlet_new(&x->x_obj, &s_signal); + return (x); +} + +void sigt3_sig_setup(void) +{ + sigt3_sig_class = class_new(gensym("t3_sig~"), (t_newmethod)sigt3_sig_new, + (t_method)sigt3_sig_free, sizeof(t_sigt3_sig), 0, A_DEFFLOAT, 0); + class_addmethod(sigt3_sig_class, (t_method)sigt3_sig_dsp, gensym("dsp"), 0); + class_addmethod(sigt3_sig_class, (t_method)sigt3_sig_stop, gensym("stop"), 0); + class_addlist(sigt3_sig_class, (t_method)sigt3_sig_list); + class_sethelpsymbol(sigt3_sig_class, gensym("iemhelp/help-t3_sig~")); +} diff --git a/src/iem_t3_lib/t3_timer.c b/src/iem_t3_lib/t3_timer.c index aa9c8b5..1169726 100644 --- a/src/iem_t3_lib/t3_timer.c +++ b/src/iem_t3_lib/t3_timer.c @@ -3,16 +3,9 @@ iem_t3_lib written by Gerhard Eckel, Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */ -#ifdef _MSC_VER -#pragma warning( disable : 4244 ) -#pragma warning( disable : 4305 ) -#endif #include "m_pd.h" #include "iemlib.h" -#include -#include -#include /* -------------------------- t3_timer ------------------------------ */ static t_class *t3_timer_class; @@ -24,13 +17,13 @@ typedef struct _t3_timer double x_t3_off; } t_t3_timer; -static void t3_timer_float(t_t3_timer *x, t_float t3_bang) +static void t3_timer_float(t_t3_timer *x, t_floatarg t3_bang) { x->x_settime = (double)clock_getsystime(); x->x_t3_off = (double)t3_bang; } -static void t3_timer_ft1(t_t3_timer *x, t_float t3_bang) +static void t3_timer_ft1(t_t3_timer *x, t_floatarg t3_bang) { outlet_float(x->x_obj.ob_outlet, clock_gettimesince(x->x_settime) + (double)t3_bang - x->x_t3_off); @@ -39,7 +32,7 @@ static void t3_timer_ft1(t_t3_timer *x, t_float t3_bang) static void *t3_timer_new(void) { t_t3_timer *x = (t_t3_timer *)pd_new(t3_timer_class); - t3_timer_float(x, 0.0); + t3_timer_float(x, 0.0f); outlet_new(&x->x_obj, &s_float); inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1")); return (x); -- cgit v1.2.1