1
/******************************************************
3
* zexy - implementation file
5
* copyleft (c) IOhannes m zm�lnig
7
* 1999:forum::f�r::uml�ute:2004
9
* institute of electronic music and acoustics (iem)
11
******************************************************
13
* license: GNU General Public License v.2
15
******************************************************/
18
1110:forum::f�r::uml�ute:1999
23
/* ------------------------ blockmirror~ ----------------------------- */
25
/* mirrors a signalblock around it's center:
26
{x[0], x[1], ... x[n-1]} --> {x[n-1], x[n-2], ... x[0]}
29
static t_class *blockmirror_class;
31
typedef struct _blockmirror
36
t_sample *blockbuffer;
39
static void blockmirror_float(t_blockmirror *x, t_floatarg f)
44
static t_int *blockmirror_perform(t_int *w)
46
t_blockmirror *x = (t_blockmirror *)(w[1]);
47
t_sample *in = (t_sample *)(w[2]);
48
t_sample *out = (t_sample *)(w[3]);
53
t_sample *dummy=x->blockbuffer;
54
while(n--)*dummy++=*in++;
56
while(N--)*out++=*dummy--;
59
while(n--)*out++=*in--;
61
} else while (n--) *out++ = *in++;
65
static void blockmirror_dsp(t_blockmirror *x, t_signal **sp)
67
if (x->blocksize<sp[0]->s_n){
68
if(x->blockbuffer)freebytes(x->blockbuffer, sizeof(*x->blockbuffer)*x->blocksize);
69
x->blocksize = sp[0]->s_n;
70
x->blockbuffer = getbytes(sizeof(*x->blockbuffer)*x->blocksize);
72
dsp_add(blockmirror_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n);
75
static void blockmirror_helper(t_blockmirror*x)
77
post("\n%c blockmirror~-object for reverting a signal", HEARTSYMBOL);
78
post("'help' : view this\n"
80
post("outlet : signal~");
82
static void blockmirror_free(t_blockmirror*x)
85
freebytes(x->blockbuffer, sizeof(*x->blockbuffer)*x->blocksize);
88
static void *blockmirror_new(void)
90
t_blockmirror *x = (t_blockmirror *)pd_new(blockmirror_class);
91
outlet_new(&x->x_obj, gensym("signal"));
97
void blockmirror_tilde_setup(void)
99
blockmirror_class = class_new(gensym("blockmirror~"), (t_newmethod)blockmirror_new,
100
(t_method)blockmirror_free,
101
sizeof(t_blockmirror), 0, A_NULL);
102
class_addmethod(blockmirror_class, nullfn, gensym("signal"), 0);
103
class_addmethod(blockmirror_class, (t_method)blockmirror_dsp, gensym("dsp"), 0);
105
class_addfloat(blockmirror_class, blockmirror_float);
107
class_addmethod(blockmirror_class, (t_method)blockmirror_helper, gensym("help"), 0);
108
zexy_register("blockmirror~");