53 lines
2.5 KiB
Text
53 lines
2.5 KiB
Text
|
////////////////////////////////////////////////////////////////////////////
|
||
|
// **** 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
|