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