home *** CD-ROM | disk | FTP | other *** search
/ Audio 4.94 - Over 11,000 Files / audio-11000.iso / msdos / sndbords / proaudio / sdk_ex / sdk_ex4.c < prev   
C/C++ Source or Header  |  1993-10-17  |  4KB  |  124 lines

  1. /*
  2.  *  Program: SDK_EX4.C
  3.  *   Author: Philip VanBaren
  4.  *  Purpose: This program demonstrates how to use the Media Vision SDK routines
  5.  *           to do simple continuous data input.
  6.  */
  7.  
  8. #include <stdlib.h>
  9. #include <stdio.h>
  10. #include <conio.h>
  11. #include <math.h>
  12.  
  13. #include <pcmio.h>
  14.  
  15. extern int DMARunning;     /* SDK flag that indicates when DMA has been started */
  16.  
  17. #define IRQ -1             /* -1 means use the default value */
  18. #define DMA -1             /* -1 means use the default value */
  19. #define DMASize 16         /* 16k DMA buffer */
  20. #define DMADivisions 4     /* 4 divisions in this buffer */
  21.  
  22. #define SamplingRate 22050
  23. #define StereoFlag 0       /* When this is 1, the data is interleaved left/right */
  24. #define CompressionFlag 0
  25. #define SampleSize 16      /* Number of bits per sample, 8 or 16 */
  26.  
  27. #define BUFFERS 2
  28. #define BUF_LEN 10000
  29. int in_buf[BUFFERS][BUF_LEN];
  30. int buf_ready[BUFFERS];
  31. int current_buffer=0;
  32.  
  33. /*
  34.  *  This function is called when the PAS code is finished with a buffer.
  35.  */
  36. void far callback(void)
  37. {
  38.    buf_ready[current_buffer]=1;
  39.    if(++current_buffer>=BUFFERS)
  40.       current_buffer=0;
  41. }
  42.  
  43. void main(void)
  44. {
  45.    int record_buffer=0;
  46.    int process_buffer=0;
  47.    int i;
  48.    for(i=0;i<BUFFERS;i++)
  49.       buf_ready[i]=0;
  50.  
  51.    /*
  52.     *  Initialize ProAudio stuff
  53.     */
  54.    if(OpenPCMBuffering(DMA,IRQ,DMASize,DMADivisions)!=0)
  55.       puts("Error trying to open PCM buffering.");
  56.    else if(PCMState(SamplingRate,StereoFlag,CompressionFlag,SampleSize)!=0)
  57.       puts("Error setting sample rate.");
  58.    else
  59.    {
  60.       /*
  61.        *  Start recording the first buffer.
  62.        */
  63.       if(RecordThisBlock((char *)in_buf[record_buffer],(long)BUF_LEN*2,callback)==0)
  64.       {
  65.          ClosePCMBuffering();
  66.          puts("Error recording block.");
  67.          exit(1);
  68.       }
  69.       /*
  70.        *  Flag buffer as busy.  When it has been filled, this value will
  71.        *  be set back to 1.
  72.        */
  73.       buf_ready[record_buffer]=0;
  74.       if(++record_buffer>=BUFFERS)
  75.          record_buffer=0;
  76.  
  77.  
  78.       while(!kbhit())
  79.       {
  80.          /*
  81.           *  Set up another block for recording when the current one is done.
  82.           */
  83.          if(QueueThisBlock((char *)in_buf[record_buffer],(long)BUF_LEN*2,callback)!=0)
  84.          {
  85.             ClosePCMBuffering();
  86.             puts("Error recording block.");
  87.             exit(1);
  88.          }
  89.          /*
  90.           *  Flag buffer as busy.  When it has been filled, this value will
  91.           *  be set back to 1.
  92.           */
  93.          buf_ready[record_buffer]=0;
  94.          if(++record_buffer>=BUFFERS)
  95.             record_buffer=0;
  96.  
  97.          /*
  98.           *  Wait for a buffer to become ready.
  99.           */
  100.          while(!kbhit() && !buf_ready[process_buffer]);
  101.  
  102.          /*
  103.           *  Process in_buf[process_buffer] here.
  104.           */
  105.          printf("%d ",process_buffer);
  106.  
  107.          /*
  108.           *  Update buffer pointer
  109.           */
  110.          if(++process_buffer>=BUFFERS)
  111.             process_buffer=0;
  112.       }
  113.    }
  114.    /*
  115.     *  You MUST call this function before ending the program, else things won't
  116.     *  work right the next time you try to run the program.  This is critical to
  117.     *  remember when debugging the program, because in debugging you often quit the
  118.     *  program before it runs to completion.  The only way I know of to recover
  119.     *  if this function is NOT called is to reboot the computer!
  120.     */
  121.    ClosePCMBuffering();
  122. }
  123.  
  124.