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

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

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

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

  • อัตราการสุ่มตัวอย่างหรืออัตราเฟรม: จำนวนครั้งต่อวินาทีที่เสียงถูกสุ่มตัวอย่าง
  • จำนวนช่องสัญญาณ: ระบุว่าเสียงเป็น mono, stereo, หรือ quadro
  • เฟรม: ประกอบด้วยตัวอย่างหนึ่งต่อช่องสัญญาณ
  • ขนาดตัวอย่าง: ขนาดในไบต์ของแต่ละตัวอย่าง

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

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

aifc.open()

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

ออบเจกต์ที่มีโหมดเขียนใช้ฟังก์ชันต่อไปนี้:

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

โปรแกรมต่อไปนี้สร้างไฟล์ AIFF:

import aifc, struct, random

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

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

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

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

rewind()รีวินดตัวชี้อ่าน การ readframes() ถัดไปจะเริ่มจากจุดเริ่มต้น
tell()คืนค่าหมายเลขเฟรมปัจจุบัน
close()ปิดไฟล์ 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')