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