用Python恢复损坏的.wav文件

Thursday, October 12, 2006

Recovering a corrupted .wav file with Python

 

昨晚,由于与Skype配合使用的PowerGramo录音软件的崩溃,我在Procrastination Cure 研讨班上存储的录音都丢失了。幸运的是,一个与会人员还留有一点使用Gizmo制作的录音,那是他们用来召集大家召开电话会议的。

郁闷的是,之所以他有两个录音是因为在研讨班上他的机器当掉了将近两个半小时的时间,所以第一个录音文件由于损坏而无法在Media Player中进行回放。我试了好几个音频编辑器来进行恢复,可是问题依旧。我在网上所找到唯一的用于恢复被损坏.wav文件的东西仅仅是Gizmo FAQ answer。如此看来,显然这是一个常见问题。我尝试了他们推荐的音频编辑器,但还是不行。

所以,是时候请出大家伙了。我通过维基百科(Wikipedia)找到了一个简易的.wav格式手册,然后把我的Python解释器拿出来。经过一段时间的研究,我明白了问题的症结是由于程序在创建文件时仅仅是没有填充头部结构中的长度部分(length fields),所以我用了几步便手动恢复了那些文件,大致描述如下:

 

from  struct  import  pack, unpack 

wav_header 
=   " 4si4s4sihhiihh4si "  

=  file(filename,  ' rb+ ' )
data 
=  list(unpack(wav_header,f.read( 44 )))
data[0]
== ' RIFF '  
data[
2 ] == ' WAVE '  
data[
3 ] == ' fmt  '  
data[
4 ] == 16  
data[
- 2 ] == ' data '  
data[
1 ] == data[ - 1 ] + 36  

f.seek(0,
2 )
filesize 
=  f.tell()
datasize 
=  filesize  -   44  
data[
- 1 =  datasize
data[
1 ]   =  datasize + 36  
f.seek(0)
f.write(pack(wav_header, 
* data))
f.close()

 

这样下来,文件就被完全恢复了。Yay!只可惜恢复后的录音文件质量还不很好,但是,据我所知,还没有什么Python做不到的事情呢。;-)

 

(原文链接网址:http://dirtsimple.org/2006/10/recovering-corrupted-wav-file-with.html

 

你可能感兴趣的:(Popular,Essays)