Ignore:
Timestamp:
Dec 4, 2009, 1:39:30 AM (15 years ago)
Author:
Paul Brossier <piem@piem.org>
Branches:
feature/autosink, feature/cnn, feature/cnn_org, feature/constantq, feature/crepe, feature/crepe_org, feature/pitchshift, feature/pydocstrings, feature/timestretch, fix/ffmpeg5, master, pitchshift, sampler, timestretch, yinfft+
Children:
d207300
Parents:
d95ff38
Message:

src/temporal: switch to mono

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/temporal/filter.c

    rd95ff38 r741bdda  
    4949aubio_filter_do (aubio_filter_t * f, fvec_t * in)
    5050{
    51   uint_t i, j, l, order = f->order;
    52   lsmp_t *x;
    53   lsmp_t *y;
    54   lsmp_t *a = f->a->data[0];
    55   lsmp_t *b = f->b->data[0];
     51  uint_t j, l, order = f->order;
     52  lsmp_t *x = f->x->data;
     53  lsmp_t *y = f->y->data;
     54  lsmp_t *a = f->a->data;
     55  lsmp_t *b = f->b->data;
    5656
    57   for (i = 0; i < in->channels; i++) {
    58     x = f->x->data[i];
    59     y = f->y->data[i];
    60     for (j = 0; j < in->length; j++) {
    61       /* new input */
    62       x[0] = KILL_DENORMAL (in->data[i][j]);
    63       y[0] = b[0] * x[0];
    64       for (l = 1; l < order; l++) {
    65         y[0] += b[l] * x[l];
    66         y[0] -= a[l] * y[l];
    67       }
    68       /* new output */
    69       in->data[i][j] = y[0];
    70       /* store for next sample */
    71       for (l = order - 1; l > 0; l--) {
    72         x[l] = x[l - 1];
    73         y[l] = y[l - 1];
    74       }
     57  for (j = 0; j < in->length; j++) {
     58    /* new input */
     59    x[0] = KILL_DENORMAL (in->data[j]);
     60    y[0] = b[0] * x[0];
     61    for (l = 1; l < order; l++) {
     62      y[0] += b[l] * x[l];
     63      y[0] -= a[l] * y[l];
    7564    }
    76     /* store for next run */
    77     f->x->data[i] = x;
    78     f->y->data[i] = y;
     65    /* new output */
     66    in->data[j] = y[0];
     67    /* store for next sample */
     68    for (l = order - 1; l > 0; l--) {
     69      x[l] = x[l - 1];
     70      y[l] = y[l - 1];
     71    }
    7972  }
    8073}
     
    8477aubio_filter_do_filtfilt (aubio_filter_t * f, fvec_t * in, fvec_t * tmp)
    8578{
    86   uint_t j, i = 0;
     79  uint_t j;
    8780  uint_t length = in->length;
    8881  /* apply filtering */
     
    9184  /* mirror */
    9285  for (j = 0; j < length; j++)
    93     tmp->data[i][length - j - 1] = in->data[i][j];
     86    tmp->data[length - j - 1] = in->data[j];
    9487  /* apply filtering on mirrored */
    9588  aubio_filter_do (f, tmp);
     
    9790  /* invert back */
    9891  for (j = 0; j < length; j++)
    99     in->data[i][j] = tmp->data[i][length - j - 1];
     92    in->data[j] = tmp->data[length - j - 1];
    10093}
    10194
     
    139132
    140133aubio_filter_t *
    141 new_aubio_filter (uint_t order, uint_t channels)
     134new_aubio_filter (uint_t order)
    142135{
    143136  aubio_filter_t *f = AUBIO_NEW (aubio_filter_t);
    144   f->x = new_lvec (order, channels);
    145   f->y = new_lvec (order, channels);
    146   f->a = new_lvec (order, 1);
    147   f->b = new_lvec (order, 1);
     137  f->x = new_lvec (order);
     138  f->y = new_lvec (order);
     139  f->a = new_lvec (order);
     140  f->b = new_lvec (order);
    148141  /* by default, samplerate is not set */
    149142  f->samplerate = 0;
    150143  f->order = order;
    151144  /* set default to identity */
    152   f->a->data[0][1] = 1.;
     145  f->a->data[1] = 1.;
    153146  return f;
    154147}
Note: See TracChangeset for help on using the changeset viewer.