Cómo decodificar Base64 a WAV
- Pega el Base64 en Base64 o data URI. Un prefijo
data:audio/wav;base64,odata:audio/x-wav;base64,no es problema. - Reprodúcelo en el reproductor. Duración muestra la longitud en minutos y segundos.
- Pulsa Mostrar volcado hex para ver los primeros 512 bytes; la sección siguiente explica qué buscar.
- Pulsa Descargar archivo para guardar el .wav.
La decodificación y la reproducción se hacen en el navegador. La página no puede enviar datos por la red salvo los del contador de visitas de Cloudflare, así que las grabaciones de voz se quedan en tu dispositivo.
Cómo leer la cabecera WAV en el volcado hex
Un archivo WAV empieza con una cabecera RIFF de 12 bytes, normalmente seguida directamente del chunk fmt que describe el audio. En el volcado hex, estas posiciones te dicen qué tienes:
| Desplazamiento (hex) | Bytes | Campo | Ejemplo: PCM mono a 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 | Canales | 01 00 (mono) |
18 | 4 | Frecuencia de muestreo | 80 3e 00 00 (16 000) |
22 | 2 | Bits por muestra | 10 00 (16) |
Todos los números son little-endian, así que 80 3e 00 00 es 0x3e80, es decir, 16 000. El código de formato decide si el navegador puede reproducir el archivo:
| Código de formato | Códec | Se reproduce en Chrome |
|---|---|---|
01 00 | PCM | Sí |
03 00 | Coma flotante de 32 bits | Sí |
06 00, 07 00 | A-law, µ-law (telefonía) | Sí |
02 00, 11 00 | Microsoft ADPCM, IMA ADPCM | No |
31 00 | GSM 6.10 | No |
fe ff | Extensible: el códec real se indica más adelante en el chunk, normalmente PCM | Sí, si es PCM |
Todos los navegadores reproducen PCM, pero el soporte de los demás códecs varía, así que prueba en el navegador que usa tu público. Cuando el navegador no puede decodificar un archivo, aparece el aviso “Tu navegador no puede reproducir este archivo WAV.” y Duración muestra n/a. La descarga sigue siendo el archivo correcto, y reproductores de escritorio como VLC manejan todos estos códecs.
La duración también se deduce de la cabecera: es el tamaño del chunk de datos dividido entre frecuencia de muestreo × canales × bytes por muestra. Dos segundos de audio mono de 16 bits a 16 kHz son 64 000 bytes de muestras más una cabecera de al menos 44 bytes.
PCM sin procesar, sin cabecera
Las API de voz suelen devolver el audio como muestras PCM de 16 bits a 16 o 24 kHz, sin cabecera RIFF. Esos bytes no llevan firma, así que la herramienta informa “Esto no parece WAV (detectado: Binary)” y nada los reproducirá, aunque los guardes con extensión .wav. Envuélvelos en una cabecera con la frecuencia de muestreo, el número de canales y el tamaño de muestra que indique la documentación de la 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 muestras de 16 bits. Dos segundos de audio mono a 24 kHz, 96 000 bytes de PCM, se convierten en un WAV de 96 044 bytes que empieza por UklGR y se reproduce aquí y en cualquier reproductor. Si el resultado suena demasiado rápido, demasiado lento o como ruido, la frecuencia de muestreo o el formato de muestra son incorrectos; prueba las otras frecuencias habituales o comprueba si la API envía µ-law de 8 bits. Más en Base64 en Python.
Otros formatos en una página de WAV
Si los datos están en otro formato de audio, la herramienta lo nombra: “Esto parece MP3, no WAV.” viene con un botón Descargar como .mp3, y el reproductor funciona igualmente. Los archivos WAV son grandes, así que las API y las aplicaciones suelen pasarse a MP3 u Opus para ahorrar espacio, mientras la documentación sigue diciendo WAV. Para la diferencia de tamaño y para codificar archivos WAV, consulta WAV a Base64; para todos los formatos de audio, Base64 a audio.
Preguntas frecuentes
¿Cómo convierto Base64 en un archivo WAV?
Pega el Base64 arriba y pulsa Descargar archivo; el audio se guarda como decoded.wav. Reprodúcelo antes en el reproductor para comprobar que es lo que esperas.
Mi Base64 debería ser un WAV, pero la herramienta dice Binary. ¿Por qué?
Un archivo WAV empieza por RIFF (UklGR en Base64). Si falta, lo más probable es que tengas muestras PCM sin procesar, que es lo que devuelven muchas API de voz; añade una cabecera con la frecuencia de muestreo que indique la documentación de la API, como se muestra en esta página.
¿Por qué un WAV se reproduce y otro no?
WAV es un contenedor, y el códec es un número de su cabecera. El PCM simple funciona en todas partes; ADPCM y GSM, habituales en telefonía antigua y buzones de voz, no suelen reproducirse en los navegadores. Conviértelos con ffmpeg -i in.wav -c:a pcm_s16le out.wav.