Update of /cvsroot/pure-data/externals/cxc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3106
Modified Files: Tag: branch-v0-39-2-extended ENV.c makefile makefile.in proc.c Added Files: Tag: branch-v0-39-2-extended bfilt.c bfilt2.c delta~.c reson~.c utime.c Removed Files: Tag: branch-v0-39-2-extended bangfilt.c bangfilt2.c microtime.c reson.c sigdelta.c Log Message: cleaned up cxc so that it passes the automated test in scripts/load_every_help.sh: renamed help files to standard name; made each file named after the class; removed non-functional aliases in flatspace
--- NEW FILE: bfilt.c --- /* bangfilter: = % x plus sel 0 * spaeter: % x plus sel y mit 2 arguments */ #include "m_pd.h" #include <math.h>
static t_class *bfilt_class;
typedef struct _bfilt { t_object x_obj; t_float x_f1; t_float x_f2; } t_bfilt;
static void *bfilt_new(t_floatarg f) { t_bfilt *x = (t_bfilt *)pd_new(bfilt_class); outlet_new(&x->x_obj, &s_bang); floatinlet_new(&x->x_obj, &x->x_f2); x->x_f1 = 0; x->x_f2 = f; return (x); }
static void bfilt_bang(t_bfilt *x) { int n2 = x->x_f2, result; if (n2 < 0) n2 = -n2; else if (!n2) n2 = 1; result = ((int)(x->x_f1)) % n2; if (result == 0) //result += n2; { outlet_bang(x->x_obj.ob_outlet); } //outlet_float(x->x_obj.ob_outlet, (t_float)result); }
static void bfilt_float(t_bfilt *x, t_float f) { x->x_f1 = f; bfilt_bang(x); }
void bfilt_setup() { bfilt_class = class_new(gensym("bfilt"), (t_newmethod)bfilt_new, 0, sizeof(t_bfilt), 0, A_DEFFLOAT, 0); class_addbang(bfilt_class, bfilt_bang); class_addfloat(bfilt_class, (t_method)bfilt_float); }
--- sigdelta.c DELETED ---
Index: makefile.in =================================================================== RCS file: /cvsroot/pure-data/externals/cxc/makefile.in,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -C2 -d -r1.1 -r1.1.2.1 *** makefile.in 1 Mar 2003 18:37:24 -0000 1.1 --- makefile.in 2 Apr 2007 20:37:40 -0000 1.1.2.1 *************** *** 23,27 **** LIBS = -lc -lm #LIBS = -lpthread -lm -lc ! SOURCES = ENV.c ascseq.c ascwave.c bangfilt.c bangfilt2.c binshift.c counter.c cx.c ixprint.c mean.c microtime.c prepend.c proc.c randomix.c reson.c sigdelta.c split.c TARGETS = $(SOURCES:.c=.$(EXT))
--- 23,27 ---- LIBS = -lc -lm #LIBS = -lpthread -lm -lc ! SOURCES = ENV.c ascseq.c ascwave.c bangfilt.c bangfilt2.c binshift.c counter.c cx.c ixprint.c mean.c utime.c prepend.c proc.c randomix.c reson~.c sigdelta.c split.c TARGETS = $(SOURCES:.c=.$(EXT))
--- NEW FILE: delta~.c --- #include "m_pd.h" #include <math.h> #ifdef NT #pragma warning( disable : 4244 ) #pragma warning( disable : 4305 ) #endif
/* ------------------------ delta~ ----------------------------- */
/* tilde object to take difference value. */
static t_class *delta_class;
typedef struct _delta { t_object x_obj; t_sample x_last; } t_delta;
static t_int *delta_perform(t_int *w) { t_delta *x = (t_delta *)(w[1]); t_float *in = (t_float *)(w[2]); t_float *out = (t_float *)(w[3]); int n = (int)(w[4]); while (n--) { float f = *(in++); // *out++ = (f > 0 ? f : -f); *out++ = (f > x->x_last ? fabs(f - x->x_last) : -fabs(f - x->x_last)); x->x_last = f; } return (w+5); }
static void delta_dsp(t_delta *x, t_signal **sp) { dsp_add(delta_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); }
static void *delta_new(void) { t_delta *x = (t_delta *)pd_new(delta_class); x->x_last = 0.; outlet_new(&x->x_obj, gensym("signal")); return (x); }
void delta_tilde_setup(void) { delta_class = class_new(gensym("delta~"), (t_newmethod)delta_new, 0, sizeof(t_delta), 0, A_DEFFLOAT, 0); class_addmethod(delta_class, nullfn, gensym("signal"), 0); class_addmethod(delta_class, (t_method)delta_dsp, gensym("dsp"), 0); }
--- bangfilt2.c DELETED ---
Index: makefile =================================================================== RCS file: /cvsroot/pure-data/externals/cxc/makefile,v retrieving revision 1.5 retrieving revision 1.5.2.1 diff -C2 -d -r1.5 -r1.5.2.1 *** makefile 4 Nov 2004 20:59:42 -0000 1.5 --- makefile 2 Apr 2007 20:37:40 -0000 1.5.2.1 *************** *** 23,27 **** LIBS = -lc -lm #LIBS = -lpthread -lm -lc ! SOURCES = ENV.c ascseq.c ascwave.c bangfilt.c bangfilt2.c binshift.c cx.c ixprint.c mean.c microtime.c proc.c randomix.c reson.c sigdelta.c split.c TARGETS = $(SOURCES:.c=.$(EXT))
--- 23,27 ---- LIBS = -lc -lm #LIBS = -lpthread -lm -lc ! SOURCES = ENV.c ascseq.c ascwave.c bangfilt.c bangfilt2.c binshift.c cx.c ixprint.c mean.c utime.c proc.c randomix.c reson~.c sigdelta.c split.c TARGETS = $(SOURCES:.c=.$(EXT))
--- bangfilt.c DELETED ---
--- reson.c DELETED ---
--- microtime.c DELETED ---
--- NEW FILE: bfilt2.c --- /* bangfilter: = % x plus sel 0 * spaeter: % x plus sel y mit 2 arguments */ #include "m_pd.h" #include <math.h>
static t_class *bfilt2_class;
typedef struct _bfilt2 { t_object x_obj; t_float x_f1; t_float x_f2; } t_bfilt2;
static void *bfilt2_new(t_floatarg f) { t_bfilt2 *x = (t_bfilt2 *)pd_new(bfilt2_class); outlet_new(&x->x_obj, &s_bang); floatinlet_new(&x->x_obj, &x->x_f2); x->x_f1 = 0; x->x_f2 = f; return (x); }
static void bfilt2_bang(t_bfilt2 *x) { int n2 = x->x_f2, result; if (n2 < 0) n2 = -n2; else if (!n2) n2 = 1; x->x_f1++; result = ((int)(x->x_f1)) % n2; if (result == 0) //result += n2; { outlet_bang(x->x_obj.ob_outlet); } //outlet_float(x->x_obj.ob_outlet, (t_float)result); }
static void bfilt2_float(t_bfilt2 *x, t_float f) { x->x_f1 = f; bfilt2_bang(x); }
void bfilt2_setup() { bfilt2_class = class_new(gensym("bfilt2"), (t_newmethod)bfilt2_new, 0, sizeof(t_bfilt2), 0, A_DEFFLOAT, 0); class_addbang(bfilt2_class, bfilt2_bang); class_addfloat(bfilt2_class, (t_method)bfilt2_float); }
--- NEW FILE: reson~.c --- /* * Copyright (c) 1997-1999 Mark Danks. * For information on usage and redistribution, and for a DISCLAIMER OF ALL * WARRANTIES, see the file, "GEM.LICENSE.TERMS" in this distribution. */
/* Original code by Miller Puckette */ /* a non-interpolating reson filter, not very carefully coded... */ /* 11/29/94 modified to do interpolation - M. Danks */
#include "m_pd.h"
#include <stdlib.h>
#define BUFSIZE 4096
typedef struct resonctl { float c_freq; float c_samprate; float c_feedback; int c_delayinsamps; float c_fraction; int c_phase; float *c_buf; } t_resonctl;
typedef struct sigreson { t_object x_obj; /* header */ t_resonctl *x_ctl; /* pointer to state */ t_resonctl x_cspace; /* garage for state when not in a chain */ } t_sigreson;
/* the DSP routine -- called for every n samples of input */ static t_int *cu_reson(t_int *w) { t_float *in1 = (t_float *)(w[1]); t_float *in2 = (t_float *)(w[2]); t_float *out = (t_float *)(w[3]); t_resonctl *x = (t_resonctl *)(w[4]); int n = (int)(w[5]); long i; int writephase = x->c_phase; for (i = 0; i < n; i++) { /* note two tricks: 1. input is read before output * is written, because the routine might be called * in-place; * 2 - a seed of 1E-20 is thrown in to avoid floating * underflow which slows the calculation down. */ int readphase, phase, delayinsamps; float fraction, f, g, freq, freqtemp;
float ftemp; freq = *in2++; freqtemp = (freq < 1 ? 1 : freq); ftemp = x->c_samprate/freqtemp; if (ftemp >= BUFSIZE-1) ftemp = BUFSIZE - 1.f; else if (ftemp < 1.0) ftemp = 1.f; delayinsamps = (int)ftemp; fraction = ftemp - delayinsamps;
readphase = writephase - delayinsamps; phase = readphase & (BUFSIZE-1); f = x->c_buf[phase] + fraction * (x->c_buf[(phase-1)& (BUFSIZE-1)] - x->c_buf[phase]); g = *in1++; *out++ = x->c_buf[(writephase++) & (BUFSIZE-1)] = g + x->c_feedback * f + 1E-20f; } x->c_phase = writephase & (BUFSIZE-1); return (w+6); }
/* sets the reson frequency */
void sigreson_float(t_sigreson *x, t_floatarg f) { float ftemp; x->x_ctl->c_freq = (f < 1 ? 1 : f); ftemp = x->x_ctl->c_samprate/x->x_ctl->c_freq; if (ftemp >= BUFSIZE - 1) ftemp = BUFSIZE - 1.f; else if (ftemp < 1.0) ftemp = 1.f; x->x_ctl->c_delayinsamps = (int)ftemp; x->x_ctl->c_fraction = ftemp - x->x_ctl->c_delayinsamps; }
/* routine which FTS calls to put you on the DSP chain or take you off. */
static void sigreson_dsp(t_sigreson *x, t_signal **sp) { x->x_ctl->c_samprate = sp[0]->s_sr; sigreson_float(x, x->x_ctl->c_freq); dsp_add(cu_reson, 5, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, x->x_ctl, sp[0]->s_n); }
static void sigreson_ft1(t_sigreson *x, t_floatarg f) /* sets feedback */ { if (f > .99999) f = .99999f; else if (f < -.99999) f = -.99999f; x->x_ctl->c_feedback = (float)f; }
static void sigreson_ff(t_sigreson *x) /* cleanup on free */ { free(x->x_ctl->c_buf); }
static t_class *sigreson_class;
void *sigreson_new(t_floatarg f, t_floatarg g) { t_sigreson *x = (t_sigreson *)pd_new(sigreson_class); outlet_new(&x->x_obj, &s_signal);
/* things in "cspace" are things you'll actually use at DSP time */ x->x_cspace.c_phase = 0; if (!(x->x_cspace.c_buf = (float *)malloc(BUFSIZE * sizeof(float)))) { error("buffer alloc failed"); return (0); } x->x_cspace.c_samprate = 44100.f; /* just a plausible default */
/* control block is in the garage at startup */ x->x_ctl = &x->x_cspace; sigreson_float(x, (t_float)f); /* setup params */ sigreson_ft1(x, g); /* make a "float" inlet */ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1")); return (x); }
void reson_tilde_setup() { sigreson_class = class_new(gensym("reson~"), (t_newmethod)sigreson_new, (t_method)sigreson_ff, sizeof(t_sigreson), 0, A_DEFFLOAT, A_DEFFLOAT, 0); class_addfloat(sigreson_class, (t_method)sigreson_float); class_addmethod(sigreson_class, (t_method)sigreson_ft1, gensym("ft1"), A_FLOAT, 0); class_addmethod(sigreson_class, (t_method)nullfn, &s_signal, A_NULL); class_addmethod(sigreson_class, (t_method)sigreson_dsp, gensym("dsp"), A_NULL); }
Index: ENV.c =================================================================== RCS file: /cvsroot/pure-data/externals/cxc/ENV.c,v retrieving revision 1.3 retrieving revision 1.3.2.1 diff -C2 -d -r1.3 -r1.3.2.1 *** ENV.c 18 Dec 2005 18:56:21 -0000 1.3 --- ENV.c 2 Apr 2007 20:37:40 -0000 1.3.2.1 *************** *** 85,89 **** class_addmethod(ENV_class, (t_method)ENV_setenv, gensym("setenv"), A_SYMBOL, A_SYMBOL); class_addfloat(ENV_class, ENV_float); - class_sethelpsymbol(ENV_class, gensym("ENV.pd")); }
--- 85,88 ----
Index: proc.c =================================================================== RCS file: /cvsroot/pure-data/externals/cxc/proc.c,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -C2 -d -r1.2 -r1.2.2.1 *** proc.c 1 Mar 2003 21:10:12 -0000 1.2 --- proc.c 2 Apr 2007 20:37:40 -0000 1.2.2.1 *************** *** 219,223 **** //class_addmethod(proc_class, (t_method)proc_setenv, gensym("setenv"), A_SYMBOL, A_SYMBOL); class_addfloat(proc_class, proc_float); - class_sethelpsymbol(proc_class, gensym("proc.pd")); }
--- 219,222 ----
--- NEW FILE: utime.c --- /* (c) 2002:cxc@web.fm microtime: seconds since epoch plus microsecs */
#include <m_pd.h> #ifdef NT #include <windows.h> #else #include <sys/time.h> #endif #include <time.h>
/* ----------------------- utime --------------------- */
static t_class *utime_class;
typedef struct _utime { t_object x_obj; t_outlet *x_outlet1; t_outlet *x_outlet2; } t_utime;
static void *utime_new(t_symbol *s, int argc, t_atom *argv) { t_utime *x = (t_utime *)pd_new(utime_class); x->x_outlet1 = outlet_new(&x->x_obj, &s_float); x->x_outlet2 = outlet_new(&x->x_obj, &s_float); return (x); }
#ifndef NT static void utime_bang(t_utime *x) { struct timeval myutime; struct timezone mytz;
gettimeofday(&myutime, &mytz); outlet_float(x->x_outlet2, (t_float)myutime.tv_usec); outlet_float(x->x_outlet1, (t_float)myutime.tv_sec); } #else static void utime_bang(t_utime *x) { FILETIME myfiletime; ULARGE_INTEGER ulfiletime, ulSec, uluSec;
GetSystemTimeAsFileTime(&myfiletime); ulfiletime.LowPart = myfiletime.dwLowDateTime; ulfiletime.HighPart = myfiletime.dwHighDateTime; ulfiletime.QuadPart -= 116444736000000000; // number of 100ns ticks from 1601-01-01 to 1970-01-01 ulSec.QuadPart = ulfiletime.QuadPart / (10 * 1000 * 1000); // FILETIME uses 100ns ticks uluSec.QuadPart = (ulfiletime.QuadPart - ulSec.QuadPart * 10 * 1000 * 1000) / 10; // FILETIME uses 100ns ticks
outlet_float(x->x_outlet2, (t_float)(__int64)ulSec.QuadPart ); outlet_float(x->x_outlet1, (t_float)(__int64)uluSec.QuadPart); } #endif
static void help_utime(t_utime *x) { post("\n%c utime\t\t:: get the current system time", 70); post("\noutputs are\t: seconds since epoch / remaining microseconds"); }
void utime_setup(void) { utime_class = class_new(gensym("utime"), (t_newmethod)utime_new, 0, sizeof(t_utime), 0, A_GIMME, 0);
class_addbang(utime_class, utime_bang);
class_addmethod(utime_class, (t_method)help_utime, gensym("help"), 0); }