home *** CD-ROM | disk | FTP | other *** search
/ Over Load / MAXIWIN7.ISO / programs / display / samples / test1.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-14  |  3.0 KB  |  95 lines

  1. /**********************************************************/
  2. /*/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/
  3. /*
  4. CAUTION: Compile using LARGE memory model!!!!!
  5. */
  6. /*/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/
  7. /**********************************************************/
  8.  
  9. #include <stdio.h>
  10.  
  11. #include "sb16io.h"
  12.  
  13. /**********************************************************/
  14. /* basic block length (samples per block):
  15. too sort ==> too much interrupts per second.
  16. too long ==> too much record-to-playback delay.  */
  17. /*#define N 400*/
  18. #define N 4096  /* Shareware version only supports this */
  19.  
  20. /* sampling rate */
  21. /*#define SRATE 8000*/
  22. #define SRATE 7500  /* shareware version only supports this */
  23.  
  24. /**********************************************************/
  25. /* callback function. whenever a new block (length N) is full,
  26. this callback is called (at interrupt-time, so be carefull with
  27. what you do!). */
  28.  
  29. void mifunc( void )
  30. {
  31.     UINT i;
  32.     INT8 * v8;
  33.     INT16 * v16;
  34.  
  35.     v8 = sb16io_get8(SB16IO_NOWAIT);  /* get SB 8 bits buffer */
  36.     v16 = sb16io_get16(SB16IO_NOWAIT);  /* get SB 16 bits buffer */
  37.     /* we have used NOWAIT mode, because we are at interrupt time!!
  38.     moreover, this callback has been called because there is a new
  39.     recorded buffer. */
  40.  
  41.     /* just copy from record (8 bits) to play (16 bits) buffer.
  42.     We copy to the 8 msb of the 16 bit word. */
  43.     for (i=0; i<N; i++)
  44.         v16[i] = (((INT16)v8[i]) << 8);
  45. }
  46.  
  47. /**********************************************************/
  48.  
  49. int main( void )
  50. {
  51.     int err;
  52.  
  53.     printf("Sample program to record & play concurrently using SB16.\n"
  54.         "In this program, recording is done using 8 bit signed samples, the\n"
  55.         "recorded buffer is promoted to 16 bit signed samples, and then it is\n"
  56.         "played.  So you must hear just what you record (with a delay).\n"
  57.         "Press ENTER to continue...");
  58.     fgetc(stdin);
  59.  
  60.     /* prepare sb16 */
  61.     err = sb16io_open(SB16IO_RECORD8,  /* 8 bit record & 16 bit playback */
  62.             SRATE,    /* sampling rate (must be the same for 8 & 16 bits) */
  63.             SB16IO_MONO8,  /* mono 8 bit (recording) */
  64.             SB16IO_MONO16,  /* mono 16 bit (playback) */
  65.             N,             /* basic block length */
  66.             mifunc);      /* user callback to process basic blocks */
  67.  
  68.     if (err) {  /* sb16io_open() returns 0 if no error */
  69.         printf("error initializing\n");
  70.         return 1;
  71.     }
  72.  
  73.     /* Set record-to-playback delay as sort as posible: 1 buffer.
  74.     This is close to the limit!
  75.     delay 0 produces clicks. If we use delay 1, we must generate a
  76.     playback buffer in a sort time after recording one, and maybe
  77.     we hear some clicks. delay 2 is safe: no clicks, but long delay.
  78.     If sb16io_setdelay() is not called, the default 2 is used. */
  79.     sb16io_setdelay(1);
  80.  
  81.     sb16io_start();  /* start record&play */
  82.  
  83.     /* now do whatever you want, sb is working in background */
  84.     printf("press ENTER to stop...");
  85.     fgetc(stdin);
  86.  
  87.     /* stop & free sb16 */
  88.     sb16io_close();
  89.  
  90.     return 0;
  91. }
  92.  
  93. /**********************************************************/
  94.  
  95.