//////////////////////////////////////////////////////////////////////////// // **** WAVPACK **** // // Hybrid Lossless Wavefile Compressor // // Copyright (c) 1998 - 2004 Conifer Software. // // All Rights Reserved. // // Distributed under the BSD Software License (see license.txt) // //////////////////////////////////////////////////////////////////////////// This package contains a tiny version of the WavPack 4.0 decoder that might be used in a "resource limited" CPU environment or form the basis for a hardware decoding implementation. It is packaged with a demo command-line program that accepts a WavPack audio file on stdin and outputs a RIFF wav file to stdout. The program is standard C, and a win32 executable is included which was compiled under MS Visual C++ 6.0 using this command: cl /O1 /DWIN32 wvfilter.c wputils.c unpack.c float.c metadata.c words.c bits.c WavPack data is read with a stream reading callback. No direct seeking is provided for, but it is possible to start decoding anywhere in a WavPack stream. In this case, WavPack will be able to provide the sample-accurate position when it synchs with the data and begins decoding. For demonstration purposes this uses a single static copy of the WavpackContext structure, so obviously it cannot be used for more than one file at a time. Also, this decoder will not handle "correction" files, plays only the first two channels of multi-channel files, and is limited in resolution in some large integer or floating point files (but always provides at least 24 bits of resolution). It also will not accept WavPack files from before version 4.0. To make this code viable on the greatest number of hardware platforms, the following are true: speed is about 4x realtime on an AMD K6 300 MHz ("high" mode 16/44 stereo; normal mode is about twice that fast) no floating-point math required; just 32b * 32b = 32b int multiply large data areas are static and less than 4K total executable code and tables are less than 32K no malloc / free usage To maintain compatibility on various platforms, the following conventions are used: a "short" must be 16-bits a "long" must be 32-bits an "int" must be at least 16-bits, but may be larger a "char" must default to signed Questions or comments should be directed to david@wavpack.com