Computer >> Máy Tính >  >> Lập trình >> Python

Đọc và ghi các tệp WAV bằng Python (wave)

Mô-đun sóng trong thư viện tiêu chuẩn của Python là một giao diện dễ dàng cho định dạng WAV âm thanh. Các chức năng trong mô-đun này có thể ghi dữ liệu âm thanh ở định dạng thô vào một tệp như đối tượng và đọc các thuộc tính của tệp WAV.

Tệp được mở ở chế độ 'ghi' hoặc đọc giống như với hàm open () được tích hợp sẵn, nhưng với hàm open () trong mô-đun wave

wave.open ()

Chức năng này mở một tệp để đọc / ghi dữ liệu âm thanh. Hàm cần hai tham số - đầu tiên là tên tệp và thứ hai là chế độ. Chế độ có thể là 'wb' để ghi dữ liệu âm thanh hoặc 'rb' để đọc.

obj = wave.open('sound.wav','wb')

Chế độ 'rb' trả về đối tượng Wave_read, trong khi chế độ 'wb' trả về đối tượng Wave_write.

Đối tượng Wave_write có các phương thức sau

close () Đóng tệp nếu nó được mở bằng wave.
setnchannels () Đặt số lượng kênh. 1 cho Mono 2 cho các kênh âm thanh nổi
setampwidth () Đặt chiều rộng mẫu thành n byte.
setframerate () Đặt tốc độ khung hình thành n.
setnframes () Đặt số lượng khung hình thành n.
setcomptype () Đặt kiểu nén và mô tả. Hiện tại, chỉ loại nén NONE được hỗ trợ, có nghĩa là không nén.
setparams () chấp nhận tuple tham số (nchannels, sampwidth, framerate, nframes, comptype, compname)
tell () Truy xuất vị trí hiện tại trong tệp
writeframesraw () Viết khung âm thanh mà không cần chỉnh sửa.
writeframes () Viết khung âm thanh và đảm bảo rằng chúng chính xác.

Đoạn mã sau sẽ tạo một tệp WAV với các byte số nguyên ngắn ngẫu nhiên có thời lượng 99999 giây.

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('<h', value)
   obj.writeframesraw( data )
obj.close()

Phương thức đối tượng Wave_read

close () Đóng luồng nếu luồng được mở bằng mô-đun wave.
getnchannels () Trả về số kênh âm thanh (1 cho đơn âm, 2 cho âm thanh nổi).
getampwidth () Trả về chiều rộng mẫu tính bằng byte.
getframerate () Trả về tần số lấy mẫu.
getnframes () Trả về số lượng khung âm thanh.
getcomptype () Trả về kiểu nén ('NONE' là kiểu duy nhất được hỗ trợ).
getparams () Trả về têntuple () (nchannels, sampwidth, framerate, nframes, comptype, compname), tương đương với đầu ra của các phương thức get * ().
readframes (n) Đọc và trả về tối đa n khung hình âm thanh, dưới dạng đối tượng byte.
rewind () Tua lại con trỏ tệp về đầu luồng âm thanh.

Đoạn mã sau đọc một số tham số của tệp WAV.

import wave
obj = wave.open('sound.wav','r')
print( "Number of channels",obj.getnchannels())
print ( "Sample width",obj.getsampwidth())
print ( "Frame rate.",obj.getframerate())
print ("Number of frames",obj.getnframes())
print ( "parameters:",obj.getparams())
obj.close()

Đầu ra

Number of channels 1
Sample width 2
Frame rate. 44100
Number of frames 99999
parameters: _wave_params(nchannels=1, sampwidth=2, framerate=44100, nframes=99999, comptype='NONE', compname='not compressed')