Cómo convertir WAV a Base64
- Suelta un archivo
.waven el recuadro o elígelo con el selector de archivos. - Escúchalo en la vista previa.
- Salida como está en Data URI. Para API, elige Base64 simple, o JSON para incluir el nombre, el tipo MIME y el tamaño.
- Pulsa Copiar salida. Las grabaciones de más de unos segundos dan cadenas largas; Guardar como .txt es más cómodo de manejar.
Cuánto ocupa un WAV en Base64
El PCM sin comprimir es fácil de calcular: frecuencia de muestreo × bytes por muestra × canales da los bytes por segundo. Suma el encabezado estándar de 44 bytes y multiplica por 4/3 para Base64:
| Formato | 1 segundo | 10 segundos | 1 minuto |
|---|---|---|---|
| 8 kHz, mono, 16 bits (teléfono) | 21,392 chars | 213,392 chars | 1,280,060 chars |
| 16 kHz, mono, 16 bits (voz) | 42,728 chars | 426,728 chars | 2,560,060 chars |
| 44,1 kHz, mono, 16 bits | 117,660 chars | 1,176,060 chars | 7,056,060 chars |
| 44,1 kHz, estéreo, 16 bits (CD) | 235,260 chars | 2,352,060 chars | 14,112,060 chars |
| 48 kHz, estéreo, 16 bits | 256,060 chars | 2,560,060 chars | 15,360,060 chars |
Los archivos grabados con algunas aplicaciones tienen chunks extra con metadatos, así que los tamaños reales pueden ser algo mayores.
WAV y las API de voz
Los servicios de reconocimiento de voz suelen aceptar PCM de 16 bits sin comprimir, porque se decodifica sin pérdidas y no necesita códec. Cuando reciben el audio en línea dentro de una petición JSON, va en Base64, junto con campos que describen la codificación, la frecuencia de muestreo y el número de canales. Esos valores deben coincidir con el archivo. Una grabación estéreo a 44,1 kHz declarada como mono a 16 kHz da transcripciones sin sentido o un error.
Los modelos de voz suelen trabajar a 16 kHz mono o menos. Convertir una grabación estéreo con calidad de CD a 16 kHz mono antes de codificarla hace la petición unas cinco veces y media más pequeña, normalmente sin perjudicar el reconocimiento. Hazlo en un editor de audio o con un conversor de línea de comandos; esta página codifica el archivo tal cual.
Si el límite en línea sigue siendo demasiado pequeño para una grabación larga, estos servicios suelen aceptar también un enlace a un archivo almacenado, lo que evita Base64 por completo.
Generar un WAV y codificarlo en Python
La biblioteca estándar puede escribir un WAV y codificarlo, algo útil para datos de prueba. Esto genera un pitido de 200 ms a 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()
El archivo tiene 3.244 bytes y la data URI 4.350 caracteres, empezando por data:audio/wav;base64,UklGRqQMAABXQVZF. Hay más sobre archivos y streams en Base64 en Python.
El camino de vuelta
Base64 a WAV reproduce una cadena WAV en Base64 y la guarda como archivo. Para reducir el audio para la web, usa un formato comprimido; consulta MP3 a Base64 para comparar tamaños.
Preguntas frecuentes
¿Por qué el Base64 de mi WAV es tan largo?
WAV suele guardar muestras PCM en bruto sin compresión. Un segundo de estéreo con calidad de CD son 176.400 bytes de audio, o 235.260 caracteres de Base64 incluido el encabezado. Convertirlo a mono y a una frecuencia de muestreo más baja lo reduce mucho.
¿Es audio/wav o audio/x-wav?
Se usan los dos y los navegadores reproducen cualquiera. audio/wav es la opción habitual; algunos sistemas antiguos envían audio/x-wav o audio/wave. La herramienta usa el tipo que indica tu navegador.
¿Qué significan los primeros caracteres de un WAV en Base64?
UklGR es el encabezado del contenedor RIFF, compartido con WebP y AVI. La etiqueta WAVE aparece como XQVZF en los caracteres 12 a 16, y Zm10 justo después es el chunk fmt .