Computer >> Máy Tính >  >> Lập trình >> Python

Đọc và ghi các tệp AIFF và AIFC bằng Python (aifc)

Các chức năng khác nhau trong mô-đun aifc hỗ trợ đọc và ghi các tệp AIFF (Định dạng tệp trao đổi âm thanh) và AIFF-C. Định dạng AIFF dùng để lưu trữ các mẫu âm thanh kỹ thuật số trong một tệp. Phiên bản mới hơn AIFF-C của nó có khả năng nén dữ liệu âm thanh

Tệp âm thanh có số lượng tham số mô tả dữ liệu âm thanh.

  • Tốc độ lấy mẫu hoặc tốc độ khung hình:số lần âm thanh được lấy mẫu trên giây.

  • Số kênh:cho biết âm thanh là mono, stereo hay quadro.

  • khung:bao gồm một mẫu cho mỗi kênh.

  • Kích thước mẫu:kích thước tính bằng byte của mỗi mẫu.

Do đó, một khung bao gồm các kênh * byte lấy mẫu kích thước. Dữ liệu âm thanh trong 1 giây là các kênh * kích thước mẫu * byte tốc độ khung hình.

Các chức năng sau được định nghĩa trong mô-đun aifc:

aifc.open ()

Hàm này mở tệp AIFF hoặc AIFF-C và trả về một thể hiện đối tượng để đọc / ghi dữ liệu âm thanh tùy thuộc vào chế độ. Nó phải là 'r' hoặc 'rb' nếu tệp phải được mở để đọc. Nó phải là 'w' hoặc 'wb' khi tệp phải được mở để ghi.

Đối tượng có chế độ ghi sử dụng các chức năng sau

aiff ()
Tạo tệp AIFF.
aifc ()
Tạo tệp AIFF-C.
setnchannels ()
Chỉ định số kênh trong tệp âm thanh.
setampwidth ()
Chỉ định kích thước tính bằng byte của mẫu âm thanh.
setframerate ()
Chỉ định tần số lấy mẫu theo khung hình trên giây.
setnframes ()
Chỉ định số lượng khung hình sẽ được ghi vào tệp âm thanh.
setcomptype ()
Chỉ định kiểu nén. không thể nén tệp AIFF. các kiểu nén được hỗ trợ - b'NONE ', b'ULAW', b'ALAW ', b'G722'.
setparams ()
Đặt tất cả các tham số trên cùng một lúc. Đối số là một bộ bao gồm các tham số khác nhau.
writeframes ()
Ghi dữ liệu vào tệp đầu ra. T
writeframesraw ()
Giống như writeframes (), ngoại trừ tiêu đề của tệp âm thanh không được cập nhật.

Chương trình sau tạo tệp 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()

Đối tượng đọc aiff hoặc aiff-c sử dụng các chức năng sau

getnchannels ()
Trả về số kênh âm thanh (1 cho đơn âm, 2 cho âm thanh nổi).
getampwidth ()
Trả về kích thước tính bằng byte của từng mẫu riêng lẻ.
getframerate ()
Trả về tốc độ lấy mẫu (số khung hình âm thanh mỗi giây).
getnframes ()
Trả về số lượng khung âm thanh trong tệp.
getcomptype ()
Trả về mảng byte có độ dài 4 mô tả kiểu nén được sử dụng trong tệp âm thanh.
getparams ()
Trả về một nametuple () (nchannels, sampwidth, framerate, nframes, comptype, compname
readframes ()
Đọc và trả lại các khung nframe tiếp theo từ tệp âm thanh.
setpos (pos)
Tìm số khung đã chỉ định.

Các hàm này có sẵn cho đối tượng aiff có thể đọc được cũng như có thể ghi:

rewind ()
Tua lại con trỏ đã đọc. Các khung đọc tiếp theo () sẽ bắt đầu lại từ đầu.
tell ()
Trả về số khung hiện tại.
close ()
Đóng tệp AIFF. Sau khi gọi phương thức này, đối tượng không thể được sử dụng nữa.

Ví dụ

Chương trình sau đọc các thuộc tính của tệp 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()

Đầu ra

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