home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 519b.lha / WaveMaker_v1.2 / Addwaves.c < prev    next >
C/C++ Source or Header  |  1991-06-09  |  1KB  |  48 lines

  1. #include <exec/types.h>
  2. extern SHORT sinewave[8][513];
  3. extern UBYTE bitval[16];
  4.  
  5. /****************************************************************/
  6. LONG AddWaves(LONG ampl[],SHORT control,BYTE wf[],UBYTE *ws)
  7.  
  8. /*  Create the compound waveform by adding the harmonics.  This      */
  9. /*  routine is a likely candidate for future conversion to assembler */
  10. /*  to speed things up.                                              */
  11.  
  12. {
  13.     SHORT i,j;
  14.     LONG wavebuff[513];
  15.     LONG maxval,minval;
  16.  
  17.         for (j=0; j<513; j++) wavebuff[j]=0;
  18.     
  19.     for (i=0;i<8;i++)
  20.     {
  21.         if ((ampl[i]!=0)&&(control&bitval[i]))
  22.                 {
  23.                    for (j=0;j<513;j++)
  24.            {
  25.                wavebuff[j]=wavebuff[j]+ampl[i]*sinewave[i][j];
  26.            }
  27.                 }
  28.     }
  29.     maxval=minval=0;
  30.     for (j=0;j<513;j++)
  31.     {
  32.          wf[j]=wavebuff[j]>>15;
  33.          if (wavebuff[j]>maxval) maxval=wavebuff[j];
  34.          if (wavebuff[j]<minval) minval=wavebuff[j];
  35.     }
  36.         if (ws != NULL)
  37.         {
  38.            i=0;
  39.            for (j=0;j<129;j++)
  40.            {
  41.                  ws[j]=wf[i];
  42.                  i += 4;
  43.            }
  44.         }
  45.     if (abs(minval)>maxval) maxval=abs(minval);
  46.     return(maxval);
  47. }
  48.