WavPack
# WavPack

WavPack (.wv/wvc) ist ein freier quelloffener Codec zur verlustfreien und verlustbehafteten Audiodatenkompression, entwickelt von David Bryant / Conifer Software.

Die Referenzimplementierung ist (analog zu zip und unzip) in zwei komplementären Programmen ausgeführt – einem Encoder (WavPack) und einem Decoder (WvUnpack) – sowie einem zusätzlichen Werkzeug für das Hinzufügen von Replay-Gain-Informationen (WvGain).

Ab Version 11 verwendet auch das bekannte Komprimierungsprogramm WinZip WavPack, um RIFF-WAVE-Dateien zu verkleinern.

## Beschreibung

WavPack ermöglicht eine verlustfreie Datenkompression PCM-kodierter (Audio-)Daten ausgehend von ungepackten PCM-Daten im RIFF-WAVE-Format.

### Kompressionsmodi

WavPack hat drei Arbeitsmodi:

* Im (voreingestellten) verlustfreien Modus (englisch lossless) wird eine gepackte Datei erzeugt, die eine bitidentische Rekonstruktion der Ausgangsklangkurve erlaubt. Auch werden (sofern nicht ausdrücklich abgestellt) sämtliche Kopfdaten der ursprünglichen WAVE-Datei gespeichert. Die Packrate schwankt naturgegeben mit der Art des Eingangssignals, bewegt sich jedoch normalerweise zwischen 25 und 50 Prozent und verbessert sich bei klassischer Musik und anderen Signalen mit größerer dynamischer Bandbreite.
* Im verlustbehafteten Modus (englisch lossy) wird eine relativ kleine, qualitativ hochwertige verlustbehaftet komprimierte Datei erzeugt. Anders als beim verlustfreien Modus ist die Dateigröße hier voraussehbar: Es wird hier eine gewünschte (konstante) Bitrate ausgewählt. Der Encoder verwirft dann nach Möglichkeit möglichst unwichtige Signalanteile, bis zum Erreichen der eingestellten Bitrate; wo möglich bleibt er verlustfrei. Das Verfahren arbeitet im Unterschied zum Großteil gängiger verlustbehafteter Codecs ohne die Ausnutzung von Unzulänglichkeiten des menschlichen Gehörs mittels eines psychoakustischen Modelles. Daher sind hierbei höhere Bitraten gebräuchlich: Bei 384 kbps liefert WavPack weitgehend transparente Ergebnisse. Auch in diesem Modus werden (sofern nicht ausdrücklich abgestellt) sämtliche Kopfdaten der ursprünglichen WAVE-Datei gespeichert. Die erzeugten Dateien sind für spätere Transcodierung in andere verlustbehaftete Formate weitaus besser geeignet als Verfahren, die ein psychoakustische Modell nutzen. Ein abschließender Bericht zeigt, ob Verlustfreiheit erreicht wurde bzw. wie viel Abweichungen vom Originalsignal eingegangen werden mussten.
* Der Hybridmodus (bei OptimFROG auch DualStream genannt) kombiniert verlustbehaftete mit verlustfreier Kompression, indem zusätzlich zu einer verlustbehaftet komprimierten Datei eine Korrekturdatei erstellt wird, die dann zusammen die vollständig verlustfreie Rekonstruktion erlauben. Die Packrate ist hier etwas geringer als im rein verlustfreien Modus.

Alle Modi gibt es in fünf unterschiedlichen Komplexitätsstufen. Eine höhere Stufe erhöht den Rechenaufwand beim Packen wie auch beim Entpacken (Symmetrie). Der Encoder stellt einen zuschaltbaren Asymmetrie-Modus bereit, der höhere Packraten ermöglicht, die nur zu Lasten der Kodierzeit gehen, ohne den Dekodieraufwand zu beeinflussen.

## Wichtigste Merkmale

