โมดูล 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')