WavPack

From Hydrogenaudio Knowledgebase
Revision as of 20:39, 11 January 2022 by Porcuswiki (Talk | contribs)

Jump to: navigation, search
WavPack
Official WavPack logo

Hybrid Lossless Audio Compression
Developer(s) David Bryant
Release information
Initial release {{{released}}}
Stable release 5.4.0 (2021-01-21)
Preview release None
Compatibility
Operating system Windows, Mac OS/X, Linux/BSD/Unix
Additional information
Use Encoder/Decoder
License BSD license
Website http://www.wavpack.com/

WavPack (pronounced "wave-pack") is a lossless and hybrid lossless/lossy audio codec. It is distributed as a free open-source encoder/decoder with a library and a large number of tools, including a Windows GUI and a range of plugins for both audio players and other software. Third party implementations are available (ffmpeg). WavPack supports and/or can be played back on a large number of platforms/OSes including mobile (Android, iOS), portable (Rockbox) and even web apps.

WavPack might be the most feature-rich among the lossless compressors, supporting a unique range of input formats including Direct-Stream Digital and a hybrid lossy/lossless mode for lossy/lossless versions of the same file. While many special features might require the user to apply the WavPack executable directly (see the Using WavPack section below), everyday use is supported by a wide range of players and taggers.

Performance-wise, WavPack defaults to a fast codec - compressing around FLAC's default size, albeit not decoding as ultra-light. The user might fine-tune compression/CPU load trade-off through a lot of options, including "extremely slow" encoding (quoting the manual) - but all will decode faster than the high-compression Monkey's Audio/OptimFROG codecs. In a major lossless comparison test, only one codec - the Windows/Wine-only TAK - could outperform WavPack on both compression and encoding speed and decoding speed.[1]

For more on WavPack, including on its history and technology, see the Wikipedia entry.

Features

For an end-user considering WavPack as a an audio format, its feature-richness might be the big selling point. WavPack supports pretty much all the more common features noted at HA Wiki's Lossless Codec Comparison as in the following first list, but several users might consider the more unique features listed under the subsequent headline.

  • Streaming support
  • Seekable playback
  • Error handling. Optional audio checksum for integrity verification (use the -m option).
  • High-resolution audio support up to 32 bits per channel (including floating-point, see below) and sample rates apparently up to 4 GHz PCM (including non-standard rates).
  • Multichannel support up to 255 channels, supports WAVEFORMATEXTENSIBLE.
  • Piping support for encoding, and support for RAW PCM input.
  • Can input and output WAVE, RF64, Wave64, and CAF audio files (including > 4 GB files).
  • RIFF chunks supported for recreating also non-audio chunks of the original .wav files (see below)
  • Tagging: APEv2 tags at the end of file (also supported, but deprecated: ID3v1)
  • Cuesheet support
  • Unicode support
  • Can be used in the Matroska container.
  • Drag and drop support: Dropping a file on to wavpack.exe/wvunpack.exe will encode/decode it (using default settings, to source directory).

Even if the bit depth must be 8 or 16 or 24 or 32 bits, WavPack is known to employ a "wasted bits" strategy that treat a a (say!) 20 bit signal in a 24 bit container by detecting that 21 to 24 are "wasted" and compress the 20-bits without size penalty: see van Beurden's lossless comparison, section 2.3.

Special/unique features

  • DSD support: can losslessly compress Philips DSDIFF and Sony DSF files (see "Using WavPack" below); can import ID3v2.3 tags from DSF.
  • 32-bit floating-point support. Also handles CoolEdit/Adobe Audition's 32-bit float format (use the -a option only if the .wav was generated by CoolEdit/Audition).
  • Will by default restore the input file (.wav/.dsf etc) - not only the audio and the RIFF metadata, but also select the same version of the WAVE container to recreate the input file bit-by-bit. This behaviour can be overridden by forcing output format (which may also be used to fix obsolete-format .wav files - or to decode DSD streams or float (lossy!) into 24-bit integer PCM WAV) - or by stripping these data upon encoding (-r, or passing stream-only like when using a player like foobar2000) like is default in e.g. FLAC.
  • Hybrid lossy/lossless mode (can also be used as lossy).
  • Can create self-extracting (.sfx) files for Windows
  • Even-quicker-than-audio-MD5 integrity checking (wvunpack -vv from version 5).


Limitations

  • Despite being available for several platforms, PCM in AIFF is not supported. (However, both endianness CAF files are.)
  • Can currently not import ID3v2.4 tags from DSF files, only ID3v2.3 (use Mp3tag to copy tags)
  • WavPack 5 does no longer support WavPack 3.x and below (though older WavPack versions are still available)
  • Current Windows version no longer supports Windows XP (older versions still available)

