Como restauramos um arquivo .wav danificado

Houve uma experiência interessante quando um arquivo .wav foi restaurado com um amigo. Eu decidi descrever nosso processo doloroso, de repente alguém virá a calhar.


Antecedentes


Há histórias tristes quando o gravador congela / ou dá um erro ao salvar o arquivo. Portanto, quando tentamos abrir um arquivo danificado, obtemos erros como: falha ao decodificar o formato , formato incorreto ou o programa não reconhecia o formato do arquivo .


Tentando descobrir


Como não conseguimos abrir o arquivo, decidimos pesquisar no Google. Queríamos entender como alimentar o arquivo .wav para o player. Encontrei várias dicas: faça o download em Raw (formato bruto), brinque com as configurações etc. Todas essas tentativas falharam.


Decidimos estudar o que é wav, em geral, encontramos as informações sobre os cabeçalhos e sua descrição :


representação esquemática do formato de arquivo wav


Instalamos o editor hexadecimal (wxHexEditor), abrimos e tentamos encontrar pelo menos algo semelhante ao título.


arquivo corrompido sem um cabeçalho


Falha ... não houve.


Decidimos gravar um novo registro com um salvamento bem-sucedido. Abrimos no editor e olhamos para os cabeçalhos.


gravação normal, nenhum título selecionado


Copie os cabeçalhos e cole no nosso arquivo batido (a seguir BF)! Salve freneticamente e execute o arquivo no player, e nada funciona! (Eu, como um homem de verdade, comecei a soluçar no canto da sala)


Antes de criar algo, você precisa quebrar algo.


Decidimos descobrir como quebrar um arquivo normal e obter uma imagem tão feia quanto um arquivo danificado.


Figura: BF colado na parte superior, gravação normal abaixo.


abra dois arquivos no audacity


Descobriu-se que, se você excluir 1 byte no hexRedator em um arquivo normal e salvar, a imagem se tornará semelhante. E se você retornar um byte, mesmo um vazio preenchido com zeros, tudo se tornará normal.


Escrevendo um script bash


Decidimos excluir e salvar o arquivo por byte para obter uma imagem normal, como na figura acima. Criamos 2 arquivos, um apenas os cabeçalhos e o outro um arquivo danificado (depois de apará-lo um pouco menos de um megabyte).


Escrevemos um pequeno script que exclui um byte do arquivo e o une ao cabeçalho e o salva com um número de série.


#!/bin/bash for i in {1..1000} do cat header.wav > "./wav/$i.wav" tail -c +$i raw.wav >> "./wav/$i.wav" done 

Começamos o roteiro e com apreensão, na beira do banquinho, aguardamos o resultado. Infelizmente, tivemos que visualizar esses arquivos manualmente, mas não sabíamos como fazê-lo melhor de outra maneira. Eles jogaram 250 arquivos com audácia e examinaram as faixas:


um monte de arquivos quebrados


Não foi necessário rolar por muito tempo, porque no arquivo 537 encontramos o que estávamos procurando:


aqui está, arquivo 537 com som normal


Continua sendo o caso dos pequenos. Observamos esse arquivo no hash do editor em que ele parou. Abra o BF no editor e exclua o comprimento de bytes desejado após o cabeçalho. Isso é tudo, um arquivo de duas horas é reproduzido normalmente.


PS


Muito provavelmente, isso poderia ser facilitado. Quem sabe como facilitar o trabalho ou, de alguma forma, otimizá-lo, escreva, acrescentarei a este "guia".


Obrigado a todos pela atenção.

Source: https://habr.com/ru/post/pt433178/


All Articles