โมดูล wave ในไลบรารีมาตรฐานของ Python เป็นอินเตอร์เฟซที่ง่ายสำหรับรูปแบบเสียง WAV ฟังก์ชันในโมดูลนี้สามารถเขียนข้อมูลเสียงในรูปแบบ raw ไปยังออบเจกต์คล้ายไฟล์ และอ่านแอตทริบิวต์ของไฟล์ WAV
ไฟล์จะเปิดในโหมด 'write' หรือ 'read' เหมือนกับฟังก์ชัน open() ในตัว แต่ใช้ฟังก์ชัน open() ในโมดูล wave
wave.open()
ฟังก์ชันนี้เปิดไฟล์เพื่ออ่าน/เขียนข้อมูลเสียง ต้องการสองพารามิเตอร์ - แรกคือชื่อไฟล์ และที่สองคือโหมด โหมดสามารถเป็น 'wb' สำหรับเขียนข้อมูลเสียง หรือ 'rb' สำหรับอ่าน
obj = wave.open('sound.wav', 'wb')
โหมด 'rb' คืนค่าออบเจกต์ Wave_read ในขณะที่โหมด 'wb' คืนค่าออบเจกต์ Wave_write
ออบเจกต์ Wave_write มีเมธอดดังนี้:
| close() | ปิดไฟล์หากเปิดโดย wave |
| setnchannels() | ตั้งค่าจำนวนช่องสัญญาณ 1 สำหรับ Mono, 2 สำหรับสเตเรโอ |
| setsampwidth() | ตั้งค่าความกว้างตัวอย่างเป็น n ไบต์ |
| setframerate() | ตั้งค่าอัตราเฟรมเป็น n |
| setnframes() | ตั้งค่าจำนวนเฟรมเป็น n |
| setcomptype() | ตั้งค่าประเภทการบีบอัดและคำอธิบาย ปัจจุบันรองรับเฉพาะ NONE (ไม่บีบอัด) |
| setparams() | รับทูเพิลพารามิเตอร์ (nchannels, sampwidth, framerate, nframes, comptype, compname) |
| tell() | ดึงตำแหน่งปัจจุบันในไฟล์ |
| writeframesraw() | เขียนเฟรมเสียง โดยไม่แก้ไข |
| writeframes() | เขียนเฟรมเสียงและให้แน่ใจว่าถูกต้อง |
โค้ดต่อไปนี้สร้างไฟล์ WAV ด้วยไบต์จำนวนเต็มสั้นสุ่ม ระยะเวลา 99,999 วินาที:
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('
เมธอดของออบเจกต์ Wave_read
close() ปิดสตรีมหากเปิดโดยโมดูล wave
getnchannels() คืนค่าจำนวนช่องสัญญาณเสียง (1 สำหรับ mono, 2 สำหรับ stereo)
getsampwidth() คืนค่าความกว้างตัวอย่างในไบต์
getframerate() คืนค่าความถี่การสุ่มตัวอย่าง
getnframes() คืนค่าจำนวนเฟรมเสียง
getcomptype() คืนค่าประเภทการบีบอัด ('NONE' คือประเภทเดียวที่รองรับ)
getparams() คืนค่า namedtuple() (nchannels, sampwidth, framerate, nframes, comptype, compname) เทียบเท่าผลลัพธ์ของเมธอด get*()
readframes(n) อ่านและคืนค่าสูงสุด n เฟรมของเสียง เป็นออบเจกต์ไบต์
rewind() รีเซ็ตตัวชี้ไฟล์ไปจุดเริ่มต้นของสตรีมเสียง
โค้ดต่อไปนี้อ่านพารามิเตอร์บางส่วนของไฟล์ 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()
ผลลัพธ์
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')