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')