Example #1
0
static t_int *hml_shelf_tilde_perform(t_int *w)
{
  t_float *in = (t_float *)(w[1]);
  t_float *out = (t_float *)(w[2]);
  t_hml_shelf_tilde *x = (t_hml_shelf_tilde *)(w[3]);
  int i, n = (t_int)(w[4]);
  t_float wn0, wn1=x->wn1, wn2=x->wn2;
  t_float a0=x->a0, a1=x->a1, a2=x->a2;
  t_float b1=x->b1, b2=x->b2;
  
  hml_shelf_tilde_dsp_tick(x);
  for(i=0; i<n; i++)
  {
    wn0 = *in++ + b1*wn1 + b2*wn2;
    *out++ = a0*wn0 + a1*wn1 + a2*wn2;
    wn2 = wn1;
    wn1 = wn0;
  }
  /* NAN protect */
  if(IEM_DENORMAL(wn2))
    wn2 = 0.0f;
  if(IEM_DENORMAL(wn1))
    wn1 = 0.0f;
  
  x->wn1 = wn1;
  x->wn2 = wn2;
  return(w+5);
}
Example #2
0
static t_int *vcf_filter_tilde_perform_hp2(t_int *w)
{
  t_float *in = (t_float *)(w[1]);
  t_float *lp = (t_float *)(w[2]);
  t_float *q = (t_float *)(w[3]);
  t_float *out = (t_float *)(w[4]);
  t_vcf_filter_tilde *x = (t_vcf_filter_tilde *)(w[5]);
  int i, n = (t_int)(w[6]);
  t_float wn0, wn1=x->x_wn1, wn2=x->x_wn2;
  t_float l, al, l2, rcp, forw;
  
  for(i=0; i<n; i+=4)
  {
    l = lp[i];
    if(q[i] < 0.000001f)
      al = 1000000.0f*l;
    else if(q[i] > 1000000.0f)
      al = 0.000001f*l;
    else
      al = l/q[i];
    l2 = l*l + 1.0f;
    rcp = 1.0f/(al + l2);
    forw = rcp * (l2 - 1.0f);
    
    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
    *out++ = forw*(wn0 - 2.0f*wn1 + wn2);
    wn2 = wn1;
    wn1 = wn0;
    
    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
    *out++ = forw*(wn0 - 2.0f*wn1 + wn2);
    wn2 = wn1;
    wn1 = wn0;
    
    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
    *out++ = forw*(wn0 - 2.0f*wn1 + wn2);
    wn2 = wn1;
    wn1 = wn0;
    
    wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2);
    *out++ = forw*(wn0 - 2.0f*wn1 + wn2);
    wn2 = wn1;
    wn1 = wn0;
  }
  /* NAN protect */
  if(IEM_DENORMAL(wn2))
    wn2 = 0.0f;
  if(IEM_DENORMAL(wn1))
    wn1 = 0.0f;
  
  x->x_wn1 = wn1;
  x->x_wn2 = wn2;
  return(w+7);
}
Example #3
0
static t_int *peakenv_tilde_perform(t_int *w)
{
  t_float *in = (t_float *)(w[1]);
  t_float *out = (t_float *)(w[2]);
  t_peakenv_tilde *x = (t_peakenv_tilde *)(w[3]);
  int n = (int)(w[4]);
  t_float peak = x->x_old_peak;
  t_float c1 = x->x_c1;
  t_float absolute;
  int i;
  
  for(i=0; i<n; i++)
  {
    absolute = fabs(*in++);
    peak *= c1;
    if(absolute > peak)
      peak = absolute;
    *out++ = peak;
  }
  /* NAN protect */
  if(IEM_DENORMAL(peak))
    peak = 0.0f;
  x->x_old_peak = peak;
  return(w+5);
}
Example #4
0
static t_int *peakenv_hold_tilde_perform(t_int *w)
{
  t_float *in = (t_float *)(w[1]);
  t_float *out = (t_float *)(w[2]);
  t_peakenv_hold_tilde *x = (t_peakenv_hold_tilde *)(w[3]);
  int n = (int)(w[4]);
  t_float peak = x->x_old_peak;
  t_float c1 = x->x_c1;
  t_float absolute;
  t_int i, counter;
  
  counter = x->x_counter;
  for(i=0; i<n; i++)
  {
    absolute = fabs(*in++);
    if(counter > 0)
      counter--;// hold peride
    else
      peak *= c1;// release periode
    if(absolute > peak)
    {
      peak = absolute;
      counter = x->x_n_hold;// new hold initialisation
    }
    *out++ = peak;
  }
  /* NAN protect */
  if(IEM_DENORMAL(peak))
    peak = 0.0f;
  x->x_old_peak = peak;
  x->x_counter = counter;
  return(w+5);
}
Example #5
0
static void pvu_tilde_tick(t_pvu_tilde *x)
{
  t_float db;
  int i;
  
  x->x_old_peak *= x->x_c1;
  /* NAN protect */
  if(IEM_DENORMAL(x->x_old_peak))
    x->x_old_peak = 0.0f;
  
  if(x->x_cur_peak > x->x_old_peak)
    x->x_old_peak = x->x_cur_peak;
  if(x->x_old_peak <= 0.0000000001f)
    db = -199.9f;
  else if(x->x_old_peak > 1000000.0f)
  {
    db = 120.0f;
    x->x_old_peak = 1000000.0f;
  }
  else
    db = 8.6858896381f*log(x->x_old_peak);
  if(db >= x->x_threshold_over)
  {
    x->x_overflow_counter++;
    outlet_float(x->x_outlet_over, (t_float)x->x_overflow_counter);
  }
  outlet_float(x->x_outlet_meter, db);
  x->x_cur_peak = 0.0f;
  clock_delay(x->x_clock, x->x_metro_time);
}
Example #6
0
static t_int *hml_shelf_tilde_perf8(t_int *w)
{
  t_float *in = (t_float *)(w[1]);
  t_float *out = (t_float *)(w[2]);
  t_hml_shelf_tilde *x = (t_hml_shelf_tilde *)(w[3]);
  int i, n = (t_int)(w[4]);
  t_float wn[10];
  t_float a0=x->a0, a1=x->a1, a2=x->a2;
  t_float b1=x->b1, b2=x->b2;
  
  hml_shelf_tilde_dsp_tick(x);
  wn[0] = x->wn2;
  wn[1] = x->wn1;
  for(i=0; i<n; i+=8, in+=8, out+=8)
  {
    wn[2] = in[0] + b1*wn[1] + b2*wn[0];
    out[0] = a0*wn[2] + a1*wn[1] + a2*wn[0];
    wn[3] = in[1] + b1*wn[2] + b2*wn[1];
    out[1] = a0*wn[3] + a1*wn[2] + a2*wn[1];
    wn[4] = in[2] + b1*wn[3] + b2*wn[2];
    out[2] = a0*wn[4] + a1*wn[3] + a2*wn[2];
    wn[5] = in[3] + b1*wn[4] + b2*wn[3];
    out[3] = a0*wn[5] + a1*wn[4] + a2*wn[3];
    wn[6] = in[4] + b1*wn[5] + b2*wn[4];
    out[4] = a0*wn[6] + a1*wn[5] + a2*wn[4];
    wn[7] = in[5] + b1*wn[6] + b2*wn[5];
    out[5] = a0*wn[7] + a1*wn[6] + a2*wn[5];
    wn[8] = in[6] + b1*wn[7] + b2*wn[6];
    out[6] = a0*wn[8] + a1*wn[7] + a2*wn[6];
    wn[9] = in[7] + b1*wn[8] + b2*wn[7];
    out[7] = a0*wn[9] + a1*wn[8] + a2*wn[7];
    wn[0] = wn[8];
    wn[1] = wn[9];
  }
  /* NAN protect */
  if(IEM_DENORMAL(wn[0]))
    wn[0] = 0.0f;
  if(IEM_DENORMAL(wn[1]))
    wn[1] = 0.0f;
  
  x->wn1 = wn[1];
  x->wn2 = wn[0];
  return(w+5);
}
Example #7
0
static t_int *lp1_t_tilde_perform(t_int *w)
{
  t_float *in = (t_float *)(w[1]);
  t_float *out = (t_float *)(w[2]);
  t_lp1_t_tilde *x = (t_lp1_t_tilde *)(w[3]);
  int i, n = (t_int)(w[4]);
  t_float yn0, yn1=x->yn1;
  t_float c0=x->c0, c1=x->c1;
  
  lp1_t_tilde_dsp_tick(x);
  for(i=0; i<n; i++)
  {
    yn0 = (*in++)*c0 + yn1*c1;
    *out++ = yn0;
    yn1 = yn0;
  }
  /* NAN protect */
  if(IEM_DENORMAL(yn1))
    yn1 = 0.0f;
  x->yn1 = yn1;
  return(w+5);
}
Example #8
0
static t_int *lp1_t_tilde_perf8(t_int *w)
{
  t_float *in = (t_float *)(w[1]);
  t_float *out = (t_float *)(w[2]);
  t_lp1_t_tilde *x = (t_lp1_t_tilde *)(w[3]);
  int i, n = (t_int)(w[4]);
  t_float ynn[9];
  t_float c0=x->c0, c1=x->c1;
  
  lp1_t_tilde_dsp_tick(x);
  ynn[0] = x->yn1;
  for(i=0; i<n; i+=8, in+=8, out+=8)
  {
    ynn[1] = in[0]*c0 + ynn[0]*c1;
    out[0] = ynn[1];
    ynn[2] = in[1]*c0 + ynn[1]*c1;
    out[1] = ynn[2];
    ynn[3] = in[2]*c0 + ynn[2]*c1;
    out[2] = ynn[3];
    ynn[4] = in[3]*c0 + ynn[3]*c1;
    out[3] = ynn[4];
    ynn[5] = in[4]*c0 + ynn[4]*c1;
    out[4] = ynn[5];
    ynn[6] = in[5]*c0 + ynn[5]*c1;
    out[5] = ynn[6];
    ynn[7] = in[6]*c0 + ynn[6]*c1;
    out[6] = ynn[7];
    ynn[8] = in[7]*c0 + ynn[7]*c1;
    out[7] = ynn[8];
    ynn[0] = ynn[8];
  }
  /* NAN protect */
  if(IEM_DENORMAL(ynn[0]))
    ynn[0] = 0.0f;
  
  x->yn1 = ynn[0];
  return(w+5);
}
Example #9
0
File: rvu~.c Project: IcaroL2ORK/pd
static void rvu_tilde_tick_metro(t_rvu_tilde *x)
{
  t_float dbr, cur_rms, c1=x->x_c1;
  
  cur_rms = (1.0f - c1)*x->x_sum_rms*x->x_rcp + c1*x->x_old_rms;
  /* NAN protect */
  if(IEM_DENORMAL(cur_rms))
    cur_rms = 0.0f;
  
  if(cur_rms <= 0.0000000001f)
    dbr = -99.9f;
  else if(cur_rms > 1000000.0f)
  {
    dbr = 60.0f;
    x->x_old_rms = 1000000.0f;
  }
  else
    dbr = 4.3429448195f*log(cur_rms);
  x->x_sum_rms = 0.0f;
  x->x_old_rms = cur_rms;
  outlet_float(x->x_obj.ob_outlet, dbr);
  clock_delay(x->x_clock_metro, x->x_metro_time);
}