首页 > 其他 > 详细

如何处理二进制文件?

时间:2020-07-12 22:52:32      阅读:70      评论:0      收藏:0      [点我收藏+]

需求:
wav是一种音频文件的格式,音频文件为二进制文件,wav文件由头部信息和音频采样数据组成,前44个字节为头部信息,包括声道数,采样频率,PCM位宽等等,后面是音频采样数据。
使用python,分析一个wav文件头部信息,处理音频数据。

思路:
open函数想以二进制模式打开文件,指定Mode参数为‘b‘。
二进制数据可以用readinto,读入提前分配的buffer中,便于数据处理。
解析二进制数据可以使用标准库中的struct模块的unpack方法

代码:

import struct
import array

# 以rb的模式打开wav文件
f = open(‘demo.wav‘,‘rb‘)

# 读取前44个字节
info = f.read(44)

# 将文件的指针移到文件的末尾
f.seek(0,2)

# 报告文件的指针
f.tell()

# 计算数组的长度
n = (f.tell() - 44) / 2

# 生成数组并初始化数组
buf = array.array(‘h‘,( 0 for _ in range(n)))

# 将文件的数据读入到buf中
# 首先要注意将文件的指针指向到data的开关
f.seek(44)
f.readinto(buf)

# 对每一个采样数据进行除以8的操作,这样可以使wav文件的声音变小一些
for i in range(n):
    buf[i] /= 8

# 将改变的数据写入新的文件中
f2 = open(‘demo2.wav‘,‘wb‘)
# 先写入文件信息头的部分
f2.write(info)
# 将文件的数据写入文件中
buf.tofile(f2)
# 关闭文件
f2.close()

如何处理二进制文件?

原文:https://www.cnblogs.com/Richardo-M-Q/p/13290350.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!