Module wave trong thư viện chuẩn Python cung cấp giao diện đơn giản để làm việc với định dạng âm thanh WAV. Các hàm trong module này cho phép ghi dữ liệu âm thanh thô (raw) vào file và đọc các thuộc tính của file WAV.
File được mở ở chế độ 'write' hoặc 'read' tương tự như hàm open() built-in, nhưng dùng wave.open().
wave.open()
Hàm này mở file để đọc/ghi dữ liệu âm thanh. Cần 2 tham số: tên file và chế độ ('wb' để ghi, 'rb' để đọc).
obj = wave.open('sound.wav', 'wb')
Chế độ 'rb' trả về đối tượng Wave_read, chế độ 'wb' trả về Wave_write.
Các phương thức của Wave_write
close() | Đóng file nếu được mở bởi wave. |
setnchannels() | Thiết lập số kênh: 1 cho Mono, 2 cho Stereo. |
setsampwidth() | Thiết lập độ rộng mẫu (sample width) tính bằng byte. |
setframerate() | Thiết lập tốc độ khung hình (frame rate). |
setnframes() | Thiết lập số lượng frame. |
setcomptype() | Thiết lập kiểu nén và mô tả. Hiện chỉ hỗ trợ NONE (không nén). |
setparams() | Chấp nhận tuple tham số (nchannels, sampwidth, framerate, nframes, comptype, compname). |
tell() | Trả về vị trí hiện tại trong file. |
writeframesraw() | Ghi frame âm thanh, không sửa lỗi. |
writeframes() | Ghi frame âm thanh và đảm bảo đúng định dạng. |
Ví dụ tạo file WAV với dữ liệu ngẫu nhiên:
import wave, struct, math, random
sampleRate = 44100.0 # hertz
duration = 1.0 # seconds
frequency = 440.0 # hertz
obj = wave.open('sound.wav', 'w')
obj.setnchannels(1) # mono
obj.setsampwidth(2)
obj.setframerate(sampleRate)
for i in range(99999):
value = random.randint(-32767, 32767)
data = struct.pack('
Các phương thức của Wave_read
close()Đóng stream nếu được mở bởi wave.
getnchannels()Trả về số kênh âm thanh (1 mono, 2 stereo).
getsampwidth()Trả về độ rộng mẫu tính bằng byte.
getframerate()Trả về tần số lấy mẫu.
getnframes()Trả về số frame âm thanh.
getcomptype()Trả về kiểu nén ('NONE' là duy nhất hỗ trợ).
getparams()Trả về namedtuple chứa tất cả tham số.
readframes(n)Đọc và trả về tối đa n frame âm thanh dạng bytes.
rewind()Di chuyển con trỏ file về đầu stream âm thanh.
Ví dụ đọc tham số file WAV:
import wave
obj = wave.open('sound.wav', 'r')
print("Số kênh:", obj.getnchannels())
print("Độ rộng mẫu:", obj.getsampwidth())
print("Tần số khung hình:", obj.getframerate())
print("Số frame:", obj.getnframes())
print("Tham số:", obj.getparams())
obj.close()
Kết quả
Số kênh: 1
Độ rộng mẫu: 2
Tần số khung hình: 44100
Số frame: 99999
Tham số: _wave_params(nchannels=1, sampwidth=2, framerate=44100, nframes=99999, comptype='NONE', compname='not compressed')