summaryrefslogtreecommitdiff
path: root/src/wav_w64.h
blob: 9b2914abbcdf94a5ef73953142302c591cc8aa4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
/*
** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU Lesser General Public License as published by
** the Free Software Foundation; either version 2.1 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
** GNU Lesser General Public License for more details.
**
** You should have received a copy of the GNU Lesser General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

/* This file contains definitions commong to WAV and W64 files. */


#ifndef WAV_W64_H_INCLUDED
#define WAV_W64_H_INCLUDED

/*------------------------------------------------------------------------------
** List of known WAV format tags
*/

enum
{
  /* keep sorted for wav_w64_format_str() */
	WAVE_FORMAT_UNKNOWN					= 0x0000,		/* Microsoft Corporation */
	WAVE_FORMAT_PCM	 					= 0x0001, 		/* Microsoft PCM format */
	WAVE_FORMAT_MS_ADPCM				= 0x0002,		/* Microsoft ADPCM */
	WAVE_FORMAT_IEEE_FLOAT				= 0x0003,		/* Micrososft 32 bit float format */
	WAVE_FORMAT_VSELP					= 0x0004,		/* Compaq Computer Corporation */
	WAVE_FORMAT_IBM_CVSD				= 0x0005,		/* IBM Corporation */
	WAVE_FORMAT_ALAW					= 0x0006,		/* Microsoft Corporation */
	WAVE_FORMAT_MULAW					= 0x0007,		/* Microsoft Corporation */
	WAVE_FORMAT_OKI_ADPCM				= 0x0010,		/* OKI */
	WAVE_FORMAT_IMA_ADPCM				= 0x0011,		/* Intel Corporation */
	WAVE_FORMAT_MEDIASPACE_ADPCM		= 0x0012,		/* Videologic */
	WAVE_FORMAT_SIERRA_ADPCM			= 0x0013,		/* Sierra Semiconductor Corp */
	WAVE_FORMAT_G723_ADPCM				= 0x0014,		/* Antex Electronics Corporation */
	WAVE_FORMAT_DIGISTD					= 0x0015,		/* DSP Solutions, Inc. */
	WAVE_FORMAT_DIGIFIX					= 0x0016,		/* DSP Solutions, Inc. */
	WAVE_FORMAT_DIALOGIC_OKI_ADPCM		= 0x0017,		/*  Dialogic Corporation  */
	WAVE_FORMAT_MEDIAVISION_ADPCM		= 0x0018,		/*  Media Vision, Inc. */
	WAVE_FORMAT_CU_CODEC				= 0x0019,		/* Hewlett-Packard Company */
	WAVE_FORMAT_YAMAHA_ADPCM			= 0x0020,		/* Yamaha Corporation of America */
	WAVE_FORMAT_SONARC					= 0x0021,		/* Speech Compression */
	WAVE_FORMAT_DSPGROUP_TRUESPEECH 	= 0x0022,		/* DSP Group, Inc */
	WAVE_FORMAT_ECHOSC1					= 0x0023,		/* Echo Speech Corporation */
	WAVE_FORMAT_AUDIOFILE_AF36			= 0x0024,		/* Audiofile, Inc. */
	WAVE_FORMAT_APTX					= 0x0025,		/* Audio Processing Technology */
	WAVE_FORMAT_AUDIOFILE_AF10			= 0x0026,		/* Audiofile, Inc. */
	WAVE_FORMAT_PROSODY_1612			= 0x0027,		/* Aculab plc */
	WAVE_FORMAT_LRC						= 0x0028,		/* Merging Technologies S.A. */
	WAVE_FORMAT_DOLBY_AC2				= 0x0030,		/* Dolby Laboratories */
	WAVE_FORMAT_GSM610					= 0x0031,		/* Microsoft Corporation */
	WAVE_FORMAT_MSNAUDIO				= 0x0032,		/* Microsoft Corporation */
	WAVE_FORMAT_ANTEX_ADPCME			= 0x0033, 		/* Antex Electronics Corporation */
	WAVE_FORMAT_CONTROL_RES_VQLPC		= 0x0034,		/* Control Resources Limited */
	WAVE_FORMAT_DIGIREAL				= 0x0035,		/* DSP Solutions, Inc. */
	WAVE_FORMAT_DIGIADPCM				= 0x0036,		/* DSP Solutions, Inc. */
	WAVE_FORMAT_CONTROL_RES_CR10		= 0x0037,		/* Control Resources Limited */
	WAVE_FORMAT_NMS_VBXADPCM			= 0x0038,		/* Natural MicroSystems */
	WAVE_FORMAT_ROLAND_RDAC				= 0x0039,		/* Roland */
	WAVE_FORMAT_ECHOSC3					= 0x003A,		/* Echo Speech Corporation */
	WAVE_FORMAT_ROCKWELL_ADPCM			= 0x003B,		/* Rockwell International */
	WAVE_FORMAT_ROCKWELL_DIGITALK		= 0x003C, 		/* Rockwell International */
	WAVE_FORMAT_XEBEC					= 0x003D,		/* Xebec Multimedia Solutions Limited */
	WAVE_FORMAT_G721_ADPCM				= 0x0040,		/* Antex Electronics Corporation */
	WAVE_FORMAT_G728_CELP				= 0x0041,		/* Antex Electronics Corporation */
	WAVE_FORMAT_MSG723					= 0x0042,		/* Microsoft Corporation */
	WAVE_FORMAT_MPEG					= 0x0050,		/* Microsoft Corporation */
	WAVE_FORMAT_RT24					= 0x0052,		/* InSoft Inc. */
	WAVE_FORMAT_PAC						= 0x0053,		/* InSoft Inc. */
	WAVE_FORMAT_MPEGLAYER3				= 0x0055,		/* MPEG 3 Layer 1 */
	WAVE_FORMAT_LUCENT_G723				= 0x0059,		/* Lucent Technologies */
	WAVE_FORMAT_CIRRUS					= 0x0060,		/* Cirrus Logic */
	WAVE_FORMAT_ESPCM					= 0x0061,		/* ESS Technology */
	WAVE_FORMAT_VOXWARE					= 0x0062,		/* Voxware Inc */
	WAVE_FORMAT_CANOPUS_ATRAC			= 0x0063,		/* Canopus, Co., Ltd. */
	WAVE_FORMAT_G726_ADPCM				= 0x0064,		/* APICOM */
	WAVE_FORMAT_G722_ADPCM				= 0x0065,		/* APICOM */
	WAVE_FORMAT_DSAT					= 0x0066,		/* Microsoft Corporation */
	WAVE_FORMAT_DSAT_DISPLAY			= 0x0067,		/* Microsoft Corporation */
	WAVE_FORMAT_VOXWARE_BYTE_ALIGNED	= 0x0069,		/* Voxware Inc. */
	WAVE_FORMAT_VOXWARE_AC8				= 0x0070,		/* Voxware Inc. */
	WAVE_FORMAT_VOXWARE_AC10			= 0x0071,		/* Voxware Inc. */
	WAVE_FORMAT_VOXWARE_AC16			= 0x0072,		/* Voxware Inc. */
	WAVE_FORMAT_VOXWARE_AC20			= 0x0073,		/* Voxware Inc. */
	WAVE_FORMAT_VOXWARE_RT24			= 0x0074,		/* Voxware Inc. */
	WAVE_FORMAT_VOXWARE_RT29			= 0x0075,		/* Voxware Inc. */
	WAVE_FORMAT_VOXWARE_RT29HW			= 0x0076,		/* Voxware Inc. */
	WAVE_FORMAT_VOXWARE_VR12			= 0x0077,		/* Voxware Inc. */
	WAVE_FORMAT_VOXWARE_VR18			= 0x0078,		/* Voxware Inc. */
	WAVE_FORMAT_VOXWARE_TQ40			= 0x0079,		/* Voxware Inc. */
	WAVE_FORMAT_SOFTSOUND				= 0x0080,		/* Softsound, Ltd. */
	WAVE_FORMAT_VOXARE_TQ60				= 0x0081,		/* Voxware Inc. */
	WAVE_FORMAT_MSRT24					= 0x0082,		/* Microsoft Corporation */
	WAVE_FORMAT_G729A					= 0x0083,		/* AT&T Laboratories */
	WAVE_FORMAT_MVI_MV12				= 0x0084,		/* Motion Pixels */
	WAVE_FORMAT_DF_G726					= 0x0085,		/* DataFusion Systems (Pty) (Ltd) */
	WAVE_FORMAT_DF_GSM610				= 0x0086,		/* DataFusion Systems (Pty) (Ltd) */
	/* removed because duplicate */
	/* WAVE_FORMAT_ISIAUDIO				= 0x0088, */	/* Iterated Systems, Inc. */
	WAVE_FORMAT_ONLIVE					= 0x0089,		/* OnLive! Technologies, Inc. */
	WAVE_FORMAT_SBC24					= 0x0091,		/* Siemens Business Communications Systems */
	WAVE_FORMAT_DOLBY_AC3_SPDIF			= 0x0092,		/* Sonic Foundry */
	WAVE_FORMAT_ZYXEL_ADPCM				= 0x0097,		/* ZyXEL Communications, Inc. */
	WAVE_FORMAT_PHILIPS_LPCBB			= 0x0098,		/* Philips Speech Processing */
	WAVE_FORMAT_PACKED					= 0x0099,		/* Studer Professional Audio AG */
	WAVE_FORMAT_RHETOREX_ADPCM			= 0x0100,		/* Rhetorex, Inc. */

