|  | 
#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
 |