ftp.nice.ch/pub/next/unix/audio/cmusic.bs.N.tar.gz#/src/cmusic/ug.zdelay.c

This is ug.zdelay.c in view mode; [Download] [Up]

/* Interpolating Delay  Unit Generator */

#include "mm.head.h"
#include "ug.head.h"
#include <stdio.h>

#define IN	1
#define MAXTIME	2
#define DBUF	3
#define DLEN	4
#define NOW	5
#define GAIN	6
#define DTIME	7

zdelay

UGHEAD{
    UGINIT;
    float *dbuf, do_delay();
    double d, md, out ;
    long dlen, now;
    int t, t2, ntaps = (narg-6)/2;

    if(STARTNOTE){
	dlen = LVAL(DLEN) = VAL(MAXTIME)*Srate + 0.5;
	now = LVAL(NOW) = 0;
	FPTR(DBUF) = (float *) calloc(dlen, sizeof(float));
    }
    dbuf = FPTR(DBUF);
    dlen = LVAL(DLEN);
    now = LVAL(NOW);
    md = VAL(MAXTIME);
    UGLOOP{
	dbuf[now] = VAL(IN); /* install current sample in delay buffer */
	out = 0;
	for(t = 0; t < ntaps; t++){
	    t2 = t << 1;
	    d = VAL(DTIME+t2);
	    if( d > md || d < 0.0){
	    fprintf(stderr,
		"\nCMUSIC: zdelay error, dtime = %f, maxtime = %f\n",d, md);
		exit(-1);
	    }
	    d *= Srate;
	    out += do_delay(dbuf,dlen,now,d)*VAL(GAIN+t2);
	}
	VAL(OUT) = out;
	now -= 1;
	if(now < 0)now = dlen - 1;
	LVAL(NOW) = now;
	LVAL(DLEN) = dlen;
	UGEND(0);
    }
    if(ENDNOTE){
	free(dbuf);
    }
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.