	/* removed because of the following */
	/* WAVE_FORMAT_IRAT					= 0x0101,*/		/* BeCubed Software Inc. */

	/* these three are unofficial */
	IBM_FORMAT_MULAW					= 0x0101,		/* IBM mu-law format */
	IBM_FORMAT_ALAW						= 0x0102,		/* IBM a-law format */
	IBM_FORMAT_ADPCM					= 0x0103,		/* IBM AVC Adaptive Differential PCM format */

	WAVE_FORMAT_VIVO_G723				= 0x0111,		/* Vivo Software */
	WAVE_FORMAT_VIVO_SIREN				= 0x0112,		/* Vivo Software */
	WAVE_FORMAT_DIGITAL_G723			= 0x0123,		/* Digital Equipment Corporation */
	WAVE_FORMAT_CREATIVE_ADPCM			= 0x0200,		/* Creative Labs, Inc */
	WAVE_FORMAT_CREATIVE_FASTSPEECH8 	= 0x0202,		/* Creative Labs, Inc */
	WAVE_FORMAT_CREATIVE_FASTSPEECH10 	= 0x0203,		/* Creative Labs, Inc */
	WAVE_FORMAT_QUARTERDECK				= 0x0220,		/* Quarterdeck Corporation */
	WAVE_FORMAT_FM_TOWNS_SND			= 0x0300,		/* Fujitsu Corporation */
	WAVE_FORMAT_BZV_DIGITAL				= 0x0400,		/* Brooktree Corporation */
	WAVE_FORMAT_VME_VMPCM				= 0x0680,		/* AT&T Labs, Inc. */
	WAVE_FORMAT_OLIGSM					= 0x1000,		/* Ing C. Olivetti & C., S.p.A. */
	WAVE_FORMAT_OLIADPCM				= 0x1001,		/* Ing C. Olivetti & C., S.p.A. */
	WAVE_FORMAT_OLICELP					= 0x1002,		/* Ing C. Olivetti & C., S.p.A. */
	WAVE_FORMAT_OLISBC					= 0x1003,		/* Ing C. Olivetti & C., S.p.A. */
	WAVE_FORMAT_OLIOPR					= 0x1004,		/* Ing C. Olivetti & C., S.p.A. */
	WAVE_FORMAT_LH_CODEC				= 0x1100,		/* Lernout & Hauspie */
	WAVE_FORMAT_NORRIS					= 0x1400,		/* Norris Communications, Inc. */
	/* removed because duplicate */
	/* WAVE_FORMAT_ISIAUDIO				= 0x1401, */	/* AT&T Labs, Inc. */
	WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS	= 0x1500,		/* AT&T Labs, Inc. */
	WAVE_FORMAT_DVM						= 0x2000,		/* FAST Multimedia AG */
	WAVE_FORMAT_INTERWAV_VSC112			= 0x7150,		/* ????? */

