A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Referências

WAVE

Seg

9

Jul

2007


07:18

(9 votos, média 4.56 de 5) 


Nível avançado O formato padrão WAVE serve para armazenar dados em arquivos de áudio digital. Baseando-se no formato IFF, a Microsoft criou este formato para adequá-lo a processadores Intel.

O formato WAVE talvez seja o mais avacalhado dos formatos IFF. Como vem sendo usado em todo o planeta há décadas, programadores inexperientes (ou até mesmo inescropulosos) fizeram do padrão uma colcha de retalhos cheia de particularidades e exceções que fogem da proposta inicial. Neste artigo serão abordadas apenas as características originais.

Para entender melhor a base do formato WAVE é imprescindível que você domine o formato IFF da Electronic Arts, principalmente o da classe FORM (não é à toa que este tipo de arquivo também é conhecido como waveform). Todas as informações sobre o IFF estão no tutorial sobre o formato IFF.

info Algumas informações iniciais

Constantes: As explicações deste texto exigem valores em forma decimal e hexadecimal. Os hexadecimais serão notados com o prefixo 0x e os decimais não terão prefixo.

Organização dos dados: Todos os dados são armazenados em bytes (grupos de 8 bits) dispostos na ordem little endian exigida pelos processadores Intel 80x86. Os valores que ocupam vários bytes são armazenados com o byte menos significativo (ou seja, little endian) primeiro. Os bits são os seguintes (b- significa byte menos significativo e b+ significa byte mais significativo):


            7     <-     0
           +--------------+
char:      | b-           |
           +--------------+

            7     <-     0 15    <-     8
inteiro    +--------------+--------------+
curto:     | b-  byte 0   | byte 1  b+   |
           +--------------+--------------+

            7     <-     0 15    <-     8 23    <-    16 31    <-    24
           +--------------+--------------+--------------+--------------+
inteiro    | b-  byte 0   |    byte 1    |    byte 2    | byte 3  b+   |
longo:     +--------------+--------------+--------------+--------------+

Estrutura do arquivo: Um arquivo WAVE é uma coleção de vários tipos diferentes de chunks (nacos). Existe um chunk obrigatório de formato (ID = "fmt ") que contém parâmetros importantes descrevendo a waveform como, por exemplo, sua sample rate (taxa de amostragem). O chunk de dados, que contém os dados de áudio, também é obrigatório. Todos os outros são opcionais. Entre estes, há os que definem cue points (marcadores), parâmetros de lista de instrumentos, etc. Todos estes chunks serão descritos em detalhe mais adiante.

Os aplicativos que usam WAVE precisam ser capazes de ler os dois chunks obrigatórios e podem, seletivamente, ignorar os chunks opcionais. Um programa que faz cópias de arquivos WAVE deve copiar todos os chunks, mesmo os que não conseguir interpretar.

A ordem dos chunks dentro de um arquivo WAVE não importa, com exceção do chunk de Formato - este precisa preceder o chunk de Dados. Alguns programas esperam que o chunk de Formato seja o primeiro logo após o cabeçalho RIFF - são muito rígidos, porque a especificação não exige isto.

O arquivo WAVE mais enxuto é o que contém apenas o cabeçalho e os chunks de Formato e de Dados:

                   +------------------------------+
Cabeçalho          |   ID de grupo = 'RIFF'       |
                   |   tipo riff   = 'WAVE'       |
                   |    ______________________    |
Chunk de formato   |   |                      |   |
                   |   | ID do chunk = 'fmt ' |   |
                   |   |______________________|   |
                   |    ______________________    |
Chunk de dados     |   |                      |   |
  (som)            |   | ID do chunk = 'data' |   |
                   |   |______________________|   |
                   +------------------------------+

Informações adicionais