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.