home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 120.lha / Muncho2 / soundobj.c < prev    next >
C/C++ Source or Header  |  1986-11-21  |  1KB  |  72 lines

  1. #include <exec/types.h>
  2. #include <exec/memory.h>
  3. #include <lattice/stdio.h>
  4.  
  5. #include "soundobj.h"
  6.  
  7. #define TICKS_PER_SEC    (3579545)
  8.  
  9. struct SOUNDOBJ *SO_new(fn_)
  10. char *fn_;
  11. {
  12.     FILE            *fopen();
  13.     FILE            *fp_;
  14.     char             *malloc();
  15.     struct    SOUNDOBJ     *p_;
  16.     BYTE            *data_;
  17.     ULONG            datalen;
  18.     UWORD            rate;
  19.     int            SO_sound();
  20.     int            SO_delete();
  21.     
  22.     
  23.     if(!(fp_=fopen(fn_,"r"))){
  24.         return(NULL);
  25.     }
  26.     if(fread(&datalen,sizeof(ULONG),1,fp_) <= 0){
  27.         fclose(fp_);
  28.         return(NULL);
  29.     }
  30.     if(fread(&rate,sizeof(UWORD),1,fp_) <= 0){
  31.         fclose(fp_);
  32.         return(NULL);
  33.     }
  34.     if(!(data_=(BYTE *)AllocMem(datalen * sizeof(BYTE),MEMF_CHIP))){
  35.         fclose(fp_);
  36.         return(NULL);
  37.     }
  38.     if(fread(data_,datalen,1,fp_) <= 0){
  39.         fclose(fp_);
  40.         FreeMem(data_,datalen * sizeof(BYTE));
  41.         return(NULL);
  42.     }
  43.     fclose(fp_);
  44.     if(!(p_=(struct SOUNDOBJ *)malloc(sizeof(struct SOUNDOBJ)))){
  45.         FreeMem(data_,datalen * sizeof(BYTE));
  46.         return(NULL);
  47.     }
  48.     p_->data_    = data_;
  49.     p_->datalen    = datalen;
  50.     p_->rate    = rate;
  51.     p_->period    = TICKS_PER_SEC/rate;
  52.     p_->sound    = SO_sound;
  53.     p_->delete    = SO_delete;
  54.     return(p_);
  55. }
  56.  
  57. SO_delete(p_)
  58. struct SOUNDOBJ *p_;
  59. {
  60.     FreeMem(p_->data_,p_->datalen * sizeof(BYTE));
  61.     return(1);
  62. }
  63.  
  64.  
  65. SO_sound(p_)
  66. struct SOUNDOBJ *p_;
  67. {
  68.     audio_sound(p_->data_,p_->datalen,p_->period,60);
  69.     return(1);
  70. }
  71.  
  72.