# Wavpack

Wavpack é um formato de compressão de áudio multiplataforma de código aberto que pode oferecer tanto codificação sem perda de dados (lossless) ou um único modo híbrido (entre os CODECs lossless), com perdas (lossy) e sem perdas, simultaneamente.

## Características

Através de um compressor de áudio de ponto fixo, Wavpack é capaz de converter para seu formato de áudio (arquivos com extensão.WV), arquivos de áudio no formato.WAV com profundidade de bits de 8, 16, 24, 32 bits e 32 bits de ponto flutuante.
Apresenta também suporte a áudio multicanal (surround sound) - tanto para reprodução local como streaming; bem como taxas de amostragem mais altas que as de um típico CD de áudio(44,1KHz), tais como 48, 96 ou 192KHz.
Outras importantes características incluem verificação de erro (hashes MD5), suporte a CUE sheets (um único arquivo de áudio com intervalos entre faixas e tempos idênticos ao do CD que o originou); criação de arquivos.EXE auto-extratores, na plataforma Windows; Replay Gain; etiquetas (metatags) ID3 e APE

### Codificação híbrida: lossy (com perdas) e lossless (sem perdas) simultaneamente

Uma de suas características mais relevantes é a codificação híbrida, isto é, ele é capaz de criar tanto um único arquivo.WV lossless, a exemplo de CODECs como o FLAC ou Monkey Audio, bem como o formato híbrido, que cria ao mesmo tempo, um arquivo.WV com perdas (lossy) com alta taxa de compressão (a exemplo de MP3 e AAC), juntamente com um arquivo de correção.WVC, para futura decodificação, caso desejado, para o arquivo WAV original, sem perdas. (desde que ambos os arquivos lossy e de correção sejam decodificados simultaneamente). Finalmente, se o arquivo com perdas lossy for reproduzido por software compatível, com o de correção.wvc presente no mesmo diretório Windows, Mac ou Linux, o áudio será reconstituído e reproduzido sem perdas - o mesmo resultado que seria obtido reproduzindo-se um arquivo.wv sem perdas não gerado no modo híbrido.;
É importante ressaltar que o arquivo lossy resultante por não se basear na psicoacústica, não apresenta os mesmos artefatos típicos desse tipo de codificação, como os que ocorrem a arquivos MP3 com taxas de bits insuficientes, mas sim, conforme elabora seu próprio criador no fórum Hydrogen Audio, ruidos de quantificação.

#### Exemplo de uso

Um uso típico para a codificação híbrida, seria o de se transferir apenas os arquivos lossy a um equipamento de hardware com suporte ao firmware Rockbox (economizando-se assim, espaço em disco) e, guardar os arquivos de correção.WVC, como backup, em um disco rígido ou mídia ótica de maior capacidade, para prováveis conversões futuras ao arquivo.WAV original, caso necessárias.

## Taxa de compressão

Típica de codificadores de áudio que não geram perdas (lossless), varia entre 30% e 70% para músicas populares e afins (com vocais); podendo atingir taxas de compressão mais altas para música clássica e instrumental bem como em outras fontes de áudio com maior variação dinâmica.

## História

Criado por David Bryant em meados de 1998, somente em 2003 o CODEC Wavpack passou a oferecer o modo híbrido de codificação.
De acordo com o site oficial, seu código-fonte sofreu mudanças significantes a partir da versão 4, para melhorias em seu desempenho e funcionalidade.

## Detalhes técnicos

Para garantir alta velocidade de operação, WavPack usa um simples preditor de ponto fixo.
Há também diferenças significativas entre o modo "fast" (maior compressão em lossless ou codificação mais rápida em lossy) e "default", como se pode ver na descrição dos modos de operação do codificador:

### Codificação lossless

No modo "fast", a predição previamente mencionada, é uma simples extrapolação das duas amostras anteriores. Por exemplo, se as duas amostras anteriores forem -10 e 20, a predição será então 50.
No modo "default" um quantificador adaptativo entra em cena, influenciando assim a predição anterior, que agora variaria entre 20 (nenhuma influência) e 50 (influência total). O quantificador é denominado "adaptativo" devido à sua influência variar constantemente, conforme mudanças nas características espectrais do áudio.
A predição obtida é então subtraída da amostra de áudio original sendo codificada, gerando assim um valor de erro. Em sinais monoaurais, esse valor é envidado diretamente ao codificador. Já para sinais estéreo, a correlação entre canais é explorada mais a fundo, e ambos os códigos de erro gerados são calculados de uma maneira que representem tanto as diferenças como as médias entre os códigos de erro dos canais direito e esquerdo. No modo rápido, estes dois valores são simplesmente enviados para o codificador, ao invés dos valores dos canais direito e esquerdo. No modo "default", a diferença é enviada para o codificador juntamente com um dos outros três valores (média, esquerdo ou direito). Um algoritmo adaptativo, baseado na mudança de equilíbrio dos canais, é que determina qual valor dos três é o mais eficiente a ser enviado.

