Home | History | Annotate | Download | only in src

Lines Matching defs:wav

87    Description: a rudimentary wav file interface
102 * \wav->fp filepointer of type FILE*.
109 HANDLE_WAV wav = (HANDLE_WAV)FDKcalloc(1, sizeof(struct WAV));
112 if (wav == NULL) {
113 FDKprintfErr("WAV_InputOpen(): Unable to allocate WAV struct.\n");
117 wav->fp = FDKfopen(filename, "rb");
118 if (wav->fp == NULL) {
119 FDKprintfErr("WAV_InputOpen(): Unable to open wav file. %s\n", filename);
124 if (FDKfread(&(wav->header.riffType), 1, 4, wav->fp) != 4) {
128 if (FDKstrncmp("RIFF", wav->header.riffType, 4)) {
134 FDKfread_EL(&(wav->header.riffSize), 4, 1, wav->fp);
137 if (FDKfread(&wav->header.waveType, 1, 4, wav->fp) !=4) {
141 if (FDKstrncmp("WAVE", wav->header.waveType, 4)) {
147 if (FDKfread(&(wav->header.formatType), 1, 4, wav->fp) != 4) {
151 if (FDKstrncmp("fmt", wav->header.formatType, 3)) {
157 FDKfread_EL(&wav->header.formatSize, 4, 1, wav->fp); /* should be 16 for PCM-format (uncompressed) */
161 FDKfread_EL(&(wav->header.compressionCode), 2, 1, wav->fp);
162 FDKfread_EL(&(wav->header.numChannels), 2, 1, wav->fp);
163 FDKfread_EL(&(wav->header.sampleRate), 4, 1, wav->fp);
164 FDKfread_EL(&(wav->header.bytesPerSecond), 4, 1, wav->fp);
165 FDKfread_EL(&(wav->header.blockAlign), 2, 1, wav->fp);
166 FDKfread_EL(&(wav->header.bitsPerSample), 2, 1, wav->fp);
168 offset = wav->header.formatSize - 16;
171 if (wav->header.compressionCode == 0xFFFE) {
182 FDKfread_EL(&(extraFormatBytes), 2, 1, wav->fp);
186 FDKfread_EL(&(validBitsPerSample), 2, 1, wav->fp);
187 FDKfread_EL(&(channelMask), 4, 1, wav->fp);
188 FDKfread_EL(&(guid), 16, 1, wav->fp);
192 if (i == 16) wav->header.compressionCode = 0x01;
200 FDKfread(&wav->header.formatSize, 1, 1, wav->fp);
205 if (FDKfread(wav->header.dataType, 1, 4, wav->fp) != 4) {
207 FDKfree(wav);
212 FDKfread_EL(&offset, 4, 1, wav->fp);
215 if (FDKstrncmp("data", wav->header.dataType, 4) == 0) {
216 wav->header.dataSize = offset;
221 FDKfread(&(wav->header.dataSize), 1, 1, wav->fp);
223 } while (!FDKfeof(wav->fp));
226 *pWav = wav;
231 if (wav->fp) {
232 FDKfclose(wav->fp);
233 wav->fp = NULL;
236 if (wav) {
237 FDKfree(wav);
251 * \wav HANDLE_WAV of the wav file.
260 INT WAV_InputRead (HANDLE_WAV wav, void *buffer, UINT numSamples, int nBits)
268 switch (wav->header.compressionCode)
271 if (nBits == wav->header.bitsPerSample) {
272 result = FDKfread_EL(buffer, wav->header.bitsPerSample >> 3, numSamples, wav->fp) ;
278 result += FDKfread_EL(&tmp, wav->header.bitsPerSample >> 3, 1, wav->fp) ;
281 if ( !IS_LITTLE_ENDIAN() && wav->header.bitsPerSample != 24 && wav->header.bitsPerSample < 32) {
282 tmp >>= (32-wav->header.bitsPerSample);
286 if (wav->header.bitsPerSample > nBits)
287 tmp >>= (wav->header.bitsPerSample-nBits);
289 tmp <<= (nBits-wav->header.bitsPerSample);
303 result += FDKfread(&(bptr[i<<1]), 1, 1, wav->fp) ;
317 HANDLE_WAV wav = *pWav;
319 if (wav != NULL) {
320 if (wav->fp != NULL) {
321 FDKfclose(wav->fp);
322 wav->fp = NULL;
324 if (wav) {
325 FDKfree(wav);
377 * \brief Open WAV output/writer handle
378 * \param pWav pointer to WAV handle to be returned
379 * \param sampleRate desired samplerate of the resulting WAV file
380 * \param numChannels desired number of audio channels of the resulting WAV file
381 * \param bitsPerSample desired number of bits per audio sample of the resulting WAV file
388 HANDLE_WAV wav = (HANDLE_WAV)FDKcalloc(1, sizeof(struct WAV));
397 wav->fp = FDKfopen(outputFilename, "wb");
398 if (wav->fp == NULL)
404 FDKstrcpy(wav->header.riffType, "RIFF");
405 wav->header.riffSize = LittleEndian32(0x7fffffff); /* in case fseek() doesn't work later in WAV_OutputClose() */
406 FDKstrcpy(wav->header.waveType, "WAVE");
408 FDKstrcpy(wav->header.formatType, "fmt ");
409 wav->header.formatSize = LittleEndian32(16);
411 wav->header.compressionCode = LittleEndian16(0x01);
412 wav->header.bitsPerSample = LittleEndian16((SHORT)bitsPerSample);
413 wav->header.numChannels = LittleEndian16((SHORT)numChannels);
414 wav->header.blockAlign = LittleEndian16((SHORT)(numChannels * (bitsPerSample >> 3)));
415 wav->header.sampleRate = LittleEndian32(sampleRate);
416 wav->header.bytesPerSecond = LittleEndian32(sampleRate * wav->header.blockAlign);
417 FDKstrcpy(wav->header.dataType, "data");
418 wav->header.dataSize = LittleEndian32(0x7fffffff - 36);
422 if (FDKfwrite(&wav->header, 1, size, wav->fp) != size)
429 wav->header.dataSize = wav->header.riffSize = 0;
431 *pWav = wav;
436 if (wav->fp)
437 FDKfclose(wav->fp);
438 if (wav)
439 FDKfree(wav);
449 * \brief Write data to WAV file asociated to WAV handle
451 * \param wav handle of wave file
459 INT WAV_OutputWrite(HANDLE_WAV wav, void *sampleBuffer, UINT numberOfSamples, int nBufBits, int nSigBits)
466 int bps = Unpack(wav->header.bitsPerSample);
471 if (FDKfwrite_EL(sampleBuffer, (bps>>3), numberOfSamples, wav->fp) != numberOfSamples)
473 FDKprintfErr("WAV_OutputWrite(): error: unable to write to file %d\n", wav->fp);
502 result=FDKfwrite_EL(&tmp, bps>>3, 1, wav->fp);
504 FDKprintfErr("WAV_OutputWrite(): error: unable to write to file %d\n", wav->fp);
510 wav->header.dataSize += (numberOfSamples * (bps>>3));
517 * \brief Close WAV Output handle
518 * \param pWav pointer to WAV handle. *pWav is set to NULL.
522 HANDLE_WAV wav = *pWav;
525 if ( wav == NULL ) {
529 wav->header.dataSize = LittleEndian32(wav->header.dataSize);
530 wav->header.riffSize = LittleEndian32(wav->header.dataSize + 36);
532 if (wav->fp != NULL)
534 if (FDKfseek(wav->fp, 0, FDKSEEK_SET)) {
539 if (FDKfwrite(&wav->header.riffType, 1, size, wav->fp) != size)
544 if (FDKfclose(wav->fp))
546 FDKprintfErr("WAV_OutputClose(): unable to close wav file\n");
548 wav->fp = NULL;
551 FDKfree(wav);