用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

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值