	WAVE_FORMAT_IPP_ITU_G_723_1			= 0x7230,		/* Intel Performance Primitives g723 codec. */

	WAVE_FORMAT_EXTENSIBLE				= 0xFFFE
} ;

typedef	struct
{	unsigned short	format ;
	unsigned short	channels ;
	unsigned int	samplerate ;
	unsigned int	bytespersec ;
	unsigned short	blockalign ;
	unsigned short	bitwidth ;
} MIN_WAV_FMT ;

typedef	struct
{	unsigned short	format ;
	unsigned short	channels ;
	unsigned int	samplerate ;
	unsigned int	bytespersec ;
	unsigned short	blockalign ;
	unsigned short	bitwidth ;
	unsigned short	extrabytes ;
	unsigned short	dummy ;
} WAV_FMT_SIZE20 ;

typedef	struct
{	unsigned short	format ;
	unsigned short	channels ;
	unsigned int	samplerate ;
	unsigned int	bytespersec ;
	unsigned short	blockalign ;
	unsigned short	bitwidth ;
	unsigned short	extrabytes ;
	unsigned short	samplesperblock ;
	unsigned short	numcoeffs ;
	struct
	{	short	coeff1 ;
		short	coeff2 ;
	}	coeffs [7] ;
} MS_ADPCM_WAV_FMT ;

