114 lines
6.0 KiB
Plaintext
114 lines
6.0 KiB
Plaintext
////////////////////////////////////////////////////////////////////////////
|
|
// **** WAVPACK **** //
|
|
// Hybrid Lossless Wavefile Compressor //
|
|
// Copyright (c) 1998 - 2016 David Bryant. //
|
|
// All Rights Reserved. //
|
|
// Distributed under the BSD Software License (see license.txt) //
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
This package contains all the source code required to build the WavPack
|
|
library (libwavpack) and the command-line programs and it has been tested
|
|
on many platforms. Assembly language optimizations are provided for x86
|
|
and x86-64 (AMD64) processors (encoding and decoding) and ARMv7 (decoding
|
|
only). The x86 assembly code includes a runtime check for MMX capability,
|
|
so it will work on legacy i386 processors.
|
|
|
|
On Windows there are solution and project files for Visual Studio 2008 and
|
|
additional sourcecode to build the CoolEdit/Audition plugin and the winamp
|
|
plugin. The CoolEdit/Audition plugin provides a good example for using the
|
|
library to both read and write WavPack files and the winamp plugin makes
|
|
extensive use of APEv2 tag reading and writing. Both 32-bit and 64-bit
|
|
platforms are provided.
|
|
|
|
Visual Studio 2008 does not support projects with x64 assembly very well. I
|
|
have provided a copy of the edited masm.rules file that works for me, but I
|
|
can't provide support if your build does not work. Please make a copy of
|
|
your masm.rules file first. On my system it lives here:
|
|
|
|
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\VCProjectDefaults
|
|
|
|
To build everything on Linux, type:
|
|
|
|
1. ./configure [--disable-asm] [--enable-man] [--enable-rpath] [--enable-tests]
|
|
2. make
|
|
3. make install (optionally, to install into /usr/local/bin)
|
|
|
|
If you are using the code directly from Git (rather than a distribution)
|
|
then you will need to do a ./autogen.sh instead of the configure step. If
|
|
assembly optimizations are available for your processor they will be
|
|
automatically enabled, but if there is a problem with them then use the
|
|
--disable-asm option to revert to pure C. For Clang-based build systems
|
|
(Darwin, FreeBSD, etc.) Clang version 3.5 or higher is required.
|
|
|
|
If you get a WARNING about unexpected libwavpack version when you run the
|
|
command-line programs, you might try using --enable-rpath to hardcode the
|
|
library location in the executables, or simply force static linking with
|
|
--disable-shared.
|
|
|
|
There is now a cli program to do a full suite of stress tests for libwavpack,
|
|
and this is particularly useful for packagers to make sure that the assembly
|
|
language optimizations are working correctly on various platforms. It is
|
|
built with the configure option --enable-tests and requires Pthreads (it
|
|
worked out-of-the-box on all the platforms I tried it on). There are lots of
|
|
options, but the default test suite (consisting of 192 tests) is executed
|
|
with "wvtest --default". On Windows a third-party Pthreads library is
|
|
required, so I am not including this in the build for now.
|
|
|
|
Notes:
|
|
|
|
1. There are three documentation files contained in the distribution:
|
|
|
|
doc/wavpack_doc.html contains user-targeted documentation for the
|
|
command-line programs
|
|
|
|
doc/library_use.txt contains a detailed description of the API provided
|
|
by WavPack library appropriate for read and writing
|
|
WavPack files and manipulating APEv2 tags
|
|
|
|
doc/file_format.txt contains a description of the WavPack file format,
|
|
including details needed for parsing WavPack blocks
|
|
and interpreting the block header and flags
|
|
|
|
There is also a description of the WavPack algorithms in the forth edition
|
|
of David Salomon's book "Data Compression: The Complete Reference". The
|
|
section on WavPack can be found here:
|
|
|
|
www.wavpack.com/WavPack.pdf
|
|
|
|
2. This code is designed to be easy to port to other platforms. It is endian-
|
|
agnostic and usually uses callbacks for I/O, although there's a convenience
|
|
function for reading files that accepts filename strings and automatically
|
|
handles correction files (and on Windows there is now an option to select
|
|
UTF-8 instead of ANSI).
|
|
|
|
To maintain compatibility on various platforms, the following conventions
|
|
are used: the "char" type must be 8-bits (signed or unsigned), a "short"
|
|
must be 16-bits and the "int" and "long" types must be at least 32-bits.
|
|
|
|
3. The code's modules are organized in such a way that if major chunks of the
|
|
functionality are not referenced (for example, creating WavPack files) then
|
|
link-time dependency resolution should provide optimum binary sizes.
|
|
|
|
However, some functionality could not be easily excluded in this way and so
|
|
there are additional macros that may be used to further reduce the size of
|
|
the binary. Note that these must be defined for all modules:
|
|
|
|
VER4_ONLY to only handle WavPack files from version 4.0 onward
|
|
(this is highly recommended for most applications
|
|
because pre-4.0 WavPack files are very old)
|
|
NO_SEEKING to not allow seeking to a specific sample index
|
|
(for applications that always read entire files)
|
|
NO_TAGS to not read specified fields from ID3v1 and APEv2 tags and
|
|
not create or edit APEv2 tags
|
|
|
|
4. There are alternate versions of this library available specifically designed
|
|
for "resource limited" CPUs or hardware encoding and decoding. There is the
|
|
"tiny decoder" library which works with less than 32k of code and less than
|
|
4k of data and has assembly language optimizations for the ARM and Freescale
|
|
ColdFire CPUs. The "tiny encoder" is also designed for embedded use and
|
|
handles the pure lossless, lossy, and hybrid lossless modes. Neither of the
|
|
"tiny" versions use any memory allocation functions nor do they require
|
|
floating-point arithmetic support.
|
|
|
|
5. Questions or comments should be directed to david@wavpack.com
|