WavPack encode/decode library, command-line programs, and several plugins
C Assembly C++ Objective-C M4 NSIS Other
Permalink
Failed to load latest commit information.
audition allow Cool Edit / Audition filter to read DSD with 8x decimation Aug 27, 2016
cli GitHub issue #15 - create new metadata item to identify non-Microsoft… Sep 25, 2016
doc update library use document with new Unicode support on Windows Mar 30, 2016
include GitHub issue #15 - create new metadata item to identify non-Microsoft… Sep 25, 2016
man remove -rc from everywhere and update user docs with new options Mar 28, 2016
src GitHub issue #15 - create new metadata item to identify non-Microsoft… Sep 25, 2016
wavpackdll squash MSVC warnings, plus some other minor cleanup Mar 8, 2016
wavpackexe build DSD branch on MSVC and squash warnings Aug 19, 2016
winamp provide/use new API WavpackGetNativeSampleRate() for DSD Sep 8, 2016
wvgainexe Changes to incorporate Unicode handling into the command-line programs Dec 7, 2015
wvunpackexe build DSD branch on MSVC and squash warnings Aug 19, 2016
xmms fix file-info bitrate display so that it takes wvc into account, plus… Sep 27, 2009
.gitignore Git: ignore audio test files Mar 12, 2016
AUTHORS add Joachim Henke (who created the MMX code) to the AUTHORS file Oct 13, 2013
COPYING get rid of -rc everywhere and update documentation in preparation for… May 10, 2015
ChangeLog fix typos and make some minor mods in changelog and README Mar 30, 2016
Makefile.am add --disable-apps to configure to build only libwavpack (removes ico… Aug 24, 2016
NEWS * created tags and branches directories, moved everything to trunk Oct 17, 2006
README fix typos and make some minor mods in changelog and README Mar 30, 2016
acinclude.m4 Add manpages from the Debian package Oct 5, 2009
autogen.sh Update autogen.sh Oct 12, 2009
configure.ac libwavpack: legacy (< 4.0) WavPack file decode removed by default Sep 9, 2016
license.txt update some copyright info Mar 30, 2016
masm.rules changes required to get the assembler optimizations to build in Visua… May 4, 2015
wavpack.pc.in fix wavpack.pc.in to work correctly with Arch Linux without special p… Nov 5, 2013
wavpack.sln change Windows version from "alpha" to "beta" and create x64 platform… May 24, 2013

README

////////////////////////////////////////////////////////////////////////////
//                           **** 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