/*------------------------------------------------------------------------
*
* Copyright (c) 1997-1998 by Cornell University.
*
* See the file "license.txt" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* ulawtopcm.c
*
* Haye Hsi Chan haye@cs.cornell.edu
*
* Converts a WAVE file in ulaw format to linear PCM format.
*
*------------------------------------------------------------------------
*/
#include <dvmbasic.h>
#include <dvmamap.h>
#include <dvmwave.h>
void ReadWave(char *, WaveHdr **, Audio **, BitStream **);
void WriteWave(WaveHdr *, Audio *, char *);
int main(int argc, char *argv[])
{
AudioMap *map;
WaveHdr *hdr;
Audio *audio, *outaudio;
BitStream *inbs;
if (argc != 3) {
fprintf(stderr, "usage : %s input output\n", argv[0]);
exit(1);
}
ReadWave(argv[1], &hdr, &audio, &inbs);
/*
* We simply creates a u-law to linear mapping and apply the mapping.
*/
map = AudioMap8To16New();
AudioMap8To16InitULawToLinear(map);
outaudio = Audio16New(AudioGetNumOfSamples(audio));
AudioMap8To16Apply(map, audio, outaudio);
/*
* Initialize WAVE header and output the WAVE file.
*/
WaveHdrSetFormat(hdr, 1);
WaveHdrSetBitsPerSample(hdr, 16);
WaveHdrSetBytesPerSec(hdr, WaveHdrGetBytesPerSec(hdr)*2);
WaveHdrSetBlockAlign(hdr, WaveHdrGetBlockAlign(hdr)*2);
WaveHdrSetDataLen(hdr, WaveHdrGetDataLen(hdr)*2);
WriteWave(hdr, outaudio, argv[2]);
WaveHdrFree(hdr);
BitStreamFree(inbs);
AudioFree(outaudio);
AudioMapFree(map);
return 0;
}