Como converter WAV para Base64
- Arraste um arquivo
.wavpara a caixa ou escolha-o no seletor de arquivos. - Ouça na prévia.
- Saída como está em Data URI. Para APIs, escolha Base64 puro, ou JSON para incluir o nome, o tipo MIME e o tamanho.
- Clique em Copiar saída. Gravações de mais de alguns segundos viram strings longas; Salvar como .txt é mais fácil de manusear.
Qual o tamanho de um WAV em Base64
PCM sem compressão é fácil de calcular: taxa de amostragem × bytes por amostra × canais dá os bytes por segundo. Some o cabeçalho padrão de 44 bytes e multiplique por 4/3 para o Base64:
| Formato | 1 segundo | 10 segundos | 1 minuto |
|---|---|---|---|
| 8 kHz, mono, 16 bits (telefone) | 21.392 caracteres | 213.392 caracteres | 1.280.060 caracteres |
| 16 kHz, mono, 16 bits (voz) | 42.728 caracteres | 426.728 caracteres | 2.560.060 caracteres |
| 44,1 kHz, mono, 16 bits | 117.660 caracteres | 1.176.060 caracteres | 7.056.060 caracteres |
| 44,1 kHz, estéreo, 16 bits (CD) | 235.260 caracteres | 2.352.060 caracteres | 14.112.060 caracteres |
| 48 kHz, estéreo, 16 bits | 256.060 caracteres | 2.560.060 caracteres | 15.360.060 caracteres |
Arquivos gravados por alguns apps têm chunks extras com metadados, então os tamanhos reais podem ser um pouco maiores.
WAV e APIs de voz
Serviços de reconhecimento de voz costumam aceitar PCM de 16 bits sem compressão porque ele decodifica sem perdas e não precisa de codec. Quando recebem o áudio inline em uma requisição JSON, ele vai em Base64, junto com campos que descrevem a codificação, a taxa de amostragem e o número de canais. Esses valores precisam bater com o arquivo. Uma gravação estéreo de 44,1 kHz declarada como mono de 16 kHz gera transcrições sem sentido ou um erro.
Modelos de voz normalmente trabalham com 16 kHz mono ou menos. Converter uma gravação estéreo com qualidade de CD para 16 kHz mono antes de codificar deixa a requisição cerca de cinco vezes e meia menor, geralmente sem prejudicar o reconhecimento. Faça isso em um editor de áudio ou com um conversor de linha de comando; esta página codifica o arquivo como ele está.
Se o limite inline ainda for pequeno demais para uma gravação longa, esses serviços normalmente também aceitam um link para um arquivo armazenado, o que dispensa o Base64 por completo.
Gerar um WAV e codificá-lo em Python
A biblioteca padrão consegue escrever um WAV e codificá-lo, o que é útil para dados de teste. Isto gera um bipe de 200 ms em 880 Hz:
import base64, io, math, struct, wave
rate = 8000
samples = b"".join(
struct.pack("<h", int(12000 * math.sin(2 * math.pi * 880 * i / rate)))
for i in range(rate // 5)
)
buf = io.BytesIO()
with wave.open(buf, "wb") as w:
w.setnchannels(1)
w.setsampwidth(2)
w.setframerate(rate)
w.writeframes(samples)
uri = "data:audio/wav;base64," + base64.b64encode(buf.getvalue()).decode()
O arquivo tem 3.244 bytes e o data URI 4.350 caracteres, começando com data:audio/wav;base64,UklGRqQMAABXQVZF. Mais sobre arquivos e streams em Base64 em Python.
O caminho de volta
Base64 para WAV toca uma string WAV em Base64 e a salva como arquivo. Para reduzir áudio para a web, use um formato compactado; veja MP3 para Base64 para comparações de tamanho.
Perguntas frequentes
Por que o Base64 do meu WAV é tão longo?
O WAV normalmente guarda amostras PCM brutas, sem compressão. Um segundo de estéreo com qualidade de CD são 176.400 bytes de áudio, ou 235.260 caracteres de Base64 incluindo o cabeçalho. Converter para mono e uma taxa de amostragem menor reduz isso bastante.
É audio/wav ou audio/x-wav?
Os dois são usados e os navegadores tocam qualquer um. audio/wav é a escolha comum; alguns sistemas mais antigos enviam audio/x-wav ou audio/wave. A ferramenta usa o tipo que o seu navegador informa.
O que significam os primeiros caracteres de um WAV em Base64?
UklGR é o cabeçalho do contêiner RIFF, compartilhado com WebP e AVI. A tag WAVE aparece como XQVZF nos caracteres 12 a 16, e o Zm10 logo depois é o chunk fmt .