需求:
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