Update of /cvsroot/pure-data/externals/ggee/experimental
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8684/experimental
Modified Files:
fofsynth~.c pvocfreq.c
Log Message:
these pragmas are only used for MSVC, not MinGW or Cygwin, therefore changing the define from NT to _MSC_VER
Index: pvocfreq.c
===================================================================
RCS file: /cvsroot/pure-data/externals/ggee/experimental/pvocfreq.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** pvocfreq.c 17 Jun 2002 10:13:54 -0000 1.1.1.1
--- pvocfreq.c 14 Nov 2005 21:59:08 -0000 1.2
***************
*** 1,114 ****
! /* (C) Guenter Geiger <geiger(a)epy.co.at> */
!
!
! #include <m_pd.h>
! #ifdef NT
! #pragma warning( disable : 4244 )
! #pragma warning( disable : 4305 )
! #endif
!
! /* ------------------------ shuffle ----------------------------- */
!
! static t_class *shuffle_class;
!
!
! typedef struct _shuffle
! {
! t_object x_obj;
! t_float x;
! } t_shuffle;
!
!
! void shuffle_float(t_shuffle *x, t_floatarg f)
! {
! post("float %f",f);
! x->x = f;
! }
!
!
!
! static t_int *shuffle_perform(t_int *w)
! {
! t_shuffle* x = (t_shuffle*)(w[1]);
! t_float* in1 = (t_float*) w[2];
! t_float* in2 = (t_float*) w[3];
! t_float* out = (t_float*) w[4];
! int n = w[5];
!
! if (x->x <= 0) {
! while (n--) {
! *out++ = *in1++;
! }
! return w+6;
! }
!
! if (x->x < 0.5) {
! t_int index = 1/x->x;
! while (n--) {
! if (n%index){
! *out++ = *in1++;
! in2++;
! }
! else {
! *out++ = *in2++;
! in1++;
! }
! }
! return w+6;
! }
!
! if (x->x > 1.0) {
! while (n--) {
! *out++ = *in2++;
! }
! return w+6;
! }
!
! if (x->x >= 0.5) {
! t_int index = 1/(1.0- x->x);
! while (n--) {
! if (n%index) {
! *out++ = *in2++;
! in1++;
! }
! else {
! *out++ = *in1++;
! in2++;
! }
! }
! }
!
! return w+6;
! }
!
!
! static void shuffle_dsp(t_shuffle *x, t_signal **sp)
! {
! dsp_add(shuffle_perform, 5, x, sp[0]->s_vec,
! sp[1]->s_vec,sp[2]->s_vec, sp[0]->s_n);
!
! }
!
! static void *shuffle_new()
! {
! t_shuffle *x = (t_shuffle *)pd_new(shuffle_class);
!
! inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
!
!
! outlet_new(&x->x_obj, gensym("signal"));
! return (x);
! }
!
! void shuffle_setup(void)
! {
! shuffle_class = class_new(gensym("shuffle~"), (t_newmethod)shuffle_new, 0,
! sizeof(t_shuffle), 0,0);
!
! class_addmethod(shuffle_class, nullfn, gensym("signal"), 0);
! class_addmethod(shuffle_class, (t_method) shuffle_dsp, gensym("dsp"), 0);
!
! class_addfloat(shuffle_class,shuffle_float);
! }
!
!
--- 1,114 ----
! /* (C) Guenter Geiger <geiger(a)epy.co.at> */
!
!
! #include <m_pd.h>
! #ifdef _MSC_VER
! #pragma warning( disable : 4244 )
! #pragma warning( disable : 4305 )
! #endif
!
! /* ------------------------ shuffle ----------------------------- */
!
! static t_class *shuffle_class;
!
!
! typedef struct _shuffle
! {
! t_object x_obj;
! t_float x;
! } t_shuffle;
!
!
! void shuffle_float(t_shuffle *x, t_floatarg f)
! {
! post("float %f",f);
! x->x = f;
! }
!
!
!
! static t_int *shuffle_perform(t_int *w)
! {
! t_shuffle* x = (t_shuffle*)(w[1]);
! t_float* in1 = (t_float*) w[2];
! t_float* in2 = (t_float*) w[3];
! t_float* out = (t_float*) w[4];
! int n = w[5];
!
! if (x->x <= 0) {
! while (n--) {
! *out++ = *in1++;
! }
! return w+6;
! }
!
! if (x->x < 0.5) {
! t_int index = 1/x->x;
! while (n--) {
! if (n%index){
! *out++ = *in1++;
! in2++;
! }
! else {
! *out++ = *in2++;
! in1++;
! }
! }
! return w+6;
! }
!
! if (x->x > 1.0) {
! while (n--) {
! *out++ = *in2++;
! }
! return w+6;
! }
!
! if (x->x >= 0.5) {
! t_int index = 1/(1.0- x->x);
! while (n--) {
! if (n%index) {
! *out++ = *in2++;
! in1++;
! }
! else {
! *out++ = *in1++;
! in2++;
! }
! }
! }
!
! return w+6;
! }
!
!
! static void shuffle_dsp(t_shuffle *x, t_signal **sp)
! {
! dsp_add(shuffle_perform, 5, x, sp[0]->s_vec,
! sp[1]->s_vec,sp[2]->s_vec, sp[0]->s_n);
!
! }
!
! static void *shuffle_new()
! {
! t_shuffle *x = (t_shuffle *)pd_new(shuffle_class);
!
! inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
!
!
! outlet_new(&x->x_obj, gensym("signal"));
! return (x);
! }
!
! void shuffle_setup(void)
! {
! shuffle_class = class_new(gensym("shuffle~"), (t_newmethod)shuffle_new, 0,
! sizeof(t_shuffle), 0,0);
!
! class_addmethod(shuffle_class, nullfn, gensym("signal"), 0);
! class_addmethod(shuffle_class, (t_method) shuffle_dsp, gensym("dsp"), 0);
!
! class_addfloat(shuffle_class,shuffle_float);
! }
!
!
Index: fofsynth~.c
===================================================================
RCS file: /cvsroot/pure-data/externals/ggee/experimental/fofsynth~.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** fofsynth~.c 17 Jun 2002 10:13:54 -0000 1.1.1.1
--- fofsynth~.c 14 Nov 2005 21:59:08 -0000 1.2
***************
*** 1,354 ****
! /* (C) Guenter Geiger <geiger(a)epy.co.at> */
!
!
! #include <m_pd.h>
! #include <math.h>
! #ifdef NT
! #pragma warning( disable : 4244 )
! #pragma warning( disable : 4305 )
! #endif
!
! /* ------------------------ fofsynth~ ----------------------------- */
!
! #ifndef NT
! void garray_usedindsp(t_garray *x);
! #endif
!
! #define DEBUG(a,b) if (x->debug) post(a,b);
!
! #define MAXGRAINS 1000
! #define PD_PI 3.14159
!
! static float* cos_table;
! static float* halfcos_table;
! static float* exp_table;
!
! static void cos_maketable(void)
! {
! int i;
! float *fp, phase, phsinc = (2. * PD_PI) / COSTABSIZE;
!
! if (cos_table) return;
! cos_table = (float *)getbytes(sizeof(float) * (COSTABSIZE+1));
!
! for (i = COSTABSIZE + 1, fp = cos_table, phase = 0; i--;
! fp++, phase += phsinc)
! *fp = cos(phase);
!
! }
!
! static void halfcos_maketable(void)
! {
! int i;
! float *fp, phase, phsinc = (PD_PI) / COSTABSIZE;
!
! if (halfcos_table) return;
! halfcos_table = (float *)getbytes(sizeof(float) * (COSTABSIZE+1));
!
! for (i = COSTABSIZE + 1, fp = halfcos_table, phase = PD_PI; i--;
! fp++, phase += phsinc)
! *fp = 0.5*(cos(phase) + 1.0);
! }
!
!
! static void exp_maketable(void)
! {
! int i;
! float *fp, phase, phsinc = (2 * PD_PI) / COSTABSIZE;
!
! if (exp_table) return;
! exp_table = (float *)getbytes(sizeof(float) * (COSTABSIZE+1));
!
! for (i = COSTABSIZE + 1, fp = exp_table, phase = 0; i--;
! fp++, phase += phsinc)
! *fp = exp(-phase);
! }
!
!
! static t_class *fofsynth_class;
!
! typedef struct _grain
! {
! struct _grain *next;
! t_float formph; /* 0 ... 1 */
! t_float formphinc;
! t_float envph;
! int falling;
! } t_grain;
!
!
! typedef struct _fofsynth
! {
! t_object x_obj;
!
! /* it is possible to use 2 array, prob change this one
! int the future */
!
! t_symbol* x_arrayname;
!
! /* template */
!
! int x_npoints;
! t_float *x_vec;
!
! /* fof */
! int debug;
!
! int maxgrains;
! int numgrains;
!
! float* x_envelope;
!
! /* the queue of grains */
!
! t_grain* grainbase;
! t_grain* grainstart;
! t_grain* grainend;
!
!
! t_float fundph; /* 0 to 1; if 1 -> add a new grain */
!
! t_float fundfreq; /* input parameter 1 */
! t_float formfreq; /* input paramter 2 */
! t_float risedur; /* input parameter 3 ( in % of total duration )*/
! t_float falldur; /* input parameter 5 ( in % of total duration */
!
! /* other */
! int neednewgrain;
! } t_fofsynth;
!
!
!
!
! /* build a cyclic list */
! static t_grain* grain_makecyclic(t_grain* base,int num)
! {
! t_grain* cur = base;
! while (--num) {
! cur->next = cur+1;
! cur++;
! }
! cur->next = base;
! return base;
! }
!
!
!
!
!
! static t_int *fofsynth_perform(t_int *w)
! {
! t_fofsynth* x = (t_fofsynth*) (w[1]);
! t_float *in = (t_float *)(w[2]);
! t_float *out = (t_float *)(w[3]);
! int n = (int)(w[4]);
!
! float totaldur = (x->risedur+ x->falldur)*0.01/ *in;
!
! float srate = 44100.0; /*((t_signal*)w[2])->s_sr;*/
! float israte = 1.0/srate;
!
! float fundphase = x->fundph;
! float numperiods = totaldur*x->formfreq;
! float formphinc = (x->formfreq/srate);
!
! float risinc;
! float fallinc;
!
! t_grain* cur;
!
! risinc = (x->risedur == 0) ? 1.0 : 1.0/ (srate*totaldur*0.01*x->risedur);
! fallinc = (x->falldur == 0.0) ? 1.0 :1.0/ (srate*totaldur*0.01*x->falldur);
!
! DEBUG(" fundph %3.2f",x->fundph);
! DEBUG(" fundfreq %3.2f",x->fundfreq);
! DEBUG(" formfreq %3.2f",x->formfreq);
! DEBUG(" risedur %3.2f %",x->risedur);
! DEBUG(" falldur %3.2f %",x->falldur);
! DEBUG(" totaldur %3.2f s",totaldur);
! DEBUG(" risinc %0.6f",risinc);
! DEBUG(" fallinc %0.6f",fallinc);
! DEBUG(" formant increase %3.2f",formphinc);
! DEBUG(" numgrains %d",x->numgrains);
!
! while (n--)
! {
! fundphase+=*++in*israte;
! *out = 0.0;
!
! if (x->neednewgrain) { /* new grain, they are deleted separetely */
! t_grain* newgrain = x->grainend;
! /* DEBUG("new grain created",0); */
! if (newgrain->next == x->grainstart) {
! post("fof: grain overflow");
! x->neednewgrain = 0;
! }
! else {
! x->numgrains++;
! x->grainend = newgrain->next;
! newgrain->formphinc = formphinc;
! newgrain->falling = 0;
! newgrain->formph = newgrain->envph = 0.0;
! x->neednewgrain = 0;
! }
! }
!
! cur = x->grainstart;
! while (cur != x->grainend) {
! float formphase = cur->formph;
! float envelope;
!
! float tph = (formphase - (float)((int) formphase));
! float val = *(x->x_vec + (int) (tph * x->x_npoints));
!
! /* Apply the envelope */
!
! if (!cur->falling && (cur->envph <= 1.0)) {
! envelope = *(halfcos_table + (int) (cur->envph * COSTABSIZE));
! cur->envph+=risinc;
! val *= envelope;
! }
! else if (!cur->falling)
! {
! cur->falling = 1;
! cur->envph = 0;
! }
!
!
! if (cur->falling) {
! envelope = *(exp_table + (int) (cur->envph * COSTABSIZE));
! cur->envph+=fallinc;
! val *= envelope;
! }
!
! /* end of envelope code */
!
!
! formphase+=cur->formphinc;
! cur->formph = formphase;
!
! if (formphase >= numperiods) { /* dead */
! DEBUG("grain died",0);
! x->grainstart = cur->next;
! x->numgrains--;/* not needed */
! }
!
! cur = cur->next;
! *out += val;
! }
!
!
! if (fundphase > 1.0) {
! fundphase -= 1.0;
! x->neednewgrain=1;
! }
! out++;
! }
!
! x->fundph=fundphase;
! x->debug = 0;
!
!
! return (w+5);
! }
!
! void fofsynth_usearray(t_symbol* s,int* points,t_float** vec)
! {
! t_garray *a;
! if (!(a = (t_garray *)pd_findbyclass(s, garray_class)))
! error("%s: no such array", s->s_name);
! else if (!garray_getfloatarray(a,points,vec))
! error("%s: bad template for fof~", s->s_name);
! else
! garray_usedindsp(a);
! }
!
! static void fofsynth_dsp(t_fofsynth *x, t_signal **sp)
! {
!
! if (x->x_arrayname)
! fofsynth_usearray(x->x_arrayname,&x->x_npoints, &x->x_vec);
! else {
! x->x_npoints=COSTABSIZE;
! x->x_vec = cos_table;
! }
!
! dsp_add(fofsynth_perform, 4, x,
! sp[0]->s_vec,sp[1]->s_vec, sp[0]->s_n);
! }
!
!
! static void fofsynth_free(t_fofsynth *x)
! {
! freebytes(x->grainbase,sizeof(t_grain)*x->maxgrains);
! }
!
!
! static void fofsynth_debug(t_fofsynth* x)
! {
! x->debug = 1;
! }
!
!
! static void fofsynth_float(t_fofsynth* x,t_float f)
! {
! x->fundfreq = f > 0.0 ? f : -f;
! }
!
!
! static void *fofsynth_new(t_symbol* s,t_float a,t_float b,t_float c,t_float d)
! {
! int maxgrains = MAXGRAINS;
! t_fofsynth *x = (t_fofsynth *)pd_new(fofsynth_class);
!
! x->debug = 0;
! x->x_arrayname = s;
!
! if (s == &s_)
! x->x_arrayname = NULL;
!
! /* setup the grain queue */
!
! x->grainbase = getbytes(sizeof(t_grain)*maxgrains);
! x->maxgrains = maxgrains;
! grain_makecyclic(x->grainbase,maxgrains);
! x->grainstart = x->grainbase;
! x->grainend = x->grainbase;
! x->numgrains = 0;
!
! /* some of them could be signals too */
!
! floatinlet_new(&x->x_obj, &x->formfreq);
! floatinlet_new(&x->x_obj, &x->risedur);
! floatinlet_new(&x->x_obj, &x->falldur);
!
! x->fundph = 0.0;
! x->fundfreq = 200.0;
! x->formfreq = 600.0;
! x->risedur = 5.0;
! x->falldur = 140.0;
!
! if (a) x->fundfreq = a;
! if (b) x->formfreq = b;
! if (c) x->risedur = c;
! if (d) x->falldur = d;
!
! outlet_new(&x->x_obj, &s_signal);
! return (x);
! }
!
! void fofsynth_tilde_setup(void)
! {
! cos_table = NULL;
! halfcos_table = NULL;
! fofsynth_class = class_new(gensym("fof~"), (t_newmethod) fofsynth_new,(t_method) fofsynth_free,
! sizeof(t_fofsynth), 0,A_DEFSYM, A_DEFFLOAT,A_DEFFLOAT,A_DEFFLOAT,A_DEFFLOAT,0);
! class_addcreator((t_newmethod)fofsynth_new,gensym("fofsynth~"),A_DEFSYM, A_DEFFLOAT,A_DEFFLOAT,A_DEFFLOAT,A_DEFFLOAT,0);
! class_addmethod(fofsynth_class, nullfn, gensym("signal"), 0);
! class_addmethod(fofsynth_class, (t_method) fofsynth_dsp, gensym("dsp"), 0);
! class_addfloat(fofsynth_class, (t_method) fofsynth_float);
! class_addmethod(fofsynth_class,(t_method) fofsynth_debug, gensym("debug"),0);
! cos_maketable();
! halfcos_maketable();
! exp_maketable();
! }
--- 1,354 ----
! /* (C) Guenter Geiger <geiger(a)epy.co.at> */
!
!
! #include <m_pd.h>
! #include <math.h>
! #ifdef _MSC_VER
! #pragma warning( disable : 4244 )
! #pragma warning( disable : 4305 )
! #endif
!
! /* ------------------------ fofsynth~ ----------------------------- */
!
! #ifndef NT
! void garray_usedindsp(t_garray *x);
! #endif
!
! #define DEBUG(a,b) if (x->debug) post(a,b);
!
! #define MAXGRAINS 1000
! #define PD_PI 3.14159
!
! static float* cos_table;
! static float* halfcos_table;
! static float* exp_table;
!
! static void cos_maketable(void)
! {
! int i;
! float *fp, phase, phsinc = (2. * PD_PI) / COSTABSIZE;
!
! if (cos_table) return;
! cos_table = (float *)getbytes(sizeof(float) * (COSTABSIZE+1));
!
! for (i = COSTABSIZE + 1, fp = cos_table, phase = 0; i--;
! fp++, phase += phsinc)
! *fp = cos(phase);
!
! }
!
! static void halfcos_maketable(void)
! {
! int i;
! float *fp, phase, phsinc = (PD_PI) / COSTABSIZE;
!
! if (halfcos_table) return;
! halfcos_table = (float *)getbytes(sizeof(float) * (COSTABSIZE+1));
!
! for (i = COSTABSIZE + 1, fp = halfcos_table, phase = PD_PI; i--;
! fp++, phase += phsinc)
! *fp = 0.5*(cos(phase) + 1.0);
! }
!
!
! static void exp_maketable(void)
! {
! int i;
! float *fp, phase, phsinc = (2 * PD_PI) / COSTABSIZE;
!
! if (exp_table) return;
! exp_table = (float *)getbytes(sizeof(float) * (COSTABSIZE+1));
!
! for (i = COSTABSIZE + 1, fp = exp_table, phase = 0; i--;
! fp++, phase += phsinc)
! *fp = exp(-phase);
! }
!
!
! static t_class *fofsynth_class;
!
! typedef struct _grain
! {
! struct _grain *next;
! t_float formph; /* 0 ... 1 */
! t_float formphinc;
! t_float envph;
! int falling;
! } t_grain;
!
!
! typedef struct _fofsynth
! {
! t_object x_obj;
!
! /* it is possible to use 2 array, prob change this one
! int the future */
!
! t_symbol* x_arrayname;
!
! /* template */
!
! int x_npoints;
! t_float *x_vec;
!
! /* fof */
! int debug;
!
! int maxgrains;
! int numgrains;
!
! float* x_envelope;
!
! /* the queue of grains */
!
! t_grain* grainbase;
! t_grain* grainstart;
! t_grain* grainend;
!
!
! t_float fundph; /* 0 to 1; if 1 -> add a new grain */
!
! t_float fundfreq; /* input parameter 1 */
! t_float formfreq; /* input paramter 2 */
! t_float risedur; /* input parameter 3 ( in % of total duration )*/
! t_float falldur; /* input parameter 5 ( in % of total duration */
!
! /* other */
! int neednewgrain;
! } t_fofsynth;
!
!
!
!
! /* build a cyclic list */
! static t_grain* grain_makecyclic(t_grain* base,int num)
! {
! t_grain* cur = base;
! while (--num) {
! cur->next = cur+1;
! cur++;
! }
! cur->next = base;
! return base;
! }
!
!
!
!
!
! static t_int *fofsynth_perform(t_int *w)
! {
! t_fofsynth* x = (t_fofsynth*) (w[1]);
! t_float *in = (t_float *)(w[2]);
! t_float *out = (t_float *)(w[3]);
! int n = (int)(w[4]);
!
! float totaldur = (x->risedur+ x->falldur)*0.01/ *in;
!
! float srate = 44100.0; /*((t_signal*)w[2])->s_sr;*/
! float israte = 1.0/srate;
!
! float fundphase = x->fundph;
! float numperiods = totaldur*x->formfreq;
! float formphinc = (x->formfreq/srate);
!
! float risinc;
! float fallinc;
!
! t_grain* cur;
!
! risinc = (x->risedur == 0) ? 1.0 : 1.0/ (srate*totaldur*0.01*x->risedur);
! fallinc = (x->falldur == 0.0) ? 1.0 :1.0/ (srate*totaldur*0.01*x->falldur);
!
! DEBUG(" fundph %3.2f",x->fundph);
! DEBUG(" fundfreq %3.2f",x->fundfreq);
! DEBUG(" formfreq %3.2f",x->formfreq);
! DEBUG(" risedur %3.2f %",x->risedur);
! DEBUG(" falldur %3.2f %",x->falldur);
! DEBUG(" totaldur %3.2f s",totaldur);
! DEBUG(" risinc %0.6f",risinc);
! DEBUG(" fallinc %0.6f",fallinc);
! DEBUG(" formant increase %3.2f",formphinc);
! DEBUG(" numgrains %d",x->numgrains);
!
! while (n--)
! {
! fundphase+=*++in*israte;
! *out = 0.0;
!
! if (x->neednewgrain) { /* new grain, they are deleted separetely */
! t_grain* newgrain = x->grainend;
! /* DEBUG("new grain created",0); */
! if (newgrain->next == x->grainstart) {
! post("fof: grain overflow");
! x->neednewgrain = 0;
! }
! else {
! x->numgrains++;
! x->grainend = newgrain->next;
! newgrain->formphinc = formphinc;
! newgrain->falling = 0;
! newgrain->formph = newgrain->envph = 0.0;
! x->neednewgrain = 0;
! }
! }
!
! cur = x->grainstart;
! while (cur != x->grainend) {
! float formphase = cur->formph;
! float envelope;
!
! float tph = (formphase - (float)((int) formphase));
! float val = *(x->x_vec + (int) (tph * x->x_npoints));
!
! /* Apply the envelope */
!
! if (!cur->falling && (cur->envph <= 1.0)) {
! envelope = *(halfcos_table + (int) (cur->envph * COSTABSIZE));
! cur->envph+=risinc;
! val *= envelope;
! }
! else if (!cur->falling)
! {
! cur->falling = 1;
! cur->envph = 0;
! }
!
!
! if (cur->falling) {
! envelope = *(exp_table + (int) (cur->envph * COSTABSIZE));
! cur->envph+=fallinc;
! val *= envelope;
! }
!
! /* end of envelope code */
!
!
! formphase+=cur->formphinc;
! cur->formph = formphase;
!
! if (formphase >= numperiods) { /* dead */
! DEBUG("grain died",0);
! x->grainstart = cur->next;
! x->numgrains--;/* not needed */
! }
!
! cur = cur->next;
! *out += val;
! }
!
!
! if (fundphase > 1.0) {
! fundphase -= 1.0;
! x->neednewgrain=1;
! }
! out++;
! }
!
! x->fundph=fundphase;
! x->debug = 0;
!
!
! return (w+5);
! }
!
! void fofsynth_usearray(t_symbol* s,int* points,t_float** vec)
! {
! t_garray *a;
! if (!(a = (t_garray *)pd_findbyclass(s, garray_class)))
! error("%s: no such array", s->s_name);
! else if (!garray_getfloatarray(a,points,vec))
! error("%s: bad template for fof~", s->s_name);
! else
! garray_usedindsp(a);
! }
!
! static void fofsynth_dsp(t_fofsynth *x, t_signal **sp)
! {
!
! if (x->x_arrayname)
! fofsynth_usearray(x->x_arrayname,&x->x_npoints, &x->x_vec);
! else {
! x->x_npoints=COSTABSIZE;
! x->x_vec = cos_table;
! }
!
! dsp_add(fofsynth_perform, 4, x,
! sp[0]->s_vec,sp[1]->s_vec, sp[0]->s_n);
! }
!
!
! static void fofsynth_free(t_fofsynth *x)
! {
! freebytes(x->grainbase,sizeof(t_grain)*x->maxgrains);
! }
!
!
! static void fofsynth_debug(t_fofsynth* x)
! {
! x->debug = 1;
! }
!
!
! static void fofsynth_float(t_fofsynth* x,t_float f)
! {
! x->fundfreq = f > 0.0 ? f : -f;
! }
!
!
! static void *fofsynth_new(t_symbol* s,t_float a,t_float b,t_float c,t_float d)
! {
! int maxgrains = MAXGRAINS;
! t_fofsynth *x = (t_fofsynth *)pd_new(fofsynth_class);
!
! x->debug = 0;
! x->x_arrayname = s;
!
! if (s == &s_)
! x->x_arrayname = NULL;
!
! /* setup the grain queue */
!
! x->grainbase = getbytes(sizeof(t_grain)*maxgrains);
! x->maxgrains = maxgrains;
! grain_makecyclic(x->grainbase,maxgrains);
! x->grainstart = x->grainbase;
! x->grainend = x->grainbase;
! x->numgrains = 0;
!
! /* some of them could be signals too */
!
! floatinlet_new(&x->x_obj, &x->formfreq);
! floatinlet_new(&x->x_obj, &x->risedur);
! floatinlet_new(&x->x_obj, &x->falldur);
!
! x->fundph = 0.0;
! x->fundfreq = 200.0;
! x->formfreq = 600.0;
! x->risedur = 5.0;
! x->falldur = 140.0;
!
! if (a) x->fundfreq = a;
! if (b) x->formfreq = b;
! if (c) x->risedur = c;
! if (d) x->falldur = d;
!
! outlet_new(&x->x_obj, &s_signal);
! return (x);
! }
!
! void fofsynth_tilde_setup(void)
! {
! cos_table = NULL;
! halfcos_table = NULL;
! fofsynth_class = class_new(gensym("fof~"), (t_newmethod) fofsynth_new,(t_method) fofsynth_free,
! sizeof(t_fofsynth), 0,A_DEFSYM, A_DEFFLOAT,A_DEFFLOAT,A_DEFFLOAT,A_DEFFLOAT,0);
! class_addcreator((t_newmethod)fofsynth_new,gensym("fofsynth~"),A_DEFSYM, A_DEFFLOAT,A_DEFFLOAT,A_DEFFLOAT,A_DEFFLOAT,0);
! class_addmethod(fofsynth_class, nullfn, gensym("signal"), 0);
! class_addmethod(fofsynth_class, (t_method) fofsynth_dsp, gensym("dsp"), 0);
! class_addfloat(fofsynth_class, (t_method) fofsynth_float);
! class_addmethod(fofsynth_class,(t_method) fofsynth_debug, gensym("debug"),0);
! cos_maketable();
! halfcos_maketable();
! exp_maketable();
! }