Repáralo ahora
- Suelta el archivo
- La reparación ocurre en local
- Descarga el resultado
Un WAV es uno de los contenedores de audio más sencillos que existen, y por eso mismo un error de dos o cuatro bytes en su cabecera puede hacer que toda una grabación parezca muerta. El archivo es una envoltura RIFF: la etiqueta ASCII RIFF, un tamaño de 4 bytes en little-endian, la etiqueta WAVE y luego una serie de fragmentos (chunks) — cada uno con un nombre de 4 bytes, un tamaño de 4 bytes y un cuerpo. Los dos que importan son fmt (fíjate en el espacio final), que declara la frecuencia de muestreo, el número de canales y la profundidad de bits, y data, que contiene las muestras PCM en bruto. Si el tamaño RIFF del offset 4 o el tamaño del fragmento data es incorrecto — un grabador que se cerró antes de ajustarlos, una transferencia que truncó la cola, un archivo que rebasó el límite de tamaño de 32 bits — el reproductor se fía del número roto e informa de que el archivo está dañado mientras cada muestra sigue ahí. Suelta el .wav arriba y la herramienta busca las marcas reales fmt y data en tu navegador, recalcula los tamaños a partir de lo que hay realmente presente y vuelve a escribir una cabecera canónica limpia alrededor de tu PCM intacto — sin que nada salga nunca de tu dispositivo.
Por qué un WAV aparece dañado cuando el PCM está intacto
Un WAV canónico empieza con un prólogo de 12 bytes — la etiqueta ASCII RIFF, un número de 32 bits en little-endian que debería ser igual al tamaño total del archivo menos 8, y la etiqueta ASCII WAVE — seguido de los fragmentos. Cada fragmento es un nombre de 4 bytes, un tamaño de 4 bytes en little-endian y luego esa cantidad de bytes de cuerpo. El fragmento fmt lleva un cuerpo de 16 bytes: una etiqueta de formato en el offset 0 (1 = PCM, 3 = coma flotante IEEE, 0xFFFE = WAVE_FORMAT_EXTENSIBLE, 0x11 = IMA ADPCM), luego los canales (offset 2), la frecuencia de muestreo (offset 4), la tasa de bytes (offset 8), la alineación de bloque (offset 12) y los bits por muestra (offset 14). El fragmento data es solo su cabecera de 8 bytes seguida de las muestras intercaladas. Todo el "mapa" hacia horas de audio son esas pocas docenas de bytes.
Esa fragilidad es el problema entero. Un grabador que vuelca al disco no conoce la duración final hasta que pulsas detener, así que escribe un marcador de posición en el tamaño RIFF (offset 4) y en el tamaño data — a menudo 0 o 0xFFFFFFFF — y reescribe los valores reales como último paso al cerrar el archivo. Cierra la aplicación de golpe, corta la corriente, extrae la tarjeta o cuelga el sistema antes de ese ajuste final, y el PCM queda escrito por completo pero los tamaños siguen diciendo que el archivo está vacío. Los reproductores creen a la cabecera: Windows Media Player lanza 0xC00D36C4, la libsndfile de Audacity informa File contains data in an unknown format o lo rechaza como que "no es un archivo WAV o AIFF", y ffmpeg imprime Invalid data found when processing input, a veces tras avisar RIFF size ... bigger than resulting file size.
Otras causas cotidianas acaban en el mismo sitio. Una copia o sincronización que se detuvo pronto trunca el cuerpo data de modo que su tamaño declarado supera los bytes presentes. Una grabación que pasó de unos 4 GiB desborda los campos de tamaño RIFF/data de 32 bits, así que los contadores dan la vuelta y la cola parece ilegible. Un fragmento de metadatos suelto escrito antes de fmt , o un desliz en el orden de bytes, puede desviar a un analizador ingenuo de los fragmentos reales. En cada uno de estos casos las muestras están intactas — lo que miente es la contabilidad.
Cómo el navegador reconstruye RIFF/fmt/data sin tocar las muestras
La reparación es una reconstrucción estructural de la cabecera y se ejecuta como TypeScript puro en tu pestaña. Lee el archivo completo (un WAV válido necesita al menos la cabecera mínima de 44 bytes) y luego, en lugar de fiarse del tamaño RIFF del offset 4, busca los bytes ASCII literales fmt en cualquier punto del archivo. Ese es el movimiento clave: un tamaño maestro a cero, con marcador de posición o desbordado no puede detenerla, porque nunca lee ese campo para orientarse. Del cuerpo fmt toma solo los cuatro valores que de verdad necesita — la etiqueta de formato, el número de canales (offset 2), la frecuencia de muestreo (offset 4) y los bits por muestra (offset 14). Si los canales, la frecuencia de muestreo o la profundidad de bits son cero, se detiene con honestidad con un resultado bad-fmt-params en lugar de emitir ruido.
Después recalcula por su cuenta los dos campos derivados — la alineación de bloque como canales × (bits por muestra ÷ 8), y la tasa de bytes como frecuencia de muestreo × alineación de bloque — de modo que una tasa de bytes o una alineación de bloque incorrectas en la cabecera original simplemente se descartan y se sustituyen por la aritmética correcta. A continuación busca la etiqueta data. Si el tamaño data declarado es mayor que los bytes realmente presentes (el caso de truncamiento), conserva todo lo que queda y marca el resultado como truncated-data; si no hay cabecera data en absoluto, trata los bytes inmediatamente posteriores al cuerpo fmt de 16 bytes como PCM y lo marca como no-data-header. Luego el PCM se recorta a un número entero de tramas de muestra para que una última trama escrita a medias no provoque un chasquido.
Por último escribe una cabecera canónica de 44 bytes nueva: RIFF con un tamaño corregido de 36 + longitud del PCM, WAVE, un fragmento fmt limpio de 16 bytes con el formato/canales/frecuencia/bits recuperados y la tasa de bytes y la alineación de bloque recalculadas, luego data con la longitud real del PCM, y tus muestras copiadas tal cual a partir del byte 44. No hay remuestreo ni recodificación — los bytes de audio son exactamente los que grabaste, así que la reparación es sin pérdida. La herramienta informa de la frecuencia de muestreo, el número de canales, la profundidad de bits y la cantidad de bytes de PCM que recuperó, y una clase de daño de header (un éxito limpio) o truncated-data/no-data-header (un resultado parcial). Nada de esto toca la red — puedes abrir la pestaña Red y confirmar que no se envía ni un byte del archivo.
Cuándo no puede reconstruirlo — y qué descarta
Esta reparación alcanza lo que sobrevive; no puede inventar un formato que ya no puede leer. Depende de que el fragmento fmt esté presente: si fmt falta o está sobrescrito, la herramienta se detiene con un resultado no-fmt en lugar de adivinar, porque la frecuencia de muestreo, el número de canales y la profundidad de bits no pueden deducirse del PCM en bruto — una conjetura errónea reproduciría el audio a la velocidad equivocada o como basura intercalada. A diferencia de un vídeo sin átomo moov, aquí no se usa ningún archivo de referencia sano, así que si la cabecera de formato desapareció, el formato desapareció. Un archivo de menos de 44 bytes devuelve too-small, y si al recortar a tramas enteras no queda nada, devuelve no-pcm.
Como emite una cabecera canónica de 44 bytes, los fragmentos auxiliares se descartan: los metadatos de radiodifusión (bext/BWF con código de tiempo e información de origen), los puntos de referencia (cue ), los fragmentos de lista de reproducción y de etiquetas, las etiquetas LIST/INFO (artista, comentario), el fragmento fact y la extensión de WAVE_FORMAT_EXTENSIBLE (el cbSize, los bits válidos, la máscara de canales y el GUID de subformato). El audio vuelve; esos metadatos no. La reconstrucción también supone tramas de muestra de tamaño constante, así que un WAV comprimido cuya alineación de bloque no sea simplemente canales × bytes por muestra — IMA/MS ADPCM, GSM 6.10 — quedará mal descrito por la alineación de bloque recalculada y puede no descodificarse; la herramienta apunta a PCM y coma flotante IEEE, donde esa aritmética es exacta.
Dos límites honestos más. La salida es un RIFF estándar de 32 bits, así que un PCM de más de unos 4 GiB no cabe en el campo de tamaño — esa escala necesita RF64/BW64 o Wave64 (.w64) de Sony, un contenedor distinto. Y las muestras que un disco o una tarjeta defectuosos sobrescribieron con ceros o silencio no están en el disco para recuperarse; recupera primero los bytes en bruto a nivel de almacenamiento y luego reconstruye la cabecera. Lo que recuperas de forma fiable es el PCM intacto, descrito correctamente, en un archivo que un reproductor abrirá de verdad.
Qué puede y qué no puede reparar
Puede reparar
- WAV en los que un grabador se cerró antes de ajustar el tamaño final de RIFF/data (marcador de posición 0 o 0xFFFFFFFF) y que aparecen con duración cero o dañados
- Un fragmento data cuyo tamaño declarado supera los bytes presentes (copia/sincronización truncada) — conserva cada muestra que llegó al disco
- Una tasa de bytes o alineación de bloque incorrecta o sin sentido en el fragmento fmt — ambas se recalculan a partir de los canales, la frecuencia de muestreo y la profundidad de bits
- Una cabecera de fragmento 'data' ausente — los bytes tras el cuerpo fmt se tratan como PCM y se vuelven a envolver
- Un tamaño maestro RIFF basura en el offset 4 — se ignora por completo porque la herramienta busca las marcas 'fmt ' y 'data' en su lugar
- WAV PCM entero estándar y de coma flotante IEEE (mono o multicanal), reconstruidos sin pérdida con las muestras copiadas byte a byte
No puede reparar
- Archivos sin fragmento 'fmt ' — la frecuencia de muestreo, los canales y la profundidad de bits no se pueden adivinar del PCM en bruto, así que se detiene (se informa como 'no-fmt')
- WAV comprimido (IMA/MS ADPCM, GSM) cuya alineación de bloque no es canales × bytes por muestra — la cabecera recalculada lo describiría mal
- Radiodifusión/BWF (bext), puntos de referencia (cue), etiquetas LIST/INFO y la extensión fmt EXTENSIBLE — se descartan al escribir la cabecera canónica de 44 bytes
- PCM de más de ~4 GiB — un tamaño RIFF de 32 bits no puede contenerlo; eso necesita RF64/BW64 o Wave64 (.w64)
- Muestras que un disco o una tarjeta defectuosos sobrescribieron con ceros/silencio — recupera primero los bytes en bruto a nivel de almacenamiento y luego reconstruye
- Un archivo de menos de 44 bytes, o uno donde no sobrevive ninguna trama de muestra entera (se informa como 'too-small' o 'no-pcm')
Si una reparación falla, te decimos por qué (datos que faltan frente a estructura dañada), y nunca se te cobra por una reparación fallida.