* Schnelles und effizientes Kodieren und Dekodieren
* Quelloffen, freie Software (BSD-artige Lizenz)
* Plattformübergreifende Verfügbarkeit
* Unterstützung von Mono-, Stereo- und Mehrkanal-Signalen
* Unterstützung hoher Auflösungen – sowohl zeitlich als auch der in der Amplitude (Abtastfrequenzen von 6 bis 192 kHz, Abtastpunkte von 8-, 16-, 24- und 32-Bit-Gleitkomma-Werten)
* Verlustfreie, verlustbehaftete, sowie Hybrid-Modi (verlustbehaftete + Korrekturdatei)
* Optionaler Asymmetrie-Modus, d. h. beim Enkodieren wird mehr Rechenaufwand getrieben, dieser führt jedoch zu keinem Mehraufwand beim Dekodieren.
* Flexibles Metadatensystem (APE v2- und ID3-Tags)
* Streaming-Unterstützung
* Fehlertoleranz
* Unterstützung des Replay-Gain-Standards
* Unterstützt lückenfreie Wiedergabe
* Unterstützt eingebettetes Cuesheet
* Unterstützung für RIFF-Chunks
* Unterstützt die Erstellung selbstentpackender Dateien unter Windows
* Eingebettete MD5-Prüfsummen zur schnellen Überprüfung auf Vollständigkeit
* Gute Software-Unterstützung
* Hardware-Unterstützung

## Geschichte

David Bryant begann die Entwicklung von WavPack Mitte 1998 mit der Veröffentlichung von Version 1.0. Sie beherrschte noch nichts weiter als das verlustfreie Packen und Entpacken von Audiodaten – doch schon damals in einem der besten Verhältnisse von Kodierzeit zu Effizienz.

Sehr bald nach der ersten kam Version 2.0, welche verlustbehaftetes Packen unterstützte (quantisiert die Vorhersage-Restwerte zur Datenreduktion – kein psychoakustisches Modell kommt zur Anwendung).

1999 kam Version 3.0 mit neuen Merkmalen wie einem schnelleren (weniger effizienten) Modus, Unterstützung von rohen, kopfdatenlosen PCM-Dateien („raw“/„headerless“) sowie Fehlererkennung durch eine 32 Bit zyklische Redundanzprüfung.

Als weiteres wesentliches Merkmal kam in den späten 3.x-Versionen der Hybrid-Modus hinzu, bei dem zusätzlich zu einer verlustbehaftet kodierten Datei noch eine Korrekturdatei erzeugt wird, die in der Kombination die Rekonstruktion der Originaldaten erlauben.

2004 kam WavPack 4 heraus. Es fügte wichtige Merkmale wie schnelles Suchen, Mehrkanalunterstützung und Unterstützung hoher Bit- und Sampleraten hinzu, die es zu einem der vielfältigsten, modernsten und nach FLAC meistgenutzten freien verlustfreien Audiopackverfahren machen.

Version 4.4 (gegen Ende 2006) bringt unter anderem eine neue Komplexitätsstufe high zwischen dem alten high (jetzt very high) und dem normal-Modus mit einer Packrate nahe dem alten high bei deutlich niedrigerer Komplexität, einen komplett überarbeiteten und wesentlich schnelleren asymmetrischen Modus mit und ermöglicht höhere Packraten im Hybridmodus. Version 4.41 vom 6. Mai 2007 brachte unter anderem 10 bis 30 % höhere Arbeitsgeschwindigkeiten der Referenzprogramme.

## Software-Unterstützung

