Informática Numaboa - Referências
WAVE
Seg 9 Jul 2007 07:18 |
- Detalhes
- Categoria: Formatos padrão
- Atualização: Terça, 21 Abril 2009 20:17
- Autor: vovó Vicki
- Acessos: 10633
Sample Point e Sample Frame
Para interpretar corretamente um arquivo WAVE, os conceitos de sample point (ponto de amostragem) e de sample frame (grupo de amostragem) são essenciais.
Um ponto de amostragem é um valor que representa uma amostra de som num determinado momento. Para waveforms com resolução maior do que 8 bits, cada ponto de amostragem é armazenado linearmente como um valor complemento de dois que pode ter de 9 a 32 bits, de acordo com o que foi determinado pelo campo BitsPerSample (bits por amostra) no chunk de Formato. Por exemplo, cada ponto de amostragem numa waveform de 16 bits será um word (valor de 16 bits ou dois bytes) onde 32767 (0x7FFF) é o valor mais alto e -32768 (0x8000) o mais baixo. Para waveforms de 8 bits (ou menos), cada ponto de amostragem é um byte linear sem sinal onde 255 é o valor mais alto e 0 o mais baixo. Esta discrepância de valores com e sem sinal é uma das lambanças feitas pela Microsoft na época em que criou este formato. Mas deixa pra lá, é apenas uma numa imensa coleção de bobagens
Como as operações de leitura e escrita da maioria das CPUs usa bytes (8 bits), decidiu-se que um ponto de amostragem, quando é colocado num arquivo WAVE, deve ser ajustado para um tamanho múltiplo de 8 porque isto facilita colocar o WAVE na área de memória. Se o seu conversor analógico-digital (conhecido como ADC, analog-to-digital converter) produzir pontos de amostragem que variam de 1 a 8 bits, os pontos de amostragem devem ser armazenados como bytes de 8 bits, isto é, um char sem sinal. Se o ADC produzir pontos de amostragem de 9 a 16 bits, estes devem ser armazenados como words de 16 bits, isto é, um inteiro curto com sinal. Se o ADC produzir um ponto de amostragem que variam de 17 a 24 bits, os pontos de amostragem devem ser armazenados usando-se três bytes. Finalmente, se o ADC produzir pontos de amostragem de 25 a 32 bits, estes devem ser armazenados como double words de 32 bits, isto é, um inteiro longo com sinal. E por aí vai...
Além disto, os bits precisam ser alinhados à esquerda e os bits restantes, à direita, precisam ser preenchidos com zeros. Imagine como exemplo um ponto de amostragem de 12 bits. Como explicado acima, este ponto de amostragem precisa ser ajustado para 16 bits. Os 12 bits do ponto precisam ser alinhados à esquerda, ou seja, vão ocupar os bits 4 até 15. Os bits de 0 a 3 precisam ser zerados. Veja este exemplo abaixo, supondo que o valor binário seja 101000010111:
___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ | | | | | | | | | | | | | | | | | | 1 0 1 0 0 0 0 1 0 1 1 1 0 0 0 0 | |___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___| <---------------------------------------------> <-------------> Ponto de amostragem de 12 bits alinhado à esq. Ajuste com zeros
Mas não podemos esquecer que o formato WAVE usa o little endian da Intel. Na verdade, a disposição real dos bits é a seguinte:
___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ | | | | | | | | | | | | | | | | | | 0 1 1 1 0 0 0 0 | 1 0 1 0 0 0 0 1 | |___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|
Para áudio multicanal, os pontos de amostragem de cada um dos canais são entrelaçados. Vamos tomar como exemplo uma waveform de 2 canais (estéreo). Ao invés de inicialmente armazenar todos os pontos de amostragem do canal esquerdo e, depois, todos os pontos de amostragem do canal direito, os pontos são alternados: primeiro ponto do canal esquerdo, primeiro ponto do canal direito, segundo ponto do canal esquerdo, segundo ponto do canal direito, etc. Isto é chamado de entrelaçamento de dados. Nesta forma, todos os pontos dos dois canais são contíguos e podem ser enviados (quase que) simultaneamente para um conversor digital-analógico (DAC - digital-to-analog converter) para serem reproduzidos.
Os pontos de amostragem que devem ser "tocados" (enviados para um DAC) simultaneamente são chamados de grupo de amostragem (sample frame). No exemplo da waveform em estéreo, cada par de pontos de amostragem é um frame de amostragem.
frame 0 frame 1 frame N _____ _____ _____ _____ _____ _____ | c 1 | c 2 | c 1 | c 2 | . . . | c 1 | c 2 | |_____|_____|_____|_____| |_____|_____|
Numa waveform mono, um frame de amostragem é constituído apenas por um ponto de amostragem porque não há nada que possa ser entrelaçado. Para waveforms multicanal, deve-se seguir a seguinte convenção:
canais 1 2 __________ __________ | | | estéreo | esquerdo | direito | |__________|__________| 1 2 3 __________ __________ __________ | | | | 3 canais | esquerdo | direito | central | |__________|__________|__________| 1 2 3 4 __________ __________ __________ __________ | esquerdo | direito | esquerdo | direito | quad | frontal | frontal | traseiro | traseiro | |__________|__________|__________|__________| 1 2 3 4 __________ __________ __________ __________ | | | | | 4 canais | esquerdo | central | direito | surround | |__________|__________|__________|__________| 1 2 3 4 5 6 __________ __________ __________ __________ __________ __________ | esquerdo | | | direito | | | 6 canais | central | esquerdo | central | central | direito | surround | |__________|__________|__________|__________|__________|__________|
Os pontos de amostragem dentro de um frame de amostragem estão sempre juntos - não existem bytes não usados entre eles. Da mesma forma, os frames de amostragem também não possuem qualquer byte de ajuste.
Estas disposições do formato wave se referem apenas a chunks não comprimidos. Existem algumas técnicas para armazenar dados compactados que, obviamente, precisam ser descomprimidos para voltarem ao formato original quando se quer ouvir o som.