This is apass.c in view mode; [Download] [Up]
#include <stdio.h>
#include "lprev.h"
#include "apass.h"
float **apz; /* pointers to allpass z-delay buffers */
float **aps; /* output buffers for allpass */
float Iapdlys[] = APDLYS; /* delay times in seconds of allpass */
float *apdlys = Iapdlys;
int *aplens; /* delay lengths corresponding to delay times */
int *api; /* indicies into delay tables for each rev */
float Iapg1[] = APG1; /* allpass g1 coefficients */
float *apg1 = Iapg1;
float *apg2;
extern float srate; /* from lprev.c */
apass(ibuf, obuf, n, zbuf, zlen, zi, G1, G2)
register float *ibuf, *obuf, *zbuf;
int zlen, *zi, n;
float G1, G2;
{
register int i;
for (i = 0; i < n; i++)
{
if(++*zi >= zlen) *zi = 0;
*(obuf+i) = *(zbuf+*zi) + (G1*ibuf[i]);
*(zbuf+*zi) = *(zbuf+*zi) * G2 + ibuf[i];
}
}
int nap;
apassinit()
{
register int i;
/* setup allpass delay buffers from delay times */
for (nap = 0; apdlys[nap] != -1.0; nap++) /* empty */ ;
apz = (float **) malloc(sizeof(float **) * nap);
aplens = (int *) malloc(sizeof(int *) * nap);
api = (int *) malloc(sizeof(int *) * nap);
aps = (float **) malloc(sizeof(float **) * nap);
apg2 = (float *) malloc(sizeof(float *) * nap);
for (i = 0; i < nap; i++)
{
/* set apg2 */
apg2[i] = (1.0 - apg1[i]);
/* get length of allpass delay line */
aplens[i] = srate * apdlys[i];
/* apz points to arrays used by allpass reverb filters */
apz[i] = (float *) calloc(sizeof(float)*aplens[i], 1);
/* output buffers for multiple calls to apass() */
aps[i] = (float *) calloc(sizeof(float) * BUFSIZ, 1);
}
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.