wav_w64.h
上传用户:shw771010
上传日期:2022-01-05
资源大小:991k
文件大小:11k
源码类别:

Audio

开发平台:

Unix_Linux

  1. /*
  2. ** Copyright (C) 1999-2009 Erik de Castro Lopo <erikd@mega-nerd.com>
  3. **
  4. ** This program is free software; you can redistribute it and/or modify
  5. ** it under the terms of the GNU Lesser General Public License as published by
  6. ** the Free Software Foundation; either version 2.1 of the License, or
  7. ** (at your option) any later version.
  8. **
  9. ** This program is distributed in the hope that it will be useful,
  10. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. ** GNU Lesser General Public License for more details.
  13. **
  14. ** You should have received a copy of the GNU Lesser General Public License
  15. ** along with this program; if not, write to the Free Software
  16. ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  17. */
  18. /* This file contains definitions commong to WAV and W64 files. */
  19. #ifndef WAV_W64_H_INCLUDED
  20. #define WAV_W64_H_INCLUDED
  21. /*------------------------------------------------------------------------------
  22. ** List of known WAV format tags
  23. */
  24. enum
  25. {
  26.   /* keep sorted for wav_w64_format_str() */
  27. WAVE_FORMAT_UNKNOWN = 0x0000, /* Microsoft Corporation */
  28. WAVE_FORMAT_PCM   = 0x0001,  /* Microsoft PCM format */
  29. WAVE_FORMAT_MS_ADPCM = 0x0002, /* Microsoft ADPCM */
  30. WAVE_FORMAT_IEEE_FLOAT = 0x0003, /* Micrososft 32 bit float format */
  31. WAVE_FORMAT_VSELP = 0x0004, /* Compaq Computer Corporation */
  32. WAVE_FORMAT_IBM_CVSD = 0x0005, /* IBM Corporation */
  33. WAVE_FORMAT_ALAW = 0x0006, /* Microsoft Corporation */
  34. WAVE_FORMAT_MULAW = 0x0007, /* Microsoft Corporation */
  35. WAVE_FORMAT_OKI_ADPCM = 0x0010, /* OKI */
  36. WAVE_FORMAT_IMA_ADPCM = 0x0011, /* Intel Corporation */
  37. WAVE_FORMAT_MEDIASPACE_ADPCM = 0x0012, /* Videologic */
  38. WAVE_FORMAT_SIERRA_ADPCM = 0x0013, /* Sierra Semiconductor Corp */
  39. WAVE_FORMAT_G723_ADPCM = 0x0014, /* Antex Electronics Corporation */
  40. WAVE_FORMAT_DIGISTD = 0x0015, /* DSP Solutions, Inc. */
  41. WAVE_FORMAT_DIGIFIX = 0x0016, /* DSP Solutions, Inc. */
  42. WAVE_FORMAT_DIALOGIC_OKI_ADPCM = 0x0017, /*  Dialogic Corporation  */
  43. WAVE_FORMAT_MEDIAVISION_ADPCM = 0x0018, /*  Media Vision, Inc. */
  44. WAVE_FORMAT_CU_CODEC = 0x0019, /* Hewlett-Packard Company */
  45. WAVE_FORMAT_YAMAHA_ADPCM = 0x0020, /* Yamaha Corporation of America */
  46. WAVE_FORMAT_SONARC = 0x0021, /* Speech Compression */
  47. WAVE_FORMAT_DSPGROUP_TRUESPEECH  = 0x0022, /* DSP Group, Inc */
  48. WAVE_FORMAT_ECHOSC1 = 0x0023, /* Echo Speech Corporation */
  49. WAVE_FORMAT_AUDIOFILE_AF36 = 0x0024, /* Audiofile, Inc. */
  50. WAVE_FORMAT_APTX = 0x0025, /* Audio Processing Technology */
  51. WAVE_FORMAT_AUDIOFILE_AF10 = 0x0026, /* Audiofile, Inc. */
  52. WAVE_FORMAT_PROSODY_1612 = 0x0027, /* Aculab plc */
  53. WAVE_FORMAT_LRC = 0x0028, /* Merging Technologies S.A. */
  54. WAVE_FORMAT_DOLBY_AC2 = 0x0030, /* Dolby Laboratories */
  55. WAVE_FORMAT_GSM610 = 0x0031, /* Microsoft Corporation */
  56. WAVE_FORMAT_MSNAUDIO = 0x0032, /* Microsoft Corporation */
  57. WAVE_FORMAT_ANTEX_ADPCME = 0x0033,  /* Antex Electronics Corporation */
  58. WAVE_FORMAT_CONTROL_RES_VQLPC = 0x0034, /* Control Resources Limited */
  59. WAVE_FORMAT_DIGIREAL = 0x0035, /* DSP Solutions, Inc. */
  60. WAVE_FORMAT_DIGIADPCM = 0x0036, /* DSP Solutions, Inc. */
  61. WAVE_FORMAT_CONTROL_RES_CR10 = 0x0037, /* Control Resources Limited */
  62. WAVE_FORMAT_NMS_VBXADPCM = 0x0038, /* Natural MicroSystems */
  63. WAVE_FORMAT_ROLAND_RDAC = 0x0039, /* Roland */
  64. WAVE_FORMAT_ECHOSC3 = 0x003A, /* Echo Speech Corporation */
  65. WAVE_FORMAT_ROCKWELL_ADPCM = 0x003B, /* Rockwell International */
  66. WAVE_FORMAT_ROCKWELL_DIGITALK = 0x003C,  /* Rockwell International */
  67. WAVE_FORMAT_XEBEC = 0x003D, /* Xebec Multimedia Solutions Limited */
  68. WAVE_FORMAT_G721_ADPCM = 0x0040, /* Antex Electronics Corporation */
  69. WAVE_FORMAT_G728_CELP = 0x0041, /* Antex Electronics Corporation */
  70. WAVE_FORMAT_MSG723 = 0x0042, /* Microsoft Corporation */
  71. WAVE_FORMAT_MPEG = 0x0050, /* Microsoft Corporation */
  72. WAVE_FORMAT_RT24 = 0x0052, /* InSoft Inc. */
  73. WAVE_FORMAT_PAC = 0x0053, /* InSoft Inc. */
  74. WAVE_FORMAT_MPEGLAYER3 = 0x0055, /* MPEG 3 Layer 1 */
  75. WAVE_FORMAT_LUCENT_G723 = 0x0059, /* Lucent Technologies */
  76. WAVE_FORMAT_CIRRUS = 0x0060, /* Cirrus Logic */
  77. WAVE_FORMAT_ESPCM = 0x0061, /* ESS Technology */
  78. WAVE_FORMAT_VOXWARE = 0x0062, /* Voxware Inc */
  79. WAVE_FORMAT_CANOPUS_ATRAC = 0x0063, /* Canopus, Co., Ltd. */
  80. WAVE_FORMAT_G726_ADPCM = 0x0064, /* APICOM */
  81. WAVE_FORMAT_G722_ADPCM = 0x0065, /* APICOM */
  82. WAVE_FORMAT_DSAT = 0x0066, /* Microsoft Corporation */
  83. WAVE_FORMAT_DSAT_DISPLAY = 0x0067, /* Microsoft Corporation */
  84. WAVE_FORMAT_VOXWARE_BYTE_ALIGNED = 0x0069, /* Voxware Inc. */
  85. WAVE_FORMAT_VOXWARE_AC8 = 0x0070, /* Voxware Inc. */
  86. WAVE_FORMAT_VOXWARE_AC10 = 0x0071, /* Voxware Inc. */
  87. WAVE_FORMAT_VOXWARE_AC16 = 0x0072, /* Voxware Inc. */
  88. WAVE_FORMAT_VOXWARE_AC20 = 0x0073, /* Voxware Inc. */
  89. WAVE_FORMAT_VOXWARE_RT24 = 0x0074, /* Voxware Inc. */
  90. WAVE_FORMAT_VOXWARE_RT29 = 0x0075, /* Voxware Inc. */
  91. WAVE_FORMAT_VOXWARE_RT29HW = 0x0076, /* Voxware Inc. */
  92. WAVE_FORMAT_VOXWARE_VR12 = 0x0077, /* Voxware Inc. */
  93. WAVE_FORMAT_VOXWARE_VR18 = 0x0078, /* Voxware Inc. */
  94. WAVE_FORMAT_VOXWARE_TQ40 = 0x0079, /* Voxware Inc. */
  95. WAVE_FORMAT_SOFTSOUND = 0x0080, /* Softsound, Ltd. */
  96. WAVE_FORMAT_VOXARE_TQ60 = 0x0081, /* Voxware Inc. */
  97. WAVE_FORMAT_MSRT24 = 0x0082, /* Microsoft Corporation */
  98. WAVE_FORMAT_G729A = 0x0083, /* AT&T Laboratories */
  99. WAVE_FORMAT_MVI_MV12 = 0x0084, /* Motion Pixels */
  100. WAVE_FORMAT_DF_G726 = 0x0085, /* DataFusion Systems (Pty) (Ltd) */
  101. WAVE_FORMAT_DF_GSM610 = 0x0086, /* DataFusion Systems (Pty) (Ltd) */
  102. /* removed because duplicate */
  103. /* WAVE_FORMAT_ISIAUDIO = 0x0088, */ /* Iterated Systems, Inc. */
  104. WAVE_FORMAT_ONLIVE = 0x0089, /* OnLive! Technologies, Inc. */
  105. WAVE_FORMAT_SBC24 = 0x0091, /* Siemens Business Communications Systems */
  106. WAVE_FORMAT_DOLBY_AC3_SPDIF = 0x0092, /* Sonic Foundry */
  107. WAVE_FORMAT_ZYXEL_ADPCM = 0x0097, /* ZyXEL Communications, Inc. */
  108. WAVE_FORMAT_PHILIPS_LPCBB = 0x0098, /* Philips Speech Processing */
  109. WAVE_FORMAT_PACKED = 0x0099, /* Studer Professional Audio AG */
  110. WAVE_FORMAT_RHETOREX_ADPCM = 0x0100, /* Rhetorex, Inc. */
  111. /* removed because of the following */
  112. /* WAVE_FORMAT_IRAT = 0x0101,*/ /* BeCubed Software Inc. */
  113. /* these three are unofficial */
  114. IBM_FORMAT_MULAW = 0x0101, /* IBM mu-law format */
  115. IBM_FORMAT_ALAW = 0x0102, /* IBM a-law format */
  116. IBM_FORMAT_ADPCM = 0x0103, /* IBM AVC Adaptive Differential PCM format */
  117. WAVE_FORMAT_VIVO_G723 = 0x0111, /* Vivo Software */
  118. WAVE_FORMAT_VIVO_SIREN = 0x0112, /* Vivo Software */
  119. WAVE_FORMAT_DIGITAL_G723 = 0x0123, /* Digital Equipment Corporation */
  120. WAVE_FORMAT_CREATIVE_ADPCM = 0x0200, /* Creative Labs, Inc */
  121. WAVE_FORMAT_CREATIVE_FASTSPEECH8  = 0x0202, /* Creative Labs, Inc */
  122. WAVE_FORMAT_CREATIVE_FASTSPEECH10  = 0x0203, /* Creative Labs, Inc */
  123. WAVE_FORMAT_QUARTERDECK = 0x0220, /* Quarterdeck Corporation */
  124. WAVE_FORMAT_FM_TOWNS_SND = 0x0300, /* Fujitsu Corporation */
  125. WAVE_FORMAT_BZV_DIGITAL = 0x0400, /* Brooktree Corporation */
  126. WAVE_FORMAT_VME_VMPCM = 0x0680, /* AT&T Labs, Inc. */
  127. WAVE_FORMAT_OLIGSM = 0x1000, /* Ing C. Olivetti & C., S.p.A. */
  128. WAVE_FORMAT_OLIADPCM = 0x1001, /* Ing C. Olivetti & C., S.p.A. */
  129. WAVE_FORMAT_OLICELP = 0x1002, /* Ing C. Olivetti & C., S.p.A. */
  130. WAVE_FORMAT_OLISBC = 0x1003, /* Ing C. Olivetti & C., S.p.A. */
  131. WAVE_FORMAT_OLIOPR = 0x1004, /* Ing C. Olivetti & C., S.p.A. */
  132. WAVE_FORMAT_LH_CODEC = 0x1100, /* Lernout & Hauspie */
  133. WAVE_FORMAT_NORRIS = 0x1400, /* Norris Communications, Inc. */
  134. /* removed because duplicate */
  135. /* WAVE_FORMAT_ISIAUDIO = 0x1401, */ /* AT&T Labs, Inc. */
  136. WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS = 0x1500, /* AT&T Labs, Inc. */
  137. WAVE_FORMAT_DVM = 0x2000, /* FAST Multimedia AG */
  138. WAVE_FORMAT_INTERWAV_VSC112 = 0x7150, /* ????? */
  139. WAVE_FORMAT_IPP_ITU_G_723_1 = 0x7230, /* Intel Performance Primitives g723 codec. */
  140. WAVE_FORMAT_EXTENSIBLE = 0xFFFE
  141. } ;
  142. typedef struct
  143. { unsigned short format ;
  144. unsigned short channels ;
  145. unsigned int samplerate ;
  146. unsigned int bytespersec ;
  147. unsigned short blockalign ;
  148. unsigned short bitwidth ;
  149. } MIN_WAV_FMT ;
  150. typedef struct
  151. { unsigned short format ;
  152. unsigned short channels ;
  153. unsigned int samplerate ;
  154. unsigned int bytespersec ;
  155. unsigned short blockalign ;
  156. unsigned short bitwidth ;
  157. unsigned short extrabytes ;
  158. unsigned short dummy ;
  159. } WAV_FMT_SIZE20 ;
  160. typedef struct
  161. { unsigned short format ;
  162. unsigned short channels ;
  163. unsigned int samplerate ;
  164. unsigned int bytespersec ;
  165. unsigned short blockalign ;
  166. unsigned short bitwidth ;
  167. unsigned short extrabytes ;
  168. unsigned short samplesperblock ;
  169. unsigned short numcoeffs ;
  170. struct
  171. { short coeff1 ;
  172. short coeff2 ;
  173. } coeffs [7] ;
  174. } MS_ADPCM_WAV_FMT ;
  175. typedef struct
  176. { unsigned short format ;
  177. unsigned short channels ;
  178. unsigned int samplerate ;
  179. unsigned int bytespersec ;
  180. unsigned short blockalign ;
  181. unsigned short bitwidth ;
  182. unsigned short extrabytes ;
  183. unsigned short samplesperblock ;
  184. } IMA_ADPCM_WAV_FMT ;
  185. typedef struct
  186. { unsigned short format ;
  187. unsigned short channels ;
  188. unsigned int samplerate ;
  189. unsigned int bytespersec ;
  190. unsigned short blockalign ;
  191. unsigned short bitwidth ;
  192. unsigned short extrabytes ;
  193. unsigned short auxblocksize ;
  194. } G72x_ADPCM_WAV_FMT ;
  195. typedef struct
  196. { unsigned short format ;
  197. unsigned short channels ;
  198. unsigned int samplerate ;
  199. unsigned int bytespersec ;
  200. unsigned short blockalign ;
  201. unsigned short bitwidth ;
  202. unsigned short extrabytes ;
  203. unsigned short samplesperblock ;
  204. } GSM610_WAV_FMT ;
  205. typedef struct
  206. { unsigned int esf_field1 ;
  207. unsigned short esf_field2 ;
  208. unsigned short esf_field3 ;
  209. char esf_field4 [8] ;
  210. } EXT_SUBFORMAT ;
  211. typedef struct
  212. { unsigned short format ;
  213. unsigned short channels ;
  214. unsigned int samplerate ;
  215. unsigned int bytespersec ;
  216. unsigned short blockalign ;
  217. unsigned short bitwidth ;
  218. unsigned short extrabytes ;
  219. unsigned short validbits ;
  220. unsigned int channelmask ;
  221. EXT_SUBFORMAT esf ;
  222. } EXTENSIBLE_WAV_FMT ;
  223. typedef union
  224. { unsigned short format ;
  225. MIN_WAV_FMT min ;
  226. IMA_ADPCM_WAV_FMT ima ;
  227. MS_ADPCM_WAV_FMT msadpcm ;
  228. G72x_ADPCM_WAV_FMT g72x ;
  229. EXTENSIBLE_WAV_FMT ext ;
  230. GSM610_WAV_FMT gsm610 ;
  231. WAV_FMT_SIZE20 size20 ;
  232. char padding [512] ;
  233. } WAV_FMT ;
  234. typedef struct
  235. { int frames ;
  236. } FACT_CHUNK ;
  237. typedef struct
  238. { /* For ambisonic commands */
  239. int wavex_ambisonic ;
  240. unsigned wavex_channelmask ;
  241. /* Set to true when 'fmt ' chunk is ambiguous.*/
  242. int fmt_is_broken ;
  243. WAV_FMT wav_fmt ;
  244. } WAV_PRIVATE ;
  245. #define WAV_W64_GSM610_BLOCKSIZE 65
  246. #define WAV_W64_GSM610_SAMPLES 320
  247. /*------------------------------------------------------------------------------------
  248. ** Functions defined in wav_ms_adpcm.c
  249. */
  250. #define MSADPCM_ADAPT_COEFF_COUNT 7
  251. void msadpcm_write_adapt_coeffs (SF_PRIVATE *psf) ;
  252. /*------------------------------------------------------------------------------------
  253. ** Functions defined in wav_w64.c
  254. */
  255. int  wav_w64_srate2blocksize (int srate_chan_product) ;
  256. char const* wav_w64_format_str (int k) ;
  257. int wav_w64_read_fmt_chunk (SF_PRIVATE *psf, int fmtsize) ;
  258. void wavex_write_guid (SF_PRIVATE *psf, const EXT_SUBFORMAT * subformat) ;
  259. void wav_w64_analyze (SF_PRIVATE *psf) ;
  260. int wavex_gen_channel_mask (const int *chan_map, int channels) ;
  261. int wav_read_bext_chunk (SF_PRIVATE *psf, unsigned int chunksize) ;
  262. int wav_write_bext_chunk (SF_PRIVATE *psf) ;
  263. #endif