Como decodificar Base64 para WAV
- Cole o Base64 em Base64 ou data URI. Um prefixo
data:audio/wav;base64,oudata:audio/x-wav;base64,não atrapalha. - Ouça no player. Duração mostra o comprimento em minutos e segundos.
- Clique em Mostrar dump hex para ver os primeiros 512 bytes; a próxima seção explica o que procurar.
- Clique em Baixar arquivo para salvar o .wav.
A decodificação e a reprodução rodam no navegador. A página não pode enviar dados pela rede, exceto os do contador de visitas da Cloudflare, então gravações de voz ficam no seu dispositivo.
Como ler o header WAV no dump hex
Um arquivo WAV começa com um header RIFF de 12 bytes, geralmente seguido logo pelo chunk fmt que descreve o áudio. No dump hex, estas posições mostram o que você tem:
| Offset (hex) | Bytes | Campo | Exemplo: PCM mono de 16 kHz |
|---|---|---|---|
00 | 4 | RIFF | 52 49 46 46 |
08 | 4 | WAVE | 57 41 56 45 |
14 | 2 | Código de formato | 01 00 |
16 | 2 | Canais | 01 00 (mono) |
18 | 4 | Taxa de amostragem | 80 3e 00 00 (16.000) |
22 | 2 | Bits por amostra | 10 00 (16) |
Todos os números são little-endian, então 80 3e 00 00 é 0x3e80, ou seja, 16.000. O código de formato decide se o navegador consegue tocar o arquivo:
| Código de formato | Codec | Toca no Chrome |
|---|---|---|
01 00 | PCM | Sim |
03 00 | Ponto flutuante de 32 bits | Sim |
06 00, 07 00 | A-law, µ-law (telefonia) | Sim |
02 00, 11 00 | Microsoft ADPCM, IMA ADPCM | Não |
31 00 | GSM 6.10 | Não |
fe ff | Extensible: o codec real aparece mais adiante no chunk, geralmente PCM | Sim, se for PCM |
Todo navegador toca PCM, mas o suporte aos outros codecs varia, então teste no navegador que seus ouvintes usam. Quando o navegador não consegue decodificar um arquivo, aparece o aviso “Seu navegador não consegue reproduzir este arquivo WAV.” e Duração mostra n/d. O download continua sendo o arquivo correto, e players de desktop como o VLC lidam com todos esses codecs.
A duração também sai do header: é o tamanho do chunk de dados dividido por taxa de amostragem × canais × bytes por amostra. Dois segundos de áudio mono de 16 kHz e 16 bits são 64.000 bytes de amostras, mais um header de pelo menos 44 bytes.
PCM bruto sem header
APIs de fala e voz muitas vezes devolvem o áudio como amostras PCM de 16 bits puras, a 16 ou 24 kHz, sem header RIFF. Esses bytes não têm assinatura, então a ferramenta informa “Isto não parece ser WAV (detectado: Binary)” e nada vai tocá-los, mesmo salvos com extensão .wav. Embrulhe-os em um header usando a taxa de amostragem, o número de canais e o tamanho da amostra da documentação da API:
import base64, wave
with open("speech.b64") as f:
pcm = base64.b64decode(f.read())
with wave.open("speech.wav", "wb") as w:
w.setnchannels(1)
w.setsampwidth(2)
w.setframerate(24000)
w.writeframes(pcm)
setsampwidth(2) significa amostras de 16 bits. Dois segundos de áudio mono a 24 kHz, 96.000 bytes de PCM, viram um WAV de 96.044 bytes que começa com UklGR e toca aqui e em qualquer player. Se o resultado soar rápido demais, lento demais ou como ruído, a taxa de amostragem ou o formato da amostra está errado; teste as outras taxas comuns ou verifique se a API envia µ-law de 8 bits. Mais em Base64 em Python.
Outros formatos em uma página de WAV
Se os dados estiverem em outro formato de áudio, a ferramenta diz qual: “Isto parece ser MP3, não WAV.” vem com um botão Baixar como .mp3, e o player funciona mesmo assim. Arquivos WAV são grandes, então APIs e apps muitas vezes passam para MP3 ou Opus para economizar espaço, enquanto a documentação continua dizendo WAV. Para a diferença de tamanho e para codificar arquivos WAV, veja WAV para Base64; para todos os formatos de áudio, Base64 para áudio.
Perguntas frequentes
Como converter Base64 em um arquivo WAV?
Cole o Base64 acima e clique em Baixar arquivo; o áudio é salvo como decoded.wav. Ouça antes no player para confirmar que é o que você espera.
Meu Base64 deveria ser WAV, mas a ferramenta diz Binary. Por quê?
Um arquivo WAV começa com RIFF (UklGR em Base64). Sem isso, o mais provável é que você tenha amostras PCM brutas, que muitas APIs de voz devolvem; adicione um header com a taxa de amostragem da documentação da API, como mostrado nesta página.
Por que um WAV toca e outro não?
WAV é um contêiner, e o codec é um número no header. PCM simples toca em qualquer lugar; ADPCM e GSM, comuns em telefonia antiga e sistemas de correio de voz, geralmente não tocam em navegadores. Converta esses arquivos com ffmpeg -i in.wav -c:a pcm_s16le out.wav.