typedef	struct
{	unsigned short	format ;
	unsigned short	channels ;
	unsigned int	samplerate ;
	unsigned int	bytespersec ;
	unsigned short	blockalign ;
	unsigned short	bitwidth ;
	unsigned short	extrabytes ;
	unsigned short	samplesperblock ;
} IMA_ADPCM_WAV_FMT ;

typedef	struct
{	unsigned short	format ;
	unsigned short	channels ;
	unsigned int	samplerate ;
	unsigned int	bytespersec ;
	unsigned short	blockalign ;
	unsigned short	bitwidth ;
	unsigned short	extrabytes ;
	unsigned short	auxblocksize ;
} G72x_ADPCM_WAV_FMT ;


typedef	struct
{	unsigned short	format ;
	unsigned short	channels ;
	unsigned int	samplerate ;
	unsigned int	bytespersec ;
	unsigned short	blockalign ;
	unsigned short	bitwidth ;
	unsigned short	extrabytes ;
	unsigned short	samplesperblock ;
} GSM610_WAV_FMT ;

typedef struct
{	unsigned int	esf_field1 ;
	unsigned short	esf_field2 ;
	unsigned short	esf_field3 ;
	char			esf_field4 [8] ;
} EXT_SUBFORMAT ;

typedef	struct
{	unsigned short	format ;
	unsigned short	channels ;
	unsigned int	samplerate ;
	unsigned int	bytespersec ;
	unsigned short	blockalign ;
	unsigned short	bitwidth ;
	unsigned short	extrabytes ;
	unsigned short	validbits ;
	unsigned int	channelmask ;
	EXT_SUBFORMAT	esf ;
} EXTENSIBLE_WAV_FMT ;

typedef union
{	unsigned short		format ;
	MIN_WAV_FMT			min ;
	IMA_ADPCM_WAV_FMT	ima ;
	MS_ADPCM_WAV_FMT	msadpcm ;
	G72x_ADPCM_WAV_FMT	g72x ;
	EXTENSIBLE_WAV_FMT	ext ;
	GSM610_WAV_FMT		gsm610 ;
	WAV_FMT_SIZE20		size20 ;
	char				padding [512] ;
} WAV_FMT ;

typedef struct
{	int frames ;
} FACT_CHUNK ;

typedef struct
{	/* For ambisonic commands */
	int	wavex_ambisonic ;
	unsigned wavex_channelmask ;

	/* Set to true when 'fmt ' chunk is ambiguous.*/
	int fmt_is_broken ;
	WAV_FMT wav_fmt ;
} WAV_PRIVATE ;

#define		WAV_W64_GSM610_BLOCKSIZE	65
#define		WAV_W64_GSM610_SAMPLES		320

/*------------------------------------------------------------------------------------
**	Functions defined in wav_ms_adpcm.c
*/

#define	MSADPCM_ADAPT_COEFF_COUNT	7

void	msadpcm_write_adapt_coeffs (SF_PRIVATE *psf) ;

/*------------------------------------------------------------------------------------
**	Functions defined in wav_w64.c
*/

int 	wav_w64_srate2blocksize (int srate_chan_product) ;
char const* wav_w64_format_str (int k) ;
int		wav_w64_read_fmt_chunk (SF_PRIVATE *psf, int fmtsize) ;
void	wavex_write_guid (SF_PRIVATE *psf, const EXT_SUBFORMAT * subformat) ;
void	wav_w64_analyze (SF_PRIVATE *psf) ;
int		wavex_gen_channel_mask (const int *chan_map, int channels) ;

int		wav_read_bext_chunk (SF_PRIVATE *psf, unsigned int chunksize) ;
int		wav_write_bext_chunk (SF_PRIVATE *psf) ;

#endif