#include "../H/ugens.h" #define NPOLE 32 #define FRAMSIZE (NPOLE+4) #define FPREC 22 #define RECSIZE (FPREC*FRAMSIZE) #define BPREC (RECSIZE*FLOAT) #define BPFRAME (FRAMSIZE*FLOAT) int anal; play(p,n_args) float *p; { float buzzamp,ramp,xamp,amp,si,hn,phs,*f,out[4],srd2,magic; float c[FRAMSIZE],past[NPOLE*2],val,frames,frame1,frameno,ampmlt,errno; float *ballpole(),*bbuzz(),*brandf(),alpvals[2048],buzvals[2048]; int jcount = 0; long seed,i,nsamps; int counter,flag; float thresh,randamp,randoff; float *cpoint; for(i=0; i thresh) ? 0 : 1; ramp = ampmlt * randamp; si = c[3] * magic; hn = (int)(srd2/c[3]); counter = (float)(SR/c[3]); counter = (counter > i) ? i : counter; if(!counter) break; /* if(errno) *bbuzz(ampmlt,si,hn,f,&phs,buzvals,counter); else *brandf(&seed,buzvals,counter); *ballpole(buzvals,&jcount,NPOLE, past,cpoint,alpvals,counter); bwipeout(alpvals,0,counter); */ } if(errno) /*printf(" %f %f %f %f\n",ampmlt,si,hn,phs); */ val = buzz(ampmlt,si,hn,f,&phs); else val = (float)(rand()-randoff) * ramp; val = allpole(val,&jcount,NPOLE,past,cpoint); WIPEOUT(&val,0); } endnote(0); } getfr(frameno,c) float frameno,*c; { int frame,i,j; static float array[RECSIZE]; float fraction; static int oldframe = 0; static int endframe = 0; frame = (int)frameno; fraction = frameno - (float)frame; if(!((frame >= oldframe) && (frame < endframe))) { lseek(anal,((long)frame*(long)BPFRAME),0); read(anal,(char *)array,BPREC); oldframe = frame; endframe = oldframe + FPREC - 1; } for(i=(frame-oldframe)*FRAMSIZE,j=0; j