Lines 51-79
Link Here
|
51 |
#define FALSE 0 |
51 |
#define FALSE 0 |
52 |
|
52 |
|
53 |
typedef struct |
53 |
typedef struct |
54 |
{ u_long dwSize ; |
54 |
{ uint32_t dwSize ; |
55 |
u_short wFormatTag ; |
55 |
uint16_t wFormatTag ; |
56 |
u_short wChannels ; |
56 |
uint16_t wChannels ; |
57 |
u_long dwSamplesPerSec ; |
57 |
uint32_t dwSamplesPerSec ; |
58 |
u_long dwAvgBytesPerSec ; |
58 |
uint32_t dwAvgBytesPerSec ; |
59 |
u_short wBlockAlign ; |
59 |
uint16_t wBlockAlign ; |
60 |
u_short wBitsPerSample ; |
60 |
uint16_t wBitsPerSample ; |
61 |
} WAVEFORMAT ; |
61 |
} WAVEFORMAT ; |
62 |
|
62 |
|
63 |
typedef struct |
63 |
typedef struct |
64 |
{ char RiffID [4] ; |
64 |
{ char RiffID [4] ; |
65 |
u_long RiffSize ; |
65 |
uint32_t RiffSize ; |
66 |
char WaveID [4] ; |
66 |
char WaveID [4] ; |
67 |
char FmtID [4] ; |
67 |
char FmtID [4] ; |
68 |
u_long FmtSize ; |
68 |
uint32_t FmtSize ; |
69 |
u_short wFormatTag ; |
69 |
uint16_t wFormatTag ; |
70 |
u_short nChannels ; |
70 |
uint16_t nChannels ; |
71 |
u_long nSamplesPerSec ; |
71 |
uint32_t nSamplesPerSec ; |
72 |
u_long nAvgBytesPerSec ; |
72 |
uint32_t nAvgBytesPerSec ; |
73 |
u_short nBlockAlign ; |
73 |
uint16_t nBlockAlign ; |
74 |
u_short wBitsPerSample ; |
74 |
uint16_t wBitsPerSample ; |
75 |
char DataID [4] ; |
75 |
char DataID [4] ; |
76 |
u_long nDataBytes ; |
76 |
uint32_t nDataBytes ; |
77 |
} WAVE_HEADER ; |
77 |
} WAVE_HEADER ; |
78 |
|
78 |
|
79 |
/*=================================================================================================*/ |
79 |
/*=================================================================================================*/ |
Lines 115-123
Link Here
|
115 |
va_end(ap); |
115 |
va_end(ap); |
116 |
} |
116 |
} |
117 |
|
117 |
|
118 |
int WaveWriteHeader (int wavefile, int channels, u_long samplerate, int sampbits, u_long samples, ErrFunc erf) |
118 |
int WaveWriteHeader (int wavefile, int channels, uint32_t samplerate, int sampbits, uint32_t samples, ErrFunc erf) |
119 |
{ u_long databytes ; |
119 |
{ uint32_t databytes ; |
120 |
u_short blockalign ; |
120 |
uint16_t blockalign ; |
121 |
|
121 |
|
122 |
v_erf = erf; /* wwg: Set error reporting function */ |
122 |
v_erf = erf; /* wwg: Set error reporting function */ |
123 |
|
123 |
|
Lines 129-141
Link Here
|
129 |
sampbits = (sampbits == 16) ? 16 : 8 ; |
129 |
sampbits = (sampbits == 16) ? 16 : 8 ; |
130 |
|
130 |
|
131 |
blockalign = ((sampbits == 16) ? 2 : 1) * channels ; |
131 |
blockalign = ((sampbits == 16) ? 2 : 1) * channels ; |
132 |
databytes = samples * (u_long) blockalign ; |
132 |
databytes = samples * (uint32_t) blockalign ; |
133 |
|
133 |
|
134 |
waveheader.RiffSize = sizeof (WAVE_HEADER) + databytes - 8 ; |
134 |
waveheader.RiffSize = sizeof (WAVE_HEADER) + databytes - 8 ; |
135 |
waveheader.wFormatTag = PCM_WAVE_FORMAT ; |
135 |
waveheader.wFormatTag = PCM_WAVE_FORMAT ; |
136 |
waveheader.nChannels = channels ; |
136 |
waveheader.nChannels = channels ; |
137 |
waveheader.nSamplesPerSec = samplerate ; |
137 |
waveheader.nSamplesPerSec = samplerate ; |
138 |
waveheader.nAvgBytesPerSec = samplerate * (u_long) blockalign ; |
138 |
waveheader.nAvgBytesPerSec = samplerate * (uint32_t) blockalign ; |
139 |
waveheader.nBlockAlign = blockalign ; |
139 |
waveheader.nBlockAlign = blockalign ; |
140 |
waveheader.wBitsPerSample = sampbits ; |
140 |
waveheader.wBitsPerSample = sampbits ; |
141 |
waveheader.nDataBytes = databytes; |
141 |
waveheader.nDataBytes = databytes; |
Lines 148-158
Link Here
|
148 |
return 0 ; |
148 |
return 0 ; |
149 |
} ; /* WaveWriteHeader*/ |
149 |
} ; /* WaveWriteHeader*/ |
150 |
|
150 |
|
151 |
int WaveReadHeader (int wavefile, int* channels, u_long* samplerate, int* samplebits, u_long* samples, u_long* datastart,ErrFunc erf) |
151 |
int WaveReadHeader (int wavefile, int* channels, uint32_t* samplerate, int* samplebits, uint32_t* samples, uint32_t* datastart,ErrFunc erf) |
152 |
{ static WAVEFORMAT waveformat ; |
152 |
{ static WAVEFORMAT waveformat ; |
153 |
static char buffer [ BUFFERSIZE ] ; /* Function is not reentrant.*/ |
153 |
static char buffer [ BUFFERSIZE ] ; /* Function is not reentrant.*/ |
154 |
char* ptr ; |
154 |
char* ptr ; |
155 |
u_long databytes ; |
155 |
uint32_t databytes ; |
156 |
|
156 |
|
157 |
v_erf = erf; /* wwg: Set error reporting function */ |
157 |
v_erf = erf; /* wwg: Set error reporting function */ |
158 |
|
158 |
|
Lines 183-189
Link Here
|
183 |
ptr += 4 ; /* Move past "fmt ".*/ |
183 |
ptr += 4 ; /* Move past "fmt ".*/ |
184 |
memcpy (&waveformat, ptr, sizeof (WAVEFORMAT)) ; |
184 |
memcpy (&waveformat, ptr, sizeof (WAVEFORMAT)) ; |
185 |
|
185 |
|
186 |
if (waveformat.dwSize < (sizeof (WAVEFORMAT) - sizeof (u_long))) { |
186 |
if (waveformat.dwSize < (sizeof (WAVEFORMAT) - sizeof (uint32_t))) { |
187 |
err("Bad format: Bad fmt size"); /* wwg: report error */ |
187 |
err("Bad format: Bad fmt size"); /* wwg: report error */ |
188 |
return WR_BADFORMATSIZE ; |
188 |
return WR_BADFORMATSIZE ; |
189 |
} |
189 |
} |
Lines 201-207
Link Here
|
201 |
} |
201 |
} |
202 |
|
202 |
|
203 |
ptr += 4 ; /* Move past "data".*/ |
203 |
ptr += 4 ; /* Move past "data".*/ |
204 |
memcpy (&databytes, ptr, sizeof (u_long)) ; |
204 |
memcpy (&databytes, ptr, sizeof (uint32_t)) ; |
205 |
|
205 |
|
206 |
/* Everything is now cool, so fill in output data.*/ |
206 |
/* Everything is now cool, so fill in output data.*/ |
207 |
|
207 |
|
Lines 210-216
Link Here
|
210 |
*samplebits = waveformat.wBitsPerSample ; |
210 |
*samplebits = waveformat.wBitsPerSample ; |
211 |
*samples = databytes / waveformat.wBlockAlign ; |
211 |
*samples = databytes / waveformat.wBlockAlign ; |
212 |
|
212 |
|
213 |
*datastart = ((u_long) (ptr + 4)) - ((u_long) (&(buffer[0]))) ; |
213 |
*datastart = ((uint32_t) (ptr + 4)) - ((uint32_t) (&(buffer[0]))) ; |
214 |
|
214 |
|
215 |
if (waveformat.dwSamplesPerSec != waveformat.dwAvgBytesPerSec / waveformat.wBlockAlign) { |
215 |
if (waveformat.dwSamplesPerSec != waveformat.dwAvgBytesPerSec / waveformat.wBlockAlign) { |
216 |
err("Bad file format"); /* wwg: report error */ |
216 |
err("Bad file format"); /* wwg: report error */ |