Как Мы Восстановили Поврежденный Wav-Файл

У меня был интересный опыт, когда мы с другом восстанавливали файл .

wav. Решил описать наш мучительный процесс, вдруг кому-то пригодится.



Фон

Бывают печальные истории, когда регистратор зависает/или выдает ошибку при сохранении файла.

Следовательно, когда мы пытаемся открыть поврежденный файл, мы получаем такие ошибки, как: формат не может быть декодирован, формат неверен или программа не распознала формат файла.



Мы пытаемся это выяснить

Поскольку нам не удалось открыть файл, мы решили загуглить его.

Мы хотели понять, как передать плееру файл .

wav. Мы нашли кучу советов: скачайте в Raw (формате raw), поиграйтесь с настройками и т. д. Все эти попытки не увенчались успехом.

Мы решили изучить, что такое wav вообще, нашли информацию о заголовках и их описание :

Как мы восстановили поврежденный WAV-файл

Устанавливаем шестнадцатеричный редактор (wxHexEditor), открываем его и пытаемся найти хоть что-то похожее на заголовок.



Как мы восстановили поврежденный WAV-файл

Неудача.

их не было.

Мы решили записать новую запись при успешном сохранении.

Откройте его в редакторе и посмотрите заголовки.



Как мы восстановили поврежденный WAV-файл

Копируем заголовки и вставляем их в наш битый файл (далее БФ)! Судорожно сохраняем и запускаем файл в плеере, и ничего не получается! (Я, как настоящий мужчина, начал плакать в углу комнаты)

Прежде чем что-то построить, нужно что-то сломать.

Мы решили разобраться, как можно сломать обычный файл и получить такую некрасивую картину, как испорченный файл.

Рисунок: сверху приклеенный БФ, снизу обычная запись.



Как мы восстановили поврежденный WAV-файл

Оказалось, что если в HexEditor удалить 1 байт в обычном файле и сохранить его, то картина становится аналогичной.

А если вернуть байт, пусть даже пустой, заполненный нулями, то все становится нормально.



Написание bash-скрипта

Мы решили удалить и сохранить файл побайтно, чтобы получить нормальную картинку, как на рисунке выше.

Мы создали 2 файла, один только с заголовками, а другой поврежденный (после обрезки до размера чуть меньше мегабайта).

Мы написали небольшой скрипт, который удаляет из файла один байт и объединяет его с заголовком, после чего сохраняет его с порядковым номером.

   

#!/bin/bash for i in {1.1000} do cat header.wav > ".

/wav/$i.wav" tail -c +$i raw.wav >> ".

/wav/$i.wav" done

Запускаем скрипт и с трепетом, сидя на краю сиденья, ждём результата.

К сожалению, нам пришлось просматривать эти файлы вручную, но мы не знали, как лучше поступить иначе.

Мы загрузили в audacity 250 файлов и просмотрели треки:

Как мы восстановили поврежденный WAV-файл

Долго листать нам не пришлось, потому что в файле 537 мы нашли то, что искали:

Как мы восстановили поврежденный WAV-файл

Осталось сделать совсем немного.

Смотрим этот файл в хеш-редакторе, где он остановился.

Открываем БФ в редакторе и удаляем нужную нам длину в байтах после заголовка.

Всё, двухчасовой файл воспроизводится нормально.



P.S.

Скорее всего, это можно было сделать проще.

Если кто-нибудь знает, как облегчить работу или как-то ее оптимизировать, напишите и я добавлю в это «гайд».

Спасибо всем за внимание.

Теги: #*nix #Звук #Программное обеспечение #Audacity #шестнадцатеричные коды #bash-скрипты #bash-скрипты #wav

Вместе с данным постом часто просматривают: