1. 程式人生 > 實用技巧 >如何處理二進位制檔案?

如何處理二進位制檔案?

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