#include #include "../H/ugens.h" #include "../H/sfheader.h" int RESET = 100; /* times per sec to reinitialize envelope */ extern SFHEADER sfdesc[NFILES]; #define BUFFERSIZE 2048 reset(p,n_args) float *p; { if(p[0]) RESET = p[0]; fprintf(stderr,"Envelope calls set to %d times per sec\n",RESET); } setline() {} mix(p,n_args) float *p; { register int i,j,k,si,chlist[4],nsamps; int input,output,inputch,outputch; float inpbuf[BUFFERSIZE],outpbuf[BUFFERSIZE],dur,amp,val; float *inpoint,*outpoint,*inend; int isisize,osisize; input = 0; output = 1; inputch = sfchans(&sfdesc[input]); outputch = sfchans(&sfdesc[output]); dur = (p[2] < 0.) ? -p[2] : p[2] - p[0]; amp = p[3]; setnote(p[0],dur,input); nsamps = setnote(p[1],dur,output); si = sfsrate(&sfdesc[input])/RESET; for(i=0; insamps) ? nsamps-i : si; isisize = si * sfchans(&sfdesc[input]); osisize = si * sfchans(&sfdesc[output]); bclrf(outpbuf,osisize); bgetin(inpbuf,input,isisize); for(inpoint=inpbuf,outpoint=outpbuf,inend=inpoint+isisize; inpoint < inend; inpoint += inputch,outpoint += outputch) { for(j=0; j= 0) *(outpoint + chlist[j]) += amp * *(inpoint + j); } } baddout(outpbuf,output,si * sfchans(&sfdesc[output])); } endnote(output); } testwrite(p,n_args) float *p; { int i,j,nsamps; float out[4]; nsamps = setnote(p[0],p[1],1); for(i=0; i