我们如何还原损坏的.wav文件

与朋友还原.wav文件时,有一种有趣的体验。 我决定描述我们的痛苦过程,突然有人会派上用场。


背景知识


当刻录机冻结/或在保存文件时出错时,会有一些悲伤的故事。 因此,当我们尝试打开损坏的文件时,会出现错误,例如: 无法解码格式,格式 不正确程序无法识别文件格式


试图弄清楚


由于我们无法打开文件,因此我们决定使用google。 我们想了解如何将.wav文件提供给播放器。 找到了很多技巧:以Raw(原始格式)下载,使用设置等。 所有这些尝试均失败。


我们决定研究wav的一般含义,找到了有关标头及其描述的信息


WAV文件格式的示意图


我们安装十六进制编辑器(wxHexEditor),打开并尝试至少找到与标题相似的内容。


没有标题的损坏文件


失败...没有。


我们决定记录一个成功保存的新记录。 我们在编辑器中将其打开,然后查看标题。


正常录制,未选择标题


复制标题并将其粘贴到我们的常规文件中(以下简称BF)! 疯狂地在播放器中保存并运行文件,但没有任何效果! (我就像一个真正的男人,开始在房间的角落里抽泣)


在构建某些东西之前,您需要破坏一些东西。


我们决定找出如何破坏普通文件并获得损坏文件的丑陋画面。


图:BF粘在上面,正常记录在下面。


大胆地打开两个文件


原来,如果您在普通文件中删除hexRedator中的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 

我们开始脚本,然后大惊小怪地在凳子的边缘上等待结果。 不幸的是,我们不得不手动查看这些文件,但是我们不知道如何以其他方式做得更好。 他们大胆地投掷了250个文件,并仔细查看了以下曲目:


一堆碎文件


无需滚动很长时间,因为在537文件上,我们找到了所需的内容:


这是537声音正常的文件


小型情况仍然如此。 我们在停止该文件的编辑器的哈希中查看该文件。 在编辑器中打开BF,并删除标题后的所需字节长度。 就是这样,两个小时的文件正常播放。


聚苯乙烯


最有可能的是,这可以变得更容易。 谁知道如何简化工作或以某种方式对其进行优化,请撰写,我将添加到该“指南”中。


谢谢大家的关注。

Source: https://habr.com/ru/post/zh-CN433178/


All Articles