在一种特殊情况下损坏了wav音频文件,修复的方法

几年前用某软件无损调整机械硬盘4k对齐时,手贱用别的软件改了盘符(因为4k对齐等待的时间太久,觉得无聊,加上以为那磁盘被占用了,反正改不动的,就改着玩),导致进程异常中断了。磁盘里大量文件损坏。猜测是文件发生了偏位。我比较在意里面的wav录音文件,也是大量损坏,个别能播放。

以前研究了没有很好的结果,只修复了一些mp3格式,最近想再研究一下那堆wav。起初我依照网上的一些经验,打开winhex 16进制编辑器,给坏文件添加或替换上了好的文件里的文件头,结果大概率带来噪音。通过随意删减,有极其小概率误打误撞能修的能听。但碰运气得来的不能用来举一反三。

继续到网上查阅wav格式的原理资料,大部分讲的是文件头的知识,没有细说播放器怎么读取的,解释不了为什么一个正常的wav文件随意删除几个字节就会变的全是噪音(做实验得知的,当时觉得这个是关键所在,解答了这个问题我才能修复)。我看的似懂非懂,很难学以致用来修复我文件。只能放弃这条“正面把原理研究透”的路。

结合之前数据位移的想法,用批量验证,得以挑出来一个特定长度的文件头,用copy /b把它和损坏文件拼接后,有大概率可以修复文件。但也有的不能成功。

(这里插入一段,两周后当我已经把所有文件已经修复的差不多了,进一步实验验证、再回头看资料才得知,存在一个读取周期,比如1024字节(对应我的那些单声道文件),或2048字节(对应双声道),只要把残缺的内容给刚好补足为周期长度的整数倍,就能修复地声音正常。这就是我当时碰撞成功的原理。另外文件头一定要和内容匹配才行,比如双声道和单声道,它们的文件头是有差异的。请看下图。)

在这里插入图片描述

至少证明了偏位理论可行,而且一堆文件还偏的比较有规律。突然想到或许没必要加文件头,说不定还在里面。于是搜索16进制,真找到了wav文件头,把文件头前的东西都删除,修复后果然能播放成功。其它某些格式的损坏文件或许也可以参考。好在,大部分文件的文件头位移的不算多,大都时后移了一些但仍然在本文件靠前的位置,而没有到别的文件里的末尾去,所以损失不大。但是一个一个手修有点麻烦。

但有了方法就好办了,找朋友做了个软件,把我那些文件批量处理,搜索到文件头就切成一个文件,于是有头的都变得能听了。这样就剩下了一批无头的,大部分是3M左右大小的,1到2分钟左右时长的文件,也不想直接丢弃了。于是我用之前挑出的那个特定长度的文件头来拼接。这时遇到了一个麻烦,我的那些文件碎片(来自别的文件的末尾,有的甚至原本都不是音频文件),由于不只是一个录音笔录的,而且损坏后变的比较乱了,导致一个文件夹下,有的需要双声道的头,有的需要单声道的头,还不一定哪个数量多。当头拼错了,声音会很古怪(像电影中外星人大魔头的浑浊声音)。于是我找到了双声道的规律,做了一单一双共两个文件头,找朋友做了个软件,批量智能的判别无头片段是单是双、再和对应的文件头合并。

至此,除了极少数我估计实质并不是音频内容的片段(修了也全是噪音、听起来和自然界的声音完全不相似的噪音)没办法弄,也就是说丢失了那些文件大小的wav内容,算是比较圆满的解决了大量wav录音文件损坏问题,弥补了当年的过错。

在此警示,重要文件狡兔三窟,做事情时要稳、不要贱,也不要偷懒用那些号称能无损做很多操作的磁盘管理软件。

本来可以在硬盘刚发生问题后,用winhex搜索整个分区,按文件类型恢复数据,它会自动帮你找到文件头并切割好。因为如果单纯的用软件恢复分区文件,而不按类型恢复,很可能是文件错位了不能用的。但是我当时没有这么做,只用了超级硬盘数据恢复软件,做了普通的恢复,后来还把文件搬走了,原硬盘也做了格式化、放了新文件。

猜你喜欢

转载自blog.csdn.net/weixin_45490942/article/details/106327518