WDELAY() WDELAY(_create)(unsigned int _k) { WDELAY() w = (WDELAY()) malloc(sizeof(struct WDELAY(_s))); w->k = _k; // allocte memory w->v = (T*) malloc((w->k)*sizeof(T)); w->read_index = 0; // clear window WDELAY(_clear)(w); return w; }
// create delay buffer object with '_delay' samples WDELAY() WDELAY(_create)(unsigned int _delay) { // create main object WDELAY() q = (WDELAY()) malloc(sizeof(struct WDELAY(_s))); // set internal values q->delay = _delay; // allocte memory q->v = (T*) malloc((q->delay)*sizeof(T)); q->read_index = 0; // clear window WDELAY(_clear)(q); return q; }
q->delay = _delay; // allocte memory q->v = (T*) malloc((q->delay)*sizeof(T)); q->read_index = 0; // clear window WDELAY(_clear)(q); return q; } // re-create delay buffer object with '_delay' samples // _q : old delay buffer object // _delay : delay for new object WDELAY() WDELAY(_recreate)(WDELAY() _q, unsigned int _delay) { // copy internal buffer, re-aligned unsigned int ktmp = _q->delay; T * vtmp = (T*) malloc(_q->delay * sizeof(T)); unsigned int i; for (i=0; i<_q->delay; i++) vtmp[i] = _q->v[ (i + _q->read_index) % _q->delay ]; // destroy object and re-create it WDELAY(_destroy)(_q); _q = WDELAY(_create)(_delay); // push old values for (i=0; i<ktmp; i++)