2 ** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
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.
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.
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.
19 /* This file contains definitions commong to WAV and W64 files. */
22 #ifndef WAV_W64_H_INCLUDED
23 #define WAV_W64_H_INCLUDED
25 /*------------------------------------------------------------------------------
26 ** List of known WAV format tags
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. */
117 /* removed because of the following */
118 /* WAVE_FORMAT_IRAT = 0x0101,*/ /* BeCubed Software Inc. */
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 */
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, /* ????? */
148 WAVE_FORMAT_IPP_ITU_G_723_1
= 0x7230, /* Intel Performance Primitives g723 codec. */
150 WAVE_FORMAT_EXTENSIBLE
= 0xFFFE
154 { unsigned short format
;
155 unsigned short channels
;
156 unsigned int samplerate
;
157 unsigned int bytespersec
;
158 unsigned short blockalign
;
159 unsigned short bitwidth
;
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
;
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
;
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
;
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
;
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
;
224 { unsigned int esf_field1
;
225 unsigned short esf_field2
;
226 unsigned short esf_field3
;
227 char esf_field4
[8] ;
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
;
241 } EXTENSIBLE_WAV_FMT
;
244 { unsigned short format
;
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
;
260 { /* For ambisonic commands */
261 int wavex_ambisonic
;
262 unsigned wavex_channelmask
;
264 /* Set to true when 'fmt ' chunk is ambiguous.*/
269 #define WAV_W64_GSM610_BLOCKSIZE 65
270 #define WAV_W64_GSM610_SAMPLES 320
272 /*------------------------------------------------------------------------------------
273 ** Functions defined in wav_ms_adpcm.c
276 #define MSADPCM_ADAPT_COEFF_COUNT 7
278 void msadpcm_write_adapt_coeffs (SF_PRIVATE
*psf
) ;
280 /*------------------------------------------------------------------------------------
281 ** Functions defined in wav_w64.c
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
) ;
291 int wav_read_bext_chunk (SF_PRIVATE
*psf
, unsigned int chunksize
) ;
292 int wav_write_bext_chunk (SF_PRIVATE
*psf
) ;