WavPack es una aplicación y un formato de compresión de audio sin pérdidas, gratuito y de código abierto, que implementa el formato. Es único en la forma en que admite la compresión de audio híbrida junto con la compresión normal, que es similar a cómo funciona FLAC . También admite la compresión de una amplia variedad de formatos sin pérdidas, incluidas varias variantes de PCM y también DSD como se usa en los SACD , junto con su soporte para audio envolvente.
La compresión WavPack puede comprimir (y restaurar sin pérdidas) archivos de audio PCM de punto fijo de 8, 16, 24 y 32 bits y de punto flotante de 32 bits en formato . Formato de archivo WAV . También puede manejar entradas DSD en formato DSDIFF o DSF. [2] También admite transmisiones de sonido envolvente y altas frecuencias de muestreo . Al igual que otros esquemas de compresión sin pérdidas, la tasa de reducción de datos varía según la fuente, pero generalmente está entre el 30% y el 70% para la música popular típica y algo mejor que para la música clásica y otras fuentes con mayor rango dinámico. [3]
WavPack también incorpora un modo "híbrido", que aún proporciona las características de compresión sin pérdidas, pero crea dos archivos: un archivo con pérdidas relativamente pequeño, de alta calidad (.wv) que puede usarse por sí solo; y un archivo de "corrección" (.wvc) que, cuando se combina con el archivo con pérdida, proporciona una restauración completa sin pérdidas. Esto permite el uso conjunto de códecs con y sin pérdida. El algoritmo con pérdida es similar a ADPCM . [4]
El modo híbrido puede manejar datos de punto flotante, pero solo cuando no están presentes valores de "excepción" como infinitos o NaN. No puede manejar DSD porque no existe un algoritmo con pérdida para DSD. [2]
OptimFROG DualStream , MPEG-4 SLS y DTS-HD Master Audio también ofrecen una característica "híbrida" similar .
David Bryant comenzó el desarrollo de WavPack a mediados de 1998 con el lanzamiento de la versión 1.0 (15 de agosto de 1998). Esta primera versión comprimió y descomprimió audio sin pérdidas y ya presentaba una de las mejores relaciones de eficiencia frente a velocidad entre los codificadores sin pérdidas. [5]
Muy poco después del lanzamiento de la versión 1.0, se lanzó la versión 2.0 (2 de septiembre de 1998), que presenta codificación con pérdida (utilizando únicamente la cuantificación del residuo de predicción para la reducción de datos; no se aplicó ningún modelo de enmascaramiento psicoacústico a la transmisión).
En 1999, se lanzó la versión 3.0 (12 de septiembre de 1999), con un nuevo "modo rápido" (aunque con una relación de compresión reducida), compresión de archivos de audio PCM sin formato (sin encabezado) y detección de errores mediante una verificación de redundancia cíclica de 32 bits .
Una característica agregada en las últimas versiones 3.x es el modo "híbrido" donde el codificador genera un archivo con pérdida y un archivo de corrección de modo que ambos puedan descomprimirse nuevamente en una secuencia PCM que tenga la misma calidad que el original. [6]
En WavPack 4, se introduce una nueva estructura de formato de archivo. El autor también publica una "hoja de ruta" con 4.40, que contiene posibles pistas sobre el desarrollo futuro. [7] WavPack 5 introdujo soporte para comprimir DSD.
Algunos programas admiten el formato de forma nativa (como DeaDBeeF , foobar2000 , [8] y Jack! The Knife), mientras que otros requieren complementos. El sitio web oficial de WavPack ofrece complementos para Winamp , Nero Burning ROM , MediaChest 2.1 y varias otras aplicaciones, así como un filtro DirectShow . [9] dBpoweramp CD-Ripper, [10] del autor de foobar2000, así como el propio foobar2000 [11] y Asunder permiten copiar CD de audio directamente a archivos Wavpack.
La compatibilidad con Linux está disponible con un puerto nativo.
FFmpeg tiene un codificador WavPack nativo, que se puede combinar con software como GNU paralelo para usar múltiples núcleos de CPU para transcodificar rápidamente otros formatos sin pérdidas a WavPack, y desde WavPack a cualquier formato que admita FFmpeg, sin necesidad de software adicional. Sin embargo, el codificador de FFMpeg es algo limitado.
A partir de 2023, el codificador WavPack de FFmpeg tiene algunas limitaciones considerables. Solo puede producir flujos de bits de la versión 4, que no admiten la verificación rápida para comprobaciones de integridad de archivos, o más de 16 canales. También descartará fragmentos RIFF y es posible que no se comporte de manera predecible con entradas de 24 bits. También utiliza de forma predeterminada una compresión inferior a la óptima para lograr una codificación más rápida. Debido a la falta de compatibilidad con el modo híbrido, el software de reproducción basado en FFmpeg no considerará el archivo de corrección .wvc si hay uno presente y reproducirá o transcodificará solo la sección con pérdida. (Sin embargo, este no es el modo de operación habitual para WavPack). Como se agregó soporte nativo de Wavpack para Direct Stream Digital en la versión 5 del codificador de referencia, FFmpeg WavPack también se limita a codificar la entrada PCM. [12]
Soporte nativo:
Soporte no nativo:
El sitio web de WavPack también incluye un complemento que permite la compatibilidad con el formato en Roku PhotoBridge HD Archivado el 8 de julio de 2005 en Wayback Machine . [9]
Para garantizar una operación de alta velocidad, WavPack utiliza un predictor que se implementa completamente en matemáticas de números enteros. [14] En su modo "rápido" la predicción es simplemente la extrapolación aritmética de las dos muestras anteriores. Por ejemplo, si las dos muestras anteriores fueran −10 y 20, entonces la predicción sería 50. Para el modo predeterminado, se agrega un factor adaptativo simple para sopesar la influencia de la muestra anterior en la predicción. En el ejemplo anterior, la predicción resultante podría variar entre 20 para ninguna influencia y 50 para una influencia total. Este factor de ponderación se actualiza constantemente en función de las características espectrales cambiantes de los datos de audio.
Luego, la predicción generada se resta de la muestra real que se codificará para generar el valor de error. En modo mono este valor se envía directamente al codificador. Sin embargo, las señales estéreo tienden a tener cierta correlación entre los dos canales que puede explotarse aún más. Por lo tanto, se calculan dos valores de error que representan la diferencia y el promedio de los valores de error izquierdo y derecho. En el modo de funcionamiento "rápido", estos dos nuevos valores simplemente se envían al codificador en lugar de los valores izquierdo y derecho. En el modo predeterminado, el valor de diferencia siempre se envía al codificador junto con uno de los otros tres valores (promedio, izquierda o derecha). Un algoritmo adaptativo determina continuamente cuál de los tres es más eficiente para enviar en función del equilibrio cambiante de los canales.
En lugar de la codificación Rice , se utiliza un codificador de datos especial para WavPack. La codificación Rice es la codificación de bits óptima para este tipo de datos, y el codificador de WavPack es menos eficiente, pero sólo alrededor de 0,15 bits por muestra (o menos del 1% para datos de 16 bits). Sin embargo, existen algunas ventajas a cambio. La primera es que el codificador de WavPack no requiere que los datos se almacenen en un buffer antes de la codificación; en lugar de eso, convierte cada muestra directamente en códigos de bits. Esto es más eficiente desde el punto de vista computacional y es mejor en algunas aplicaciones donde el retraso de codificación es crítico. La segunda ventaja es que se adapta fácilmente a la codificación con pérdida, ya que todos los bits significativos (excepto el "uno" MSB implícito ) se transmiten directamente. De esta forma es posible transmitir únicamente, por ejemplo, los 3 bits más significativos (con signo) de cada muestra. De hecho, es posible transmitir sólo el signo y el MSB implícito para cada muestra con un promedio de sólo 3,65 bits por muestra.
Este esquema de codificación se utiliza para implementar el modo "con pérdida" de WavPack. En el modo "rápido", la salida del descorrelador no adaptativo simplemente se redondea al valor codificable más cercano para el número de bits especificado. En el modo predeterminado se utiliza el descorrelador adaptativo (que reduce el ruido promedio aproximadamente 1 dB ), y tanto la muestra actual como la siguiente se consideran al elegir el mejor de los dos códigos disponibles (lo que reduce el ruido otro 1 dB).
No se utiliza aritmética de punto flotante en la ruta de datos de WavPack porque, según el autor, las operaciones con números enteros son menos susceptibles a variaciones sutiles de chip a chip que podrían corromper la naturaleza sin pérdidas de la compresión (el error de punto flotante del Pentium es un ejemplo). ). Es posible que un compresor sin pérdidas que utilizaba matemáticas de punto flotante pudiera generar una salida diferente cuando se ejecuta en ese Pentium defectuoso. Incluso sin tener en cuenta los errores reales, las matemáticas de punto flotante son lo suficientemente complicadas como para que pueda haber diferencias sutiles entre las implementaciones "correctas" que podrían causar problemas para este tipo de aplicación. [15] Se incluye un código de detección de errores de 32 bits en los flujos generados para mantener la confianza del usuario en la integridad de la compresión de WavPack.
El código fuente de WavPack es portátil y ha sido compilado en varios sistemas operativos Unix y similares a Unix ( Linux , Mac OS X , Solaris , FreeBSD , OpenBSD , NetBSD , Compaq Tru64 , HP-UX ...), así como en Windows , DOS , Palm OS y OpenVMS . Funciona en muchas arquitecturas, incluidas x86 , ARM , PowerPC , AMD64 , IA-64 , SPARC , Alpha , PA-RISC , MIPS y Motorola 68k .
Se desarrolló una versión reducida de WavPack para el procesador de señal digital de la serie TMS320 de Texas Instruments. Esto tenía como objetivo principalmente alentar a los fabricantes a incorporar la compresión (y descompresión) WavPack en las grabadoras de audio con memoria portátil. Esta versión admitía funciones que eran aplicables solo a aplicaciones integradas (compresión de flujo en tiempo real, tasa de compresión seleccionable) y eliminó funciones que solo se aplicaban a sistemas informáticos completos (autoextracción, modos de alta compresión, flotantes de 32 bits). Los DSP de la serie TMS320 son dispositivos enteros nativos y admiten bien WavPack. Se incluyeron algunas características "especiales" del software WavPack completo (capacidad de generar un "archivo" de corrección (flujo), por ejemplo), y otras se excluyeron. El puerto se basó en la versión 4.
La compatibilidad con WavPack se agregó a WinZip a partir de la versión 11.0 beta, lanzada en octubre de 2006. [16] Esta extensión del formato de archivo ZIP fue incluida por PKWARE , los mantenedores del formato, en el archivo de descripción oficial APPNOTE.TXT a partir de la versión 6.3. .2, publicado el 28 de septiembre de 2007. [17]