home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.0 / NeXTSTEP3.0.iso / NextDeveloper / Examples / SoundAndMusic / SoundLibrary / chaintest.c next >
Text File  |  1990-10-10  |  2KB  |  79 lines

  1.  
  2. /*
  3.  * chaintest.c - this test shows how to chain sounds together, such that the
  4.  * completion of one initiates another.
  5.  */ 
  6.  
  7. #import <sound/sound.h>
  8. #import <stdio.h>
  9.  
  10. #define BUF_SIZE 8192
  11. #define BUF_MAX 8
  12.  
  13. static int buf_ptr, buf_max;
  14. static SNDSoundStruct *buffers[BUF_MAX];
  15.  
  16. //
  17. // The termination function gets called when the previously played sound 
  18. // completes
  19. //
  20. int end(SNDSoundStruct *s, int tag, int err)
  21. {
  22.     if (err) fprintf(stderr,"error while playing sound %d\n",tag);
  23.     if (buf_ptr < buf_max) {
  24.     err = SNDStartPlaying(buffers[buf_ptr], buf_ptr, 5,0,0,end);
  25.     if (err) fprintf(stderr,"cannot start playing %d (%s)\n",buf_ptr,
  26.                 SNDSoundError(err));
  27.     buf_ptr++;
  28.     }
  29. }
  30.  
  31. main (int argc, char *argv[])
  32. {
  33.     int size, err, i, j;
  34.     int x = 0;
  35.  
  36.     if (argc < 2) {
  37.     fprintf(stderr,"usage: chaintest file ...\n");
  38.     exit(1);
  39.     }
  40.     if (argc >= BUF_MAX) {
  41.     fprintf(stderr,"too many files (max is %d)\n",BUF_MAX);
  42.     exit(1);
  43.     }
  44.     
  45.     //
  46.     // read the soundfiles into the buffers
  47.     //
  48.     for (j=1; j<argc; j++) {
  49.     err = SNDReadSoundfile(argv[j],&buffers[j]);
  50.     if (err) {
  51.         fprintf(stderr,"Error : %s\n",SNDSoundError(err));
  52.         exit(1);
  53.     }
  54.     }
  55.     
  56.     //
  57.     // Enqueue the first couple of files
  58.     //
  59.     buf_ptr = 1;
  60.     buf_max = argc;
  61.     for (j=1; j<3; j++) {
  62.     err = SNDStartPlaying(buffers[j],buf_ptr++,5,0,0,end);
  63.     if (err) {
  64.         fprintf(stderr,"Error : %s\n",SNDSoundError(err));
  65.         exit(1);
  66.     }
  67.     }
  68.  
  69.     //
  70.     // wait for everything to complete
  71.     //
  72.     SNDWait(0);
  73.  
  74.     exit(0);
  75. }
  76.  
  77.  
  78.  
  79.