#include #include "../H/ugens.h" #include "../H/sfheader.h" #include #include "mix.h" static SFCODE ampcode = { SF_MAXAMP, sizeof(SFMAXAMP) + sizeof(SFCODE) }; extern int relampsign; extern float begin_line,end_line; extern int offset; extern SFHEADER sfdesc[NFILES]; extern int pointer[NFILES]; /* to be used as pointer within sound sndbuf */ extern int bufsize[NFILES]; /* word length of sndbuf */ extern char *sndbuf[NFILES]; /* address of sndbuf */ extern char peakoff[NFILES]; extern char *peak[NFILES]; extern float SR; extern int input,output,non,outch[4],inpch[4]; extern int inbufsize,outbufsize,nsamps,counter,skip; extern float amp,dur,enval; extern int clobber; extern int lineset; extern float array[SIZE],tabs[2]; float left[4],right[4]; extern int RESET; /* times per sec to reinitialize envelope */ int test_stereo_off = 1; double test_stereo(p,n_args) float *p; { double output; double stereo(); test_stereo_off = 0; output = stereo(p,n_args); test_stereo_off = 1; return(output); } double stereo(p,n_args) float *p; int n_args; { int jj; char *cp,*getsfcode(); float opeak,*pk; double _dur(); SFMAXAMP sfm; input = 0; output = 1; if(!p[2]) p[2] = _dur(&p[2],1); dur = (p[2] < 0) ? -p[2] : (p[2] - p[0]); if(!lineset) { for(jj=0; jj opeak) opeak = sfmaxamp(&sfm,jj); printf("Peak amplitude of input file is %e\n",opeak); amp = p[3]/opeak; } non=0; for(jj = n_args; jj < (4 + sfchans(&sfdesc[input])); jj++) p[jj] = -1; for(jj = 0; jj= 0) { left[non] = p[4+jj]; right[non] = 1.-p[4+jj]; inpch[non++] = jj; } } if(sfclass(&sfdesc[input]) == SHORT) { if(sfclass(&sfdesc[output]) == SHORT) { stereoii(); return(MAX(pk[0],pk[1])); } if(sfclass(&sfdesc[output]) == FLOAT) { stereoif(); return(MAX(pk[0],pk[1])); } } else { if(sfclass(&sfdesc[output]) == SHORT) { stereofi(); return(MAX(pk[0],pk[1])); } if(sfclass(&sfdesc[output]) == FLOAT) { stereoff(); return(MAX(pk[0],pk[1])); } } } stereoii() { register short *ibuf,*obuf; register loop,jj,ipoint,opoint; register inchnl,outchnl; ibuf = (short *)sndbuf[input]; obuf = (short *)sndbuf[output]; inchnl = sfchans(&sfdesc[input]); outchnl = sfchans(&sfdesc[output]); opoint=pointer[output]; /* copy to save offset lookups every time*/ ipoint=pointer[input]; loop=nsamps; if(!clobber) while(loop--) { if(!counter--) { enval = tablei(nsamps+1-loop+offset,array,tabs) * amp; counter = skip; } for(jj = 0; jj= inbufsize ) { ipoint = 0; if(_readit(input) == 0) { fprintf(stderr,"reached eof on input\n"); goto out; } } if(opoint >= outbufsize ) { pointer[output] = opoint; if(!peakoff[output]) _chkpeak(output); if(test_stereo_off) _writeit(output); else _forward(output); _readit(output); _backup(output); opoint = 0; } } else while(loop--) { if(!counter--) { enval = tablei(nsamps+1-loop+offset,array,tabs) * amp; counter = skip; } for(jj = 0; jj= inbufsize ) { ipoint = 0; if(_readit(input) == 0) { fprintf(stderr,"reached eof on input\n"); goto out; } } if(opoint >= outbufsize ) { pointer[output] = opoint; if(!peakoff[output]) _chkpeak(output); if(test_stereo_off) _writeit(output); else _forward(output); _readit(output); _backup(output); opoint = 0; } } out: pointer[input] = ipoint; pointer[output] = opoint; if(test_stereo_off){ _writeit(output); endnote(output); } else { _forward(output); endnote(-output); } } stereoif() { register short *ibuf; register float *obuf; register loop,jj,ipoint,opoint; register inchnl,outchnl; ibuf = (short *)sndbuf[input]; obuf = (float *)sndbuf[output]; inchnl = sfchans(&sfdesc[input]); outchnl = sfchans(&sfdesc[output]); opoint=pointer[output]; /* copy to save offset lookups every time*/ ipoint=pointer[input]; loop=nsamps; if(!clobber) while(loop--) { if(!counter--) { enval = tablei(nsamps+1-loop+offset,array,tabs) * amp; counter = skip; } for(jj = 0; jj= inbufsize ) { ipoint = 0; if(_readit(input) == 0) { fprintf(stderr,"reached eof on input\n"); goto out; } } if(opoint >= outbufsize ) { pointer[output] = opoint; if(!peakoff[output]) _chkpeak(output); if(test_stereo_off) _writeit(output); else _forward(output); _readit(output); _backup(output); opoint = 0; } } else while(loop--) { if(!counter--) { enval = tablei(nsamps+1-loop+offset,array,tabs) * amp; counter = skip; } for(jj = 0; jj= inbufsize ) { ipoint = 0; if(_readit(input) == 0) { fprintf(stderr,"reached eof on input\n"); goto out; } } if(opoint >= outbufsize ) { pointer[output] = opoint; if(!peakoff[output]) _chkpeak(output); if(test_stereo_off) _writeit(output); else _forward(output); _readit(output); _backup(output); opoint = 0; } } out: pointer[input] = ipoint; pointer[output] = opoint; if(test_stereo_off){ _writeit(output); endnote(output); } else { _forward(output); endnote(-output); } } stereofi() { register short *obuf; register float *ibuf; register loop,jj,ipoint,opoint; register inchnl,outchnl; ibuf = (float *)sndbuf[input]; obuf = (short *)sndbuf[output]; inchnl = sfchans(&sfdesc[input]); outchnl = sfchans(&sfdesc[output]); opoint=pointer[output]; /* copy to save offset lookups every time*/ ipoint=pointer[input]; loop=nsamps; if(!clobber) while(loop--) { if(!counter--) { enval = tablei(nsamps+1-loop+offset,array,tabs) * amp; counter = skip; } for(jj = 0; jj= inbufsize ) { ipoint = 0; if(_readit(input) == 0) { fprintf(stderr,"reached eof on input\n"); goto out; } } if(opoint >= outbufsize ) { pointer[output] = opoint; if(!peakoff[output]) _chkpeak(output); if(test_stereo_off) _writeit(output); else _forward(output); _readit(output); _backup(output); opoint = 0; } } else while(loop--) { if(!counter--) { enval = tablei(nsamps+1-loop+offset,array,tabs) * amp; counter = skip; } for(jj = 0; jj= inbufsize ) { ipoint = 0; if(_readit(input) == 0) { fprintf(stderr,"reached eof on input\n"); goto out; } } if(opoint >= outbufsize ) { pointer[output] = opoint; if(!peakoff[output]) _chkpeak(output); if(test_stereo_off) _writeit(output); else _forward(output); _readit(output); _backup(output); opoint = 0; } } out: pointer[input] = ipoint; pointer[output] = opoint; if(test_stereo_off){ _writeit(output); endnote(output); } else { _forward(output); endnote(-output); } } stereoff() { register float *ibuf,*obuf; register loop,jj,ipoint,opoint; register inchnl,outchnl; ibuf = (float *)sndbuf[input]; obuf = (float *)sndbuf[output]; inchnl = sfchans(&sfdesc[input]); outchnl = sfchans(&sfdesc[output]); opoint=pointer[output]; /* copy to save offset lookups every time*/ ipoint=pointer[input]; loop=nsamps; if(!clobber) while(loop--) { if(!counter--) { enval = tablei(nsamps+1-loop+offset,array,tabs) * amp; counter = skip; } for(jj = 0; jj= inbufsize ) { ipoint = 0; if(_readit(input) == 0) { fprintf(stderr,"reached eof on input\n"); goto out; } } if(opoint >= outbufsize ) { pointer[output] = opoint; if(!peakoff[output]) _chkpeak(output); if(test_stereo_off) _writeit(output); else _forward(output); _readit(output); _backup(output); opoint = 0; } } else while(loop--) { if(!counter--) { enval = tablei(nsamps+1-loop+offset,array,tabs) * amp; counter = skip; } for(jj = 0; jj= inbufsize ) { ipoint = 0; if(_readit(input) == 0) { fprintf(stderr,"reached eof on input\n"); goto out; } } if(opoint >= outbufsize ) { pointer[output] = opoint; if(!peakoff[output]) _chkpeak(output); if(test_stereo_off) _writeit(output); else _forward(output); _readit(output); _backup(output); opoint = 0; } } out: pointer[input] = ipoint; pointer[output] = opoint; if(test_stereo_off){ _writeit(output); endnote(output); } else { _forward(output); endnote(-output); } }