This is modelinst.c in view mode; [Download] [Up]
/* a simple Cmix instrument to demonstrate i/o protocols. Will mix two input files to one outputfile */ #include "/musr/H/ugens.h" #include "/musr/H/sfheader.h" extern SFHEADER sfdesc[NFILES]; /* to access header information */ r2w1(p,n_args) float *p; /* *p is an array of floats containing the arguments passed to this routine by Minc, n_args is the number of such args and is useful for error checking*/ { int i,j,nsamps,input1,input2,output,nchans; float xin1[4],xin2[4],out[4],amp1,amp2; input1=0; input2=1; output=2; /* internal Cmix file numbers */ /* match numbers on input() and output() commands */ /* p0=starting time on output file, p1= duration, p2=starting time on inputfile1, p3=starting time on inputfile2 p4=amp of inputfile1 p5=amp of inputfile2 */ nsamps=setnote(p[0],p[1],output); /* position outputfile*/ setnote(p[2],p[1],input1); /* position inputfile1*/ setnote(p[3],p[1],input2); /* position inputfile2*/ amp1=p[4]; amp2=p[5]; /* we will assume that all three files have the same number of channels */ nchans = sfchans(&sfdesc[0]); /* see sfheader.h for macros desc. */ for(i=0; i<nsamps; i++) { if(!GETIN(xin1,input1)) break; if(!GETIN(xin2,input2)) break; /* we will terminate impolitely for now if we reach an eof on either input. GETIN returns the number of bytes read. To do this right you should shut off a file once you reach its eof, but continue reading the other one*/ for(j=0; j<nchans; j++) { out[j] = xin1[j]; out[j] += xin2[j]; } ADDOUT(out,output); /* add output to disk*/ } endnote(output); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.