### Vantagens em relação a Huffman e Rice Coding

Apesar de não ser tão eficiente como Rice coding ou Huffman code, já que o codificador WavPack é ligeiramente mais lento, com cerca de 0,15 bits/amostra (menos de 1% para áudio de 16 bits); David Bryant, seu criador, afirma que o codificador Wavpack possui duas vantagens:
A primeira é que Wavpack não requer que os dados sejam lidos (buffered) em antecipação ao codificado; ele faz a conversão diretamente para bitcodes. Isso acarreta maior eficiência em situações onde atraso na codificação seria crítico.
A segunda vantagem é que ele é facilmente adaptável à codificação com perdas, já que todos os bits mais significativos (MSB) são transmitidos diretamente. Desse modo é possível apenas transmitir, por exemplo, os 3 bits mais significativos de cada amostra. Na verdade é possível transmitir apenas o sinal e MSB para cada amostra com um média de apenas 3,65 bits/amostra.

### Codificação lossy

Esse é o esquema de codificação usado para implantar a lossy. No modo "fast" o valor resultante da operação acima é simplesmente arredondado de acordo com o número de bits. No modo "default" o logarítmo adaptativo é usado, reduzindo assim o valor médio do ruído de fundo em 1 dB e ainda tanto a amostra atual como a próxima são consideradas ao se escolher o melhor valor (o que reduz o ruído em outro 1 dB).
Bryant decidiu também não fazer uso de valores de ponto flutuante na análise de dados do Wavpack, por acreditar que as operações inteiras são menos suscetíveis às inerentes variações entre microprocessadores e que poderia a vir corromper a natureza lossless da compressão de dados - o bug de ponto flutuante do Pentium sendo um exemplo típico disso, já que erros poderiam resultar de compressores lossless rodando nessas máquinas.
Mesmo se desconsiderarmos esse bug, a própria complexidade inerente à aritmética de ponto flutuante poderia gerar diferenças entre implementações "corretas" - o bastante para causar dificuldades nesse tipo de aplicação. De forma a assegurar maior confiança na integridade do Wavpack, o codificador inclui na codificação final, detecção de erros de 32 bits.

### Portabilidade

O código-fonte do Wavpack é extremamente portável; tendo sido compilado em vários sistemas operacionais Unix (Linux, Mac OS X, Solaris, FreeBSD, OpenBSD, NetBSD, Compaq Tru64, HP-UX...) bem como Windows, DOS e OpenVMS. Funcionando em arquiteturas tão diversas como x86, ARM, PowerPC, SPARC, DEC Alpha, PA-RISC, MIPS, Motorola 68k...

## Suporte
### Software
#### Tocadores

* Winamp, foobar2000, Windows Media Player, JetAudio Basic, VUPlayer e XMplay para Windows;
* Aqualung, DeadBeef, Lamip e XMMS para Linux e outros sistemas baseados no Unix;
* Cogpara MacOS X;
* MPXplaypara DOS;
* VLC (multiplataforma).

#### Conversores

* Vários dos tocadores citados acima (Deadbeef, foobar200, JetAudio, etc.) também fazerm conversão de e para Wavpack.
* dBpowerAmp

#### Compactador de arquivos Winzip

Desde a versão 11.0, lançada em outubro de 2006, o célebre compactador de arquivos para a plataforma Windows inclui o código do Wavpack para compactação mais eficiente de arquivos WAV.

### Hardware

Apesar do Cowon A3 ter sido o único tocador de MP3 a oferecer suporte nativo a Wavpack, ainda é possível reproduzir arquivos.WV (lossless ou lossy), de maneira estável através da instalação do firmware Rockbox nos seguintes tocadores de mídia:
* Apple iPods: versão 1g até 5.5g, iPod Mini, iPod Nano 1g
* Archos Jukebox 5000, 6000, Studio, Recorder, FM Recorder, Recorder V2 e Ondio
* Cowon iAudio X5, X5V, X5L, M5, M5L, M3 e M3L
* iriver séries iHP100, H100, H300 e séries H10
* MPIO HD300
* Olympus M Robe 100
* Packard Bell Vibe 500
* SanDisk Sansa séries: c200, e200 and e200R. Sansas Fuze, Clip, Clip+ and Clip Zip
* Toshiba Gigabeat - séries X e F
* Centenas de dispositivos (tablets, smart phones, etc.) com sistema operacionais Android, iOS, etc:
** JetAudio, Kamerton, foobar2000 para Android;
** JetAudio, para iOS;
** foobar2000 mobile (mutiplataforma) - ainda em desenvolvimento em meados de 2015.