如何处理二进制文件

实际案例

WAV是一种音频文件的格式,音频文件为二进制文件。WAV文件由头部信息和音频采样数据构成。前44个字节为头部信息,包括声道数、采样频率和PCM位宽等,后面是音频采样数据。

(注:图片来源于互联网,如若侵权请联系本人立删,谢谢!)

请使用Python分析一个WAV文件头部信息,处理音频数据。

解决方案:
- open函数以二进制模式打开文件,指定mode参数为’b’
- 二进制数据可以用readinto读入到提取分配好的buffer中,便于数据处理
- 解析二进制数据可以使用标准库中的struct模块的unpack方法

注:关于unpack()的参数问题,Python官方文档中并没用明确说明。因此,可查看嘎啦的博文。

具体代码如下:

# -*- coding: utf-8 -*-

import struct
import array

f = open('test.wav', 'rb')
# 读取文件前44个字节的数据
info = f.read(44)

# 解析二进制数据--声道数
print struct.unpack('h', info[22:24])

# WAV文件中data部分的大小 / 数据类型的大小 -> buffer的大小
f.seek(0, 2)
n = (f.tell() - 44) / 2

buf = array.array('h', (0 for _ in xrange(n)))

# 将数据读至buf中
f.seek(44)
f.readinto(buf)

for i in xrange(n):
    # 数据处理,相当于将音频文件的声音变小
    buf[i] /= 8

f.close()

# 创建demo.wav
f = open('demo.wav', 'wb')
# 将test.wav中前44个字节的数据写入文件
f.write(info)
# 将buf中的数据写入文件
buf.tofile(f)

f.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值