• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

cli/H03-May-2022-18,11313,604

cmake/H12-Jan-2021-245204

doc/H03-May-2022-9676

include/H03-May-2022-1,006807

man/H03-May-2022-2,6342,429

src/H03-May-2022-25,70019,411

AUTHORSH A D28-Dec-2020428 1211

COPYINGH A D12-Jan-20211.5 KiB2622

ChangeLogH A D10-Jan-202115.1 KiB485313

Makefile.amH A D28-Dec-2020519 2821

Makefile.inH A D03-May-202227.4 KiB885786

NEWSH A D12-Jan-202133.6 KiB756626

README.mdH A D28-Dec-20208.6 KiB13884

acinclude.m4H A D28-Dec-20201.7 KiB5652

aclocal.m4H A D10-Jan-2021366.7 KiB10,2479,264

compileH A D28-Dec-20207.2 KiB349259

config.guessH A D28-Dec-202043.2 KiB1,4811,288

config.subH A D28-Dec-202035.3 KiB1,8021,661

configureH A D03-May-2022486.9 KiB16,76414,031

configure.acH A D10-Jan-20216.9 KiB227183

depcompH A D28-Dec-202023 KiB792502

install-shH A D28-Dec-202015 KiB519337

ltmain.shH A D28-Dec-2020319.6 KiB11,2528,044

missingH A D28-Dec-20206.7 KiB216143

wavpack.pc.inH A D28-Dec-2020247 1412

README.md

1<img src="http://www.rarewares.org/wavpack/logos/wavpacklogo.png" width="250"></img>
2
3Hybrid Lossless Wavefile Compressor
4
5Copyright (c) 1998 - 2020 David Bryant.
6
7All Rights Reserved.
8
9Distributed under the [BSD Software License](https://github.com/dbry/WavPack/blob/master/license.txt).
10
11---
12
13This [repository](https://github.com/dbry/WavPack) contains all of the source code required to build the WavPack library (_libwavpack_), and any associated command-line programs.
14
15Additional references:
16
17* [Official website](http://wavpack.com/)
18* [Binaries](http://wavpack.com/downloads.html#binaries)
19* [Other sources](http://wavpack.com/downloads.html#sources)
20* [Documentation](http://wavpack.com/downloads.html#documentation)
21* [Test suite](http://www.rarewares.org/wavpack/test_suite.zip)
22* [Logos](http://wavpack.com/downloads.html#logos)
23
24---
25
26## Fuzzing & Build Status
27
28| Branch         | Status                                                                                                                                                                          |
29|----------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
30| `master`       | [![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/wavpack.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:wavpack)  |
31| `master`       | [![Build Status](https://travis-ci.org/dbry/WavPack.svg?branch=master)](https://travis-ci.org/dbry/WavPack)                                                                     |
32
33Branches [actively built](https://travis-ci.org/dbry/WavPack/branches) by TravisCI.
34
35---
36
37## Building
38
39### Windows
40
41There are solution and project files for Visual Studio 2008, and additional source code to build the [CoolEdit/Audition](https://github.com/dbry/WavPack/tree/master/audition) plugin and the [Winamp](https://github.com/dbry/WavPack/tree/master/winamp) plugin.
42
43The 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.
44
45Both 32-bit and 64-bit platforms are provided.
46
47Visual 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.
48
49On my system it lives here: `C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\VCProjectDefaults`
50
51### Linux
52
53To build everything on Linux, type:
54
551. `./configure`
56   * `--disable-asm`
57   * `--enable-man`
58   * `--enable-rpath`
59   * `--enable-tests`
60   * `--disable-apps`
61   * `--disable-dsd`
62   * `--enable-legacy`
632. `make`
64   * Optionally, `make install`, to install into `/usr/local/bin`
65
66If 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.
67
68For Clang-based build systems (Darwin, FreeBSD, etc.), Clang version 3.5 or higher is required.
69
70If 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`.
71
72There 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`. There is also a seeking test. On Windows a third-party Pthreads library is required, so I am not including this in the build for now.
73
74---
75
76## Assembly
77
78Assembly language optimizations are provided for x86 and x86-64 (AMD64) processors (encoding and decoding) and ARMv7 (decoding only).
79
80The x86 assembly code includes a runtime check for MMX capability, so it will work on legacy i386 processors.
81
82## Documentation
83
84There are four documentation files contained in the distribution:
85
86| File                         | Description                                                                                                                                                   |
87|------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
88| [doc/wavpack_doc.html](https://github.com/dbry/WavPack/blob/master/doc/wavpack_doc.html)         | Contains user-targeted documentation for the command-line programs.                                                                                            |
89| [doc/WavPack5PortingGuide.pdf](https://github.com/dbry/WavPack/blob/master/doc/WavPack5PortingGuide.pdf) | This document is targeted at developers who are migrating to WavPack 5, and it provides a short description of the major improvements and how to utilize them. |
90| [doc/WavPack5LibraryDoc.pdf](https://github.com/dbry/WavPack/blob/master/doc/WavPack5LibraryDoc.pdf)   | Contains a detailed description of the API provided by WavPack library appropriate for reading and writing WavPack files and manipulating APEv2 tags.              |
91| [doc/WavPack5FileFormat.pdf](https://github.com/dbry/WavPack/blob/master/doc/WavPack5FileFormat.pdf)   | Contains a description of the WavPack file format, including details needed for parsing WavPack, blocks, and interpreting the block header and flags.            |
92
93There is also a description of the WavPack algorithms in the forth edition of David Salomon's book "Data Compression: The Complete Reference". This section can be found here: www.wavpack.com/WavPack.pdf
94
95## Portability
96
97This code is designed to be easy to port to other platforms.
98
99It 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.
100
101On Windows, there is now an option to select UTF-8 instead of ANSI.
102
103To maintain compatibility on various platforms, the following conventions are used:
104* `char` must be 8-bits (`signed` or `unsigned`).
105* `short` must be 16-bits.
106* `int` and `long` must be at least 32-bits.
107
108## Design
109
110The 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.
111
112However, 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:
113
114| Macros          | Description                                                                                                |
115|-----------------|------------------------------------------------------------------------------------------------------------|
116| `NO_SEEKING`    | To not allow seeking to a specific sample index (for applications that always read entire files).          |
117| `NO_TAGS`       | To not read specified fields from ID3v1 and APEv2 tags, and not create or edit APEv2 tags.                 |
118| `ENABLE_LEGACY` | Include support for Wavpack files from before version 4.0. This was eliminated by default with WavPack 5. |
119| `ENABLE_DSD`    | Include support for DSD audio. New for WavPack 5 and the default, but obviously not universally required. |
120
121Note that this has been tested on many platforms.
122
123## Tiny Decoder
124
125There are alternate versions of this library available specifically designed for resource limited CPUs, and hardware encoding and decoding.
126
127There 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.
128
129The _Tiny Decoder_ is also designed for embedded use and handles the pure lossless, lossy, and hybrid lossless modes.
130
131Neither of these versions use any memory allocation functions, nor do they require floating-point arithmetic support.
132
133---
134
135Questions or comments should be directed to david@wavpack.com.
136
137You may also find David on GitHub as [dbry](https://github.com/dbry).
138