WavPack has traditionally had less hardware support than FLAC (Rockbox having been the most notable platform, others listed at https://www.wavpack.com/index.html#Hardware ), but with WavPack playback through Android and iOS players, the distinction between "hardware" and "software" is arguably blurred.

Using WavPack

WavPack files can be played back in supported players (see below), and several of these can encode to WavPack. However, often one must use the WavPack binaries to access certain of its features. For example, you cannot count on RIFF support by encoding through players which often deliver only the audio to the encoder - and you cannot count on such players to restore non-audio data faithfully. Also, the input format might exceed the player's internal decoding; e.g. trying to convert 32-bit integer or DSD with foobar2000 will yield a warning that it will not be lossless (also, converted DSD will be many times the size).

The rich set of options means that wavpack encoder and the wvunpack decoder (and wvgain) have to "re-use letters"; while some do the same in the wvunpack and wavpack commands (like -d for delete input file, -y for "yes to all" and -l for "run with low priority" (Windows only)) and others cover the same purpose (like -m and -v), there are letters used for completely unrelated functions in wvunpack as in wvpack (like -b, -c, -r). Options can be concatenated like for example writing -h -x2 -m -y -l as -hx2myl.

Lossless encoding

Dragging and dropping a (supported) file to wavpack.exe (/wvunpack.exe) will encode (/decode) it. This might be the simplest way, and in particular if the source is DSD (or 32-bit integer WAV) which players might decode to PCM floats - but will only apply default options. Dropping a .wv file onto wavpack.exe will recompress it using default settings (a bad deal if it was encoded with, say, -x4 - but default settings also means you will be prompted before it overwrites).

For fine-tuned performance, one might want to use the command-line encoder (or, Windows only, the GUI). The basic encoding usage is wavpack filename.wav (which creates filename.wv) or wavpack infilename.wav outfilename.wv; file extensions can be dropped (like wavpack infilename outfilename will encode infilename.wav to outfilename.wv) if there is no ambiguity. The manual (online, or included as wavpack_doc.html in the distribution) gives an exhaustive reference, and the following is merely a selection. Encoding using -hxm seems a sensible trade-off between compression and CPU load.

  • Compression. WavPack has four compression modes that affect compression as well as encoding and decoding time: fast (-f), default (no switch), high (-h) and very high (-hh). The WavPack manual warns against -hh for portable use due to its CPU-intensive decoding, which in van Beurden's comparison test amounts to twice the CPU load of -f. On top these modes, the optional -x1 to -x6 settings will perform extra compression that does not affect decoding CPU load, but take extra time encoding. -x without number is synonymous to -x1, which is often recommended (in all modes, fast/normal/high/extra high). The official manual calls -x4 to -x6 "extremely slow".

With DSD files, there are only two compression settings, normal (selected by -f or no switch) and high (selected by -h or -hh), and the -x switches are silently ignored.

  • Guarding against errors: Encoding with "-m" will compute an audio MD5 sum (like FLAC does by default) and store it for later verification. The "-v" switch will verify by computing (but not storing!) the MD5 sum upon encoding. (Using the corresponding switches in wvunpack will check without producing output file, however wvunpack also has a faster verification -vv for WavPack 5-encoded files.)
  • --import-id3 will import ID3v2.3 tags (currently not v2.4) present in the source file - typically in Sony DSF files - and convert them to WavPack's preferred APE tags. (This does not affect the chunk stored for restoring the original file.) By default, this is limited to 1 MB; for more, use --allow-huge-tags.
  • -r: remove extra (non-audio) chunks. By default, WavPack will store these in the .wv file for later bit-by-bit restoration of everything, not only the audio. To throw them away - like encoding through most players appear to do - use this setting.
  • -y: "yes" to everything. Use with caution, will overwrite.
  • -d: delete source file afterwards. Again, use with caution.
  • -l will force WavPack to run at low priority (Windows only)
  • -c with -b to select quality: Create correction file for hybrid use.

WavPack can recompress .wv files in place (using a temporary file until done). For example, wavpack -hx4mly wavpackfile.wv will recompress wavpackfile.wv the file in high mode, using -x4 extra processing, with low priority (assuming the Windows platform), write audio MD5 to it - and once done writing a temporary file, overwrite the old wavpackfile.wv.

Decoding

(To be expanded. Basic decoding usage is wvunpack filename.wv , which will decode to precisely the same as the input file provided that information was included upon encoding. Output filename can be given as )


using WavPack (hybrid) & using wvgain

(to be added)

Software support

With Android support and playback through ffmpeg, it might no longer be feasible to maintain a list of applications that can play WavPack files, and the following is most certainly incomplete - as is the list at https://www.wavpack.com/#Software .

Players

  • foobar2000 advanced freeware audio player plays/decodes WavPack out of the box on both Windows, MacOS, Android and iOS (Windows: supports encoding if wavpack.exe is installed, and redistributes the official wavpack.exe through its "Free encoder pack" addon for encoding. With ReplayGain & Cuesheets support.)
  • VLC multiplatform media player
  • VUPlayer (official plugin, supports encoding)
  • NullSoft Winamp (plugin with ReplayGain & Media Library support) and Winamp-compatible players
  • Windows Media Player and other directshow-based players (MPC, TCMP, RadLight) (with CoreWavPack directshow filter)
  • Cog Audio player for MacOS X.
  • XMMS (with Kuniklo's plugin)
  • LAMIP (official plugin)
  • MPXplay for DOS!
  • Aqualung for GNU/Linux
  • Cowon JetAudio Player
  • Konvertor Konvertor
  • XMPlay Plugin required (WavPack input plugin) and (bass library) to play 'wv' files

Frontends

Converters

Note: Several players, like Cowon JetAudio, foobar2000 and VUplayer, can also convert from other formats to WavPack!

Editors

  • Adobe Audition and Cool Edit (filter with 32-bit floats & extra info save support)

CD writers/rippers

Taggers

Other tools

It's worth mentioning the Matroska guys decided to concentrate on WavPack as the lossless compressor of choice for their container. Quite an honor... :-)

  • PKWare's .zip format compresses audio by WavPack since version 6.3.2 (2007). Beware that there is no expectation that other decompression software handles these zip files; even if PKWare co-designed the format and PKZip was the original .zip implementation, their subsequent compression methods are outside the ISO/IEC standardized zip format specification.


External links

  1. http://audiograaf.nl/downloads.html Martijn van Beurden's comprehensive lossless comparison. All comparisons taken from version 4 (WavPack version 4.70.0.)