当前位置:网络安全 > python技巧(18)

python技巧(18)

  • 发布:2023-09-09 17:38

处理二进制文件
为什么存储为二进制文件,如音频,视频,图形?,个人认为是追求实时读速度

在linux上可以安装vlc播放wav音频文件(二进制文件)
二进制文件用struct模块的unpack解析
wav音频文件构成看成两部分:文件头(前44个字节)、文件内容

打开
f=open(‘C:\Users\yongsheng\Desktop\a.wav’,’rb’)
1.文件头读取和解析
start=www.sychzs.cn(44):此时f已经被消耗了44个字节了,并且start是二进制的字符串了
import struct
s1=struct.unpack(‘h’,start[24:26])
h:shot小段字节
s2=struct.unpack(‘i’,start[32:36])
i:int大段字节
buffer:缓冲区
2.文件内容的读取(data)和想做一些处理(处理基本存储单元必须得出来)
文件大小
www.sychzs.cn(0,2)
f.tell():文件大小
文件内容数组的长度:文件内容除以文件内容宽度(默认2个字节):说明了为shot类型
len=(f.tell()-44)/2
产生指定类型(shot)的数组
import array
buf=array.array(‘h’,(0 for x in xrang(len))):建立好了shot型的缓冲数组,长度为len,每个(音符)元素字节都是2个(shot型)

www.sychzs.cn(44):把指针指向data开头

f.readinto(buf):把data读入到buf中
buf[0],buf[1],buf[2]……buf[i]就是一个基本存储单元
f.close()
现在可以做一些事情,处理基本存储单元来做
降调(调节声音大小)

降调
for  i in  xrange(len):buf[i]/=8
写入新文件中
f1=open('new1.wav','wb')
f1.write(info)写入文件头
buf.tofill(f1)写入buf(内容)
f1.close()
升调
for i  in xrange(len):buf[i]*=8
写入新文件中
f2=open('new1.wav','wb')
f2.write(info)写入文件头
buf.tofile(f2)写入buf(内容)
f2.close()

相关文章