#ifndef GVERBDSP_H #define GVERBDSP_H #include "ladspa-util.h" namespace rack_plugin_rcm { typedef struct { int size; int idx; float *buf; } ty_fixeddelay; typedef struct { int size; float coeff; int idx; float *buf; } ty_diffuser; typedef struct { float damping; float delay; } ty_damper; ty_diffuser *diffuser_make(int, float); void diffuser_free(ty_diffuser *); void diffuser_flush(ty_diffuser *); //float diffuser_do(ty_diffuser *, float); ty_damper *damper_make(float); void damper_free(ty_damper *); void damper_flush(ty_damper *); //void damper_set(ty_damper *, float); //float damper_do(ty_damper *, float); ty_fixeddelay *fixeddelay_make(int); void fixeddelay_free(ty_fixeddelay *); void fixeddelay_flush(ty_fixeddelay *); //float fixeddelay_read(ty_fixeddelay *, int); //void fixeddelay_write(ty_fixeddelay *, float); int isprime(int); int nearest_prime(int, float); static __inline float diffuser_do(ty_diffuser *p, float x) { float y,w; w = x - p->buf[p->idx]*p->coeff; w = flush_to_zero(w); y = p->buf[p->idx] + w*p->coeff; p->buf[p->idx] = w; p->idx = (p->idx + 1) % p->size; return(y); } static __inline float fixeddelay_read(ty_fixeddelay *p, int n) { int i; i = (p->idx - n + p->size) % p->size; return(p->buf[i]); } static __inline void fixeddelay_write(ty_fixeddelay *p, float x) { p->buf[p->idx] = x; p->idx = (p->idx + 1) % p->size; } static __inline void damper_set(ty_damper *p, float damping) { p->damping = damping; } static __inline float damper_do(ty_damper *p, float x) { float y; y = x*(1.0-p->damping) + p->delay*p->damping; p->delay = y; return(y); } } // namespace rack_plugin_rcm #endif