home *** CD-ROM | disk | FTP | other *** search
/ Education Sampler 1992 [NeXTSTEP] / Education_1992_Sampler.iso / SoundAndMusic / cmix / H / vax.sfheader.h < prev   
Text File  |  1986-11-30  |  3KB  |  114 lines

  1. # define SIZEOF_HEADER 1024
  2. # define SF_MAGIC 107364
  3. # define SF_LINK 107414
  4. # define SF_SHORT sizeof(short)
  5. # define SF_FLOAT sizeof(float)
  6. # define SF_BUFSIZE    (16*1024)
  7. # define SF_MAXCHAN    4
  8. # define MAXCOMM 512
  9. # define MINCOMM 256
  10.  
  11. /* Codes for sfcode */
  12. # define SF_END 0
  13. # define SF_MAXAMP 1
  14. # define SF_COMMENT 2
  15. # define SF_LINKCODE 3
  16.  
  17. typedef struct sfcode {
  18.     short    code;
  19.     short    bsize;
  20. } SFCODE;
  21.  
  22. typedef struct sfmaxamp {
  23.     float    value[SF_MAXCHAN];
  24.     long    samploc[SF_MAXCHAN];
  25.     long    timetag;
  26. } SFMAXAMP;
  27.  
  28. typedef struct sfcomment {
  29.     char     comment[MAXCOMM];
  30. } SFCOMMENT;
  31.  
  32. typedef struct sflink {
  33.     char     reality[50];
  34.     int     startsamp;
  35.     int    endsamp;
  36. } SFLINK;
  37.  
  38. typedef union sfheader {
  39.     struct {
  40.         int      sf_magic;
  41.         float      sf_srate;
  42.         int      sf_chans;
  43.         int      sf_packmode;
  44.         char      sf_codes;
  45.     } sfinfo;
  46.     char    filler[SIZEOF_HEADER];
  47. } SFHEADER;
  48.  
  49. # define sfchans(x) (x)->sfinfo.sf_chans
  50. # define sfmagic(x) (x)->sfinfo.sf_magic
  51. # define sfsrate(x) (x)->sfinfo.sf_srate
  52. # define sfclass(x) (x)->sfinfo.sf_packmode
  53. # define sfbsize(x) ((x)->st_size - sizeof(SFHEADER))
  54. # define sfcodes(x) (x)->sfinfo.sf_codes
  55.  
  56. # define ismagic(x) ((x)->sfinfo.sf_magic == SF_MAGIC)
  57. # define islink(x)  ((x)->sfinfo.sf_magic == SF_LINK)
  58.  
  59. # define sfmaxamp(mptr,chan) (mptr)->value[chan]
  60. # define sfmaxamploc(mptr,chan) (mptr)->samploc[chan]
  61. # define sfmaxamptime(x) (x)->timetag
  62. # define ismaxampgood(x,s) (sfmaxamptime(x) + 2  >= (s)->st_mtime)
  63.  
  64. # define sfcomm(x,n) (x)->comment[n]
  65.  
  66. # define realname(x) (x)->reality
  67. # define startsmp(x) (x)->startsamp
  68. # define endsmp(x) (x)->endsamp
  69. # define sfoffset(x,h) ((x)->startsamp * sfchans(h) * sfclass(h))
  70. # define sfendset(x,h) ((x)->endsamp * sfchans(h) * sfclass(h))
  71.  
  72. # define sflseek(x,y,z) lseek(x,z != 0 ? y : (y) + sizeof(SFHEADER),z)
  73.  
  74. # define wheader(x,y) write(x,y,sizeof(SFHEADER)) != sizeof(SFHEADER)
  75. # define rheader(x,y) read(x,y,sizeof(SFHEADER)) != sizeof(SFHEADER)
  76.  
  77. #define readopensf(name,fd,sfh,sfst,prog,result) \
  78. if ((fd = open(name, 0))  < 0) {  \
  79.     fprintf(stderr,"%s: cannot access file %s\n",prog,name); \
  80.     result = -1;  \
  81. } \
  82. else if (stat(name,&sfst)){ \
  83.     fprintf(stderr,"%s: cannot get status on %s\n",prog,name); \
  84.     result = -1;  \
  85. } \
  86. else if (rheader(fd,&sfh)){ \
  87.     fprintf(stderr,"%s: cannot read header from %s\n",prog,name); \
  88.     result = -1;  \
  89. } \
  90. else if (!ismagic(&sfh)){ \
  91.     fprintf(stderr,"%s: %s not a bsd soundfile\n",prog,name); \
  92.     result = -1;  \
  93. } \
  94. else result = 0;
  95.  
  96. #define rwopensf(name,fd,sfh,sfst,prog,result,code) \
  97. if ((fd = open(name, code))  < 0) {  \
  98.     fprintf(stderr,"%s: cannot access file %s\n",prog,name); \
  99.     result = -1;  \
  100. } \
  101. else if (rheader(fd,&sfh)){ \
  102.     fprintf(stderr,"%s: cannot read header from %s\n",prog,name); \
  103.     result = -1;  \
  104. } \
  105. else if (!ismagic(&sfh)){ \
  106.     fprintf(stderr,"%s: %s not a bsd soundfile\n",prog,name); \
  107.     result = -1;  \
  108. } \
  109. else if (stat(name,&sfst)){ \
  110.     fprintf(stderr,"%s: cannot get status on %s\n",prog,name); \
  111.     result = -1;  \
  112. } \
  113. else result = 0;
  114.