* Directshow-Filter für Directshow-Programme wie Windows Media Player
* REAPER – vielseitiger Audio/Midi-Sequenzer mit direktem *.wv Import und Rendering
* MrQuestionMan – Audio Identifier
* Burrrn – Direktes Schreiben von Audio-CDs aus mehreren Formaten
* Mp3tag – Universeller Tag-Editor
* Exact Audio Copy – Audio-CD-Einleseprogramm
* VUPlayer – Freies multiformat-Audio-Wiedergabe-/Konvertierprogramm
* Play und Cog – Wiedergabeprogramme für macOS mit WavPack-Unterstützung
* VLC media player – unterstützt WavPack ab Version 0.8.6
* MPXPlay – DOS (MS-DOS, FreeDOS, DR-DOS)-basiertes Wiedergabeprogramm mit WavPack-Unterstützung
* The GodFather – Tagger/Musikmanager
* Wavpack4Wavelab – das erste Dateiein-/ausgabe-Zusatzmodul eines Drittanbieters für den kommerziellen/professionellen Wave-Editor Steinberg Wavelab 5/6
* Easy CD-DA Extractor – Kommerzielles CD-Einlese-, Kodier- und Konvertierprogramm
* macOS: Max und XLD – Kodieren direkt aus verschiedenen verlustfreien Formaten, darunter WavPack, zu AIFF oder FLAC.
* Audacious – Unix Audio-Player

Zusatzmodule für

* NullSofts Winamp mit ReplayGain- und Media-Library-Unterstützung
* foobar2000 – Advanced Audio-Player mit Unterstützung von ReplayGain und Cuesheets (offizielles Zusatzmodul)
* XMMS
* Adobe Audition / CoolEdit mit Unterstützung für 32 Bit Gleitkomma und Speicherung von Zusatzinformationen
* dBpoweramp – Music Converter/Audio-Player/CD-Writer (offizielles Zusatzmodul)
* Apollo Audio-Player mit ReplayGain-Unterstützung
* MusikCube – Freier Audio-Player
* Nero Burning ROM
* LAMIP (offizielles Zusatzmodul) – Modular audio player for Linux and friends
* XMPlay – small free Windows player mit offiziellem Zusatzmodul
* Quintessential Player
* 1by1 und Coolplayer mit dem Winamp-WavPack-Zusatzmodul

## Hardware-Unterstützung

* Für Geräte mit der quelloffenen Rockbox-Firmware wie die Modelle iriver ihp100, ihp120, ihp140, H320, H340 sowie iPod Color/Photo/Nano
* Roku PhotoBridge HD durch Zusatzmodul

## Technologie

Um eine hohe Arbeitsgeschwindigkeit zu gewährleisten, nutzt WavPack eine sehr einfache Voraussage, die ausschließlich auf Ganzzahlmathematik basiert. Im schnellen Modus besteht die Vorhersage nur in der arithmetischen Extrapolation der vorausgehenden zwei Abtastpunkte. Wenn also beispielsweise die vorausgehenden zwei Abtastpunkte die Werte −10 und 20 waren, dann wäre der vorausgesagte Wert 50. Für den voreingestellten Modus kommt ein einfacher Anpassungsfaktor hinzu, um den Einfluss des ersten Punktes auf die Vorhersage zu gewichten. Für obiges Beispiel bedeutete das eine Variation des Ergebnisses von 20 bei keinem Einfluss bis zu 50 bei vollem Einfluss. Dieser Gewichtungsfaktor wird ständig angepasst, abhängig von den Charakteristika des Spektrums des Tonmaterials, daher nennt es sich „adaptiv“ (anpassend).

Der erzeugte Vorhersagewert wird dann vom echten Abtastwert abgezogen, um den Fehlerwert zu erhalten. Im Mono-Modus wird dieser Wert direkt an den Kodierer weitergeleitet, doch Stereosignale neigen zu Abhängigkeiten zwischen den Kanälen, die zusätzlich ausgenutzt werden können. In diesem Falle werden zwei Fehlerwerte ermittelt, deren einer die Differenz und einer den Durchschnitt des linken und rechten Fehlerwertes darstellt. Im schnellen Modus werden diese zwei neuen Werte anstatt des rechten und linken Fehlerwertes einfach an den Kodierer geschickt. Im Vorgabemodus wird immer der Differenzwert zusammen mit einem der restlichen drei Werte, dem Durchschnitt, dem linken oder dem rechten Wert, an den Kodierer gegeben. Ein anpassungsfähiger Algorithmus bestimmt fortlaufend den geeignetsten der drei anhand der veränderlichen Balance zwischen den Kanälen.

Der Entwickler hat für WavPack einen Datenencoder entwickelt, von dem er glaubt, er sei besser als die Rice-Kodierung in zweierlei Bereichen. Es ist unmöglich, effizienter als die Rice-Kodierung zu kodieren, da sie für diesen Datentyp in jedem Fall eine optimale Bitkodierung erreicht (manchmal als Huffman-Code bekannt). Der Kodierer von WavPack bietet etwas weniger Effizienz, doch nur um etwa 0,15 Bits/Abtastwert (bzw. weniger als ein Prozent bei 16-Bit-Daten). Der erste Vorteil des WavPack-Coders ist, dass die Daten nicht vorausgepuffert werden müssen und stattdessen jeder Abtastwert direkt in Bitcodes übertragen werden kann. Das ist in der Berechnung effizienter und in Anwendungsfällen, in denen es auf die Codierverzögerung ankommt, von Belang. Der zweite Vorteil ist, dass es leicht an die verlustbehaftete Kodierung angepasst werden kann, da alle wichtigen Bits (mit Ausnahme des zwangsläufigen „einen“ höchstwertigen Bits) direkt übertragen werden. Somit reicht es, beispielsweise nur die drei wichtigsten Bits jedes Abtastpunktes (mit Vorzeichen) zu übergeben. Tatsächlich ist es sogar möglich, nur das Vorzeichen und das zwangsläufige MSB jedes Punktes zu übertragen mit einem Durchschnitt von nur 3,65 Bits pro Abtastwert.

Dieses Vorgehen kommt zum Einsatz, um den verlustbehafteten Modus von WavPack zu verwirklichen. Im schnellen Modus wird die Ausgabe des nicht-anpassungsfähigen Dekorrelators einfach auf den nächsten kodierbaren Wert gerundet, der sich aus der angegebenen Zahl an Bits ergibt. Im Vorgabemodus wird der anpassungsfähige Dekorrelator benutzt, was die Störgeräusche um etwa ein Dezibel (dB) senkt. Des Weiteren werden sowohl der aktuelle als auch der folgende Abtastpunkt herangezogen um den geeigneteren der beiden zu bestimmen, was die Störgeräusche um ein weiteres dB reduziert.

Der Entwickler hat entschieden, keine Gleitkomma-Arithmetik in WavPacks Prozeduren zu benutzen, da er Ganzzahloperationen für weniger anfällig gegenüber kleinen Abweichungen von Chip zu Chip hält, die die Verlustfreiheit gefährden könnten. Der Pentium Gleitkomma-Fehler ist ein alarmierendes Beispiel dafür. Es besteht die Möglichkeit, dass ein verlustfreier Packer, der Gleitkomma-Operationen nutzt, auf solch einem fehlerhaften Pentium eine abweichende Ausgabe erzeugt. Sogar wenn solche Fehler nicht in Betracht gezogen werden, ist Gleitkomma-Mathematik kompliziert genug, um kleine Unterschiede zwischen „richtigen“ Implementierungen möglich zu machen, die für eine Sorte von Anwendungen Schwierigkeiten verursachen. Um die Zuverlässigkeit noch weiter zu erhöhen, bindet der Kodierer einen 32-Bit-Fehlererkennungs-Code in den erzeugten Datenstrom ein.

Der WavPack-Quellcode ist vor allem wegen der ausschließlichen Verwendung von Ganzzahloperationen überaus gut portierbar. Er wurde für zahlreiche Unix-Varianten kompiliert (Linux, macOS, Solaris, FreeBSD, OpenBSD, NetBSD, Compaq Tru64 UNIX, HP-UX …), wie auch für Windows, DOS, Palm OS und OpenVMS. Er läuft auf Architekturen wie x86, ARM, PowerPC, AMD64, IA-64, Sun SPARC, DEC Alpha, PA-RISC, MIPS, oder Motorola 68k.

