Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

อ่านและเขียนไฟล์ AIFF และ AIFC โดยใช้ Python (aifc)


ฟังก์ชันต่างๆ ในโมดูล aifc รองรับการอ่านและเขียนไฟล์ AIFF (รูปแบบไฟล์ Audio Interchange File) และไฟล์ AIFF-C รูปแบบ AIFF ใช้สำหรับจัดเก็บตัวอย่างเสียงดิจิทัลในไฟล์ AIFF-C เวอร์ชันใหม่กว่ามีความสามารถในการบีบอัดข้อมูลเสียง

ไฟล์เสียงมีจำนวนพารามิเตอร์ที่อธิบายข้อมูลเสียง

  • อัตราการสุ่มตัวอย่างหรืออัตราเฟรม:จำนวนครั้งต่อวินาทีที่สุ่มตัวอย่างเสียง

  • จำนวนช่องสัญญาณ:ระบุว่าเสียงเป็นแบบโมโน สเตอริโอ หรือควอโดร

  • เฟรม :ประกอบด้วยหนึ่งตัวอย่างต่อช่องสัญญาณ

  • ขนาดตัวอย่าง:ขนาดเป็นไบต์ของแต่ละตัวอย่าง

ดังนั้นเฟรมประกอบด้วยแชนเนล * สุ่มตัวอย่างไบต์ ข้อมูลเสียง 1 วินาทีคือช่อง * ตัวอย่าง * ไบต์อัตราเฟรม

ฟังก์ชันต่อไปนี้ถูกกำหนดในโมดูล aifc:

aifc.open()

ฟังก์ชันนี้เปิดไฟล์ AIFF หรือ AIFF-C และส่งคืนอินสแตนซ์ของออบเจ็กต์สำหรับการอ่าน/เขียนข้อมูลเสียงขึ้นอยู่กับโหมด จะต้องเป็น 'r' หรือ 'rb' หากต้องเปิดไฟล์เพื่อการอ่าน ควรเป็น 'w' หรือ 'wb' เมื่อต้องเปิดไฟล์เพื่อเขียน

วัตถุที่มีโหมดเขียนใช้ฟังก์ชันต่อไปนี้

aiff()
สร้างไฟล์ AIFF
aifc()
สร้างไฟล์ AIFF-C
setnchannels()
ระบุจำนวนช่องในไฟล์เสียง
setsampwidth()
ระบุขนาดเป็นไบต์ของตัวอย่างเสียง
เซ็ตเฟรมเรท()
ระบุความถี่ในการสุ่มตัวอย่างเป็นเฟรมต่อวินาที
setnframes()
ระบุจำนวนเฟรมที่จะเขียนลงในไฟล์เสียง
setcomptype()
ระบุประเภทการบีบอัด ไม่สามารถบีบอัดไฟล์ AIFF รองรับประเภทการบีบอัด - b'NONE', b'ULAW', b'ALAW', b'G722'
setparams()
ตั้งค่าพารามิเตอร์ด้านบนทั้งหมดพร้อมกัน อาร์กิวเมนต์เป็นทูเพิลที่ประกอบด้วยพารามิเตอร์ต่างๆ
writeframes()
เขียนข้อมูลลงในไฟล์ที่ส่งออก ตู่
writeframesraw()
ชอบ writeframes() ยกเว้นว่าส่วนหัวของไฟล์เสียงไม่ได้รับการอัพเดต

โปรแกรมที่ตามมาจะสร้างไฟล์ AIFF

import aifc, struct
sampleRate = 44100.0 # hertz
duration = 1.0 # seconds
frequency = 440.0 # hertz
obj = aifc.open('sound.aiff','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()

อ็อบเจ็กต์ที่อ่าน aiff หรือ aiff-c ใช้ฟังก์ชันต่อไปนี้

getnchannels()
คืนค่าจำนวนช่องสัญญาณเสียง (1 สำหรับโมโน 2 สำหรับสเตอริโอ)
getsampwidth()
คืนค่าขนาดเป็นไบต์ของตัวอย่างแต่ละรายการ
getframerate()
ส่งคืนอัตราการสุ่มตัวอย่าง (จำนวนเฟรมเสียงต่อวินาที)
getnframes()
คืนค่าจำนวนเฟรมเสียงในไฟล์
getcomptype()
ส่งคืนอาร์เรย์ไบต์ที่มีความยาว 4 ซึ่งอธิบายประเภทของการบีบอัดที่ใช้ในไฟล์เสียง
getparams()
ส่งกลับ namedtuple() (nchannels, sampwidth, framerate, nframes, comptype, compname
อ่านเฟรม()
อ่านและส่งคืนเฟรม nframes ถัดไปจากไฟล์เสียง
setpos(ตำแหน่ง)
ค้นหาหมายเลขเฟรมที่ระบุ

ฟังก์ชันเหล่านี้มีให้สำหรับอ็อบเจ็กต์ aiff ที่อ่านได้และเขียนได้:

ย้อนกลับ()
กรอกลับตัวชี้การอ่าน readframes() ถัดไปจะเริ่มต้นจากจุดเริ่มต้น
บอก()
ส่งคืนหมายเลขเฟรมปัจจุบัน
ปิด()
ปิดไฟล์ AIFF หลังจากเรียกใช้เมธอดนี้ วัตถุจะไม่สามารถใช้งานได้อีกต่อไป

ตัวอย่าง

ตามโปรแกรมอ่านแอตทริบิวต์ของไฟล์ aiff

import aifc
obj = aifc.open('sound.aiff','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: _aifc_params(nchannels=1, sampwidth=2, framerate=44100, nframes=99999, comptype=b'NONE', compname=b'not compressed')