#include "../H/ugens.h"
#include <signal.h>
#include <sys/soundfile.h>


#define NFILES 4             /* maximum number of files allowed at once */
extern int NBYTES;           /* size of buffer to allocate */

extern int  sfd[NFILES];     /* soundfile descriptors */

extern int  pointer[NFILES]; /* to be used as pointer within sound buffer */
extern int  bufsize[NFILES]; /* word length of buffer */
extern char *buffer[NFILES]; /* address of buffer */
extern char *peak[NFILES];   /* array to store peak amplitude for nchannels */
extern char *ovpeak[NFILES]; /* overall peak amplitude */
extern int  fnums;	     /* total of opened soundfiles */
extern char cylno[NFILES][4]; /* soundfile name (as cylinder number) */
extern struct SFDESC sfdesc[NFILES];


int doit;

peakscan(p,n_args)
float *p;
int n_args;
{

	register jj,*ibuf,*jbuf,ipoint;
	float *fbuf,*pk,peakval,start,time,factor;
	int stopit();
	int fno;
	long nsamps,loop;
	fno = p[3];
	nsamps = setnot(p[0],p[1],fno); 
	peakval = 0;
	ibuf = (int *)buffer[fno];
	signal(SIGINT,SIG_DFL);
	signal(SIGINT,stopit);
	pk = (float *)peak[fno];
	factor = sfdesc[fno].sf_srate * (float)sfdesc[fno].sf_chans;
	doit = 1;
	start = p[0];
	for(loop=0; loop<nsamps; loop++) { 
		if(!doit) break; 
		for(ipoint = pointer[fno], jbuf = ibuf + ipoint, jj = 0;
           		    jj<sfdesc[fno].sf_chans; jj++, jbuf += jj)
				if(abs(*jbuf) > *(pk + jj)) 
					*(pk + jj) = abs(*jbuf);
			pointer[fno]+ = sfdesc[fno].sf_chans; 
			if(pointer[fno] >= bufsize[fno] ) {
				pointer[fno] = 0;
				time = start + (float)loop/sfdesc[fno].sf_srate;
  				printf(" time = %f ,peak so far = ",time);
				for(jj=0; jj<sfdesc[fno].sf_chans;jj++)
					printf(" %e ",*(pk+jj));
					printf("\n");

				readit(fno);
			
		}
	}

	if(p[4]) endnot(0);
}

stopit() {
	doit =  0; 
}
