WavPack
WavPack is a free and open-source lossless audio compression format.
Features
WavPack compression can compress 8-, 16-, 24-, and 32-bit fixed-point, and 32-bit floating point audio files in the.WAV file format. It also supports surround sound streams and high frequency sampling rates. Like other lossless compression schemes, the data reduction rate varies with the source, but it is generally between 30% and 70% for typical popular music and somewhat better than that for classical music and other sources with greater dynamic range.Hybrid mode
WavPack also incorporates a "hybrid" mode which still provides the features of lossless compression, but it creates two files: a relatively small, high-quality, lossy file that can be used by itself; and a "correction" file that, when combined with the lossy file, provides full lossless restoration. This allows the use of lossy and lossless codecs together.A similar "hybrid" feature is also offered by OptimFROG DualStream, MPEG-4 SLS and DTS-HD Master Audio.
Summary
- Open-source, released under a BSD-like license
- Multiplatform
- Error robustness
- Fast encoding speed
- Higher compression ratios than other widely used open source lossless audio codecs
- Streaming support
- Supports multichannel audio and high resolutions
- Native support in WavPack 5.x for compressing Direct Stream Digital without converting the source file to PCM.
- Hybrid/lossy mode
- Hardware support
- Metadata support
- Supports RIFF chunks
- ReplayGain compatible
- Ability to create self extracting files for the Win32 platform
- Supports 32-bit floating point streams
- Supports embedded CUE sheets
- Includes MD5 hashes for quick integrity checking
- Can encode in both symmetrical and asymmetrical modes
History
Very soon after the release of version 1.0, v. 2.0 was released, featuring lossy encoding.
In 1999, version 3.0 was released, with a new "fast mode", compression of raw PCM audio files, and error detection using a 32-bit cyclic redundancy check.
A “roadmap” is also published by the author, containing possible hints on future development.
Support
Software
Some software supports the format natively, while others require plugins. The official WavPack website offers plugins for Winamp, Nero Burning ROM, MediaChest 2.1, and several other applications, as well as a DirectShow filter. , by the author of foobar2000, as well as foobar2000 itself, and Asunder allow ripping Audio CDs directly into Wavpack files.Linux support is available with a native port.
FFmpeg has a native WavPack encoder, which may be combined with software like GNU parallel to use multiple CPU cores to quickly transcode other lossless formats into WavPack, and from WavPack to any format that FFmpeg supports, without the need for additional software.
Hardware
Native support:- Cowon A3 PMP supports WavPack out of the box.
- Apple iPod range of music players do not support WavPack out of the box, but can through open source Rockbox firmware.
- iriver H100 series, can through open source Rockbox firmware.
- iriver H300 series, can through open source Rockbox firmware.
- Android smartphones and tablets with the installation of third party media player software.
- Chrome OS devices using media player software installed in the Linux subsystem or the Android Play Store.
Technology
To ensure high-speed operation, WavPack uses a predictor that is implemented entirely in integer math. In its "fast" mode the prediction is simply the arithmetic extrapolation of the previous two samples. For example, if the previous two samples were −10 and 20, then the prediction would be 50. For the default mode a simple adaptive factor is added to weigh the influence of the earlier sample on the prediction. In our example the resulting prediction could then vary between 20 for no influence to 50 for full influence. This weight factor is constantly updated based on the audio data's changing spectral characteristics.The prediction generated is then subtracted from the actual sample to be encoded to generate the error value. In mono mode this value is sent directly to the coder. However, stereo signals tend to have some correlation between the two channels that can be further exploited. Therefore, two error values are calculated that represent the difference and average of the left and right error values. In the "fast" mode of operation these two new values are simply sent to the coder instead of the left and right values. In the default mode, the difference value is always sent to the coder along with one of the other three values. An adaptive algorithm continuously determines the most efficient of the three to send based on the changing balance of the channels.
Instead of Rice coding, a special data encoder for WavPack is used. Rice coding is the optimal bit coding for this type of data, and WavPack's encoder is less efficient, but only by about 0.15 bits/sample. However, there are some advantages in exchange; the first one is that WavPack's encoder does not require the data to be buffered ahead of encoding; instead it converts each sample directly to bitcodes. This is more computationally efficient, and it is better in some applications where coding delay is critical. The second advantage is that it is easily adaptable to lossy encoding, since all significant bits are transmitted directly. In this way it is possible to only transmit, for example, the 3 most significant bits of each sample. In fact, it is possible to transmit only the sign and implied MSB for each sample with an average of only 3.65 bits/sample.
This coding scheme is used to implement the "lossy" mode of WavPack. In the "fast" mode the output of the non-adaptive decorrelator is simply rounded to the nearest codable value for the specified number of bits. In the default mode the adaptive decorrelator is used and both the current and the next sample are considered in choosing the better of the two available codes.
No floating-point arithmetic is used in WavPack's data path because, according to the author, integer operations are less susceptible to subtle chip-to-chip variations that could corrupt the lossless nature of the compression. It is possible that a lossless compressor that used floating-point math could generate different output when running on that faulty Pentium. Even disregarding actual bugs, floating-point math is complicated enough that there could be subtle differences between "correct" implementations that could cause trouble for this type of application. A 32-bit error detection code to the generated streams is included to maintain user confidence in the integrity of WavPack's compression.
WavPack source code is portable, and has been compiled on several Unix and Unix-like operating systems as well as Windows, DOS, Palm OS, and OpenVMS. It works on many architectures, including x86, ARM, PowerPC, AMD64, IA-64, SPARC, Alpha, PA-RISC, MIPS and Motorola 68k.
A cut-down version of WavPack was developed for the Texas Instruments TMS320 series Digital Signal Processor. This was aimed predominantly at encouraging manufacturers to incorporate WavPack compression into portable memory audio recorders. This version supported features that were applicable only to embedded applications and dropped off features that only applied to full computer systems. The TMS320 series DSPs are native integer devices, and support WavPack well. Some 'special' features of the full WavPack software were included and others were excluded. The port was based on version 4.
WavPack support was added to WinZip starting with version 11.0 beta, released in October 2006. This extension to the ZIP file format was included by PKWARE, the maintainers of the format, in the official APPNOTE.TXT description file starting with version 6.3.2, released on 28 September 2007.