wave --- Đọc và ghi tập tin WAV

Source code: Lib/wave.py


Mô-đun wave cung cấp giao diện thuận tiện cho định dạng tệp Waveform Audio "WAVE" (hoặc "WAV"). Chỉ hỗ trợ các tệp sóng mã hóa PCM không nén.

Thay đổi trong phiên bản 3.12: Hỗ trợ cho tiêu đề WAVE_FORMAT_EXTENSIBLE đã được thêm vào, với điều kiện định dạng mở rộng là KSDATAFORMAT_SUBTYPE_PCM.

Mô-đun wave xác định chức năng và ngoại lệ sau:

wave.open(file, mode=None)

Nếu file là một chuỗi, hãy mở tệp theo tên đó, nếu không hãy coi nó như một đối tượng giống như tệp. mode có thể là:

'rb'

Chế độ chỉ đọc.

'wb'

Chế độ chỉ viết.

Lưu ý rằng nó không cho phép đọc/ghi tệp WAV.

Một mode của 'rb' trả về một đối tượng Wave_read, trong khi một mode của 'wb' trả về một đối tượng Wave_write. Nếu mode bị bỏ qua và một đối tượng giống như tệp được chuyển dưới dạng file, thì file.mode sẽ được sử dụng làm giá trị mặc định cho mode.

Nếu bạn truyền vào một đối tượng giống như tệp, đối tượng wave sẽ không đóng nó khi phương thức close() của nó được gọi; trách nhiệm của người gọi là đóng đối tượng tệp.

Hàm open() có thể được sử dụng trong câu lệnh with. Khi khối with hoàn thành, phương thức Wave_read.close() hoặc Wave_write.close() được gọi.

Thay đổi trong phiên bản 3.4: Đã thêm hỗ trợ cho các tập tin không thể tìm kiếm được.

exception wave.Error

Lỗi xảy ra khi không thể thực hiện được điều gì đó do vi phạm thông số kỹ thuật WAV hoặc gặp phải thiếu sót trong quá trình triển khai.

Đối tượng Wave_read

class wave.Wave_read

Đọc tệp WAV.

Các đối tượng Wave_read, được trả về bởi open(), có các phương thức sau:

close()

Đóng luồng nếu nó được mở bởi wave và làm cho phiên bản không thể sử dụng được. Điều này được gọi tự động trên bộ sưu tập đối tượng.

getnchannels()

Trả về số lượng kênh âm thanh (1 cho mono, 2 cho âm thanh nổi).

getsampwidth()

Trả về chiều rộng mẫu theo byte.

getframerate()

Trả về tần số lấy mẫu.

getnframes()

Trả về số lượng khung âm thanh.

getcomptype()

Trả về kiểu nén ('NONE' là kiểu duy nhất được hỗ trợ).

getcompname()

Phiên bản getcomptype() mà con người có thể đọc được. Thông thường 'not compressed' tương đương với 'NONE'.

getparams()

Trả về namedtuple() (nchannels, sampwidth, framerate, nframes, comptype, compname), tương đương với đầu ra của các phương thức get*().

readframes(n)

Đọc và trả về tối đa các khung âm thanh n, dưới dạng đối tượng bytes.

rewind()

Tua lại con trỏ tệp về đầu luồng âm thanh.

Hai phương thức sau đây được xác định để tương thích với mô-đun aifc cũ và không có tác dụng gì thú vị.

getmarkers()

Trả về None.

Không được dùng nữa kể từ phiên bản 3.13, sẽ bị xóa trong phiên bản 3.15: Phương thức này chỉ tồn tại để tương thích với mô-đun aifc đã bị xóa trong Python 3.13.

getmark(id)

Đưa ra một lỗi.

Không được dùng nữa kể từ phiên bản 3.13, sẽ bị xóa trong phiên bản 3.15: Phương thức này chỉ tồn tại để tương thích với mô-đun aifc đã bị xóa trong Python 3.13.

Hai phương pháp sau đây xác định thuật ngữ "vị trí" tương thích giữa chúng và phụ thuộc vào việc triển khai.

setpos(pos)

Đặt con trỏ tệp đến vị trí đã chỉ định.

tell()

Trả về vị trí con trỏ tập tin hiện tại.

Đối tượng Wave_write

class wave.Wave_write

Viết một tập tin WAV.

Các đối tượng Wave_write, được trả về bởi open().

Đối với các luồng đầu ra có thể tìm kiếm, tiêu đề wave sẽ tự động được cập nhật để phản ánh số lượng khung hình thực sự được ghi. Đối với các luồng không thể tìm kiếm, giá trị nframes phải chính xác khi dữ liệu khung đầu tiên được ghi. Bạn có thể đạt được giá trị nframes chính xác bằng cách gọi setnframes() hoặc setparams() với số lượng khung hình sẽ được ghi trước khi close() được gọi và sau đó sử dụng writeframesraw() để ghi dữ liệu khung hoặc bằng cách gọi writeframes() với tất cả dữ liệu khung sẽ được ghi. Trong trường hợp sau, writeframes() sẽ tính toán số lượng khung hình trong dữ liệu và đặt nframes tương ứng trước khi ghi dữ liệu khung hình.

Thay đổi trong phiên bản 3.4: Đã thêm hỗ trợ cho các tập tin không thể tìm kiếm được.

Đối tượng Wave_write có các phương thức sau:

close()

Đảm bảo nframes là chính xác và đóng tệp nếu nó được mở bởi wave. Phương pháp này được gọi khi thu thập đối tượng. Nó sẽ đưa ra một ngoại lệ nếu luồng đầu ra không thể tìm kiếm được và nframes không khớp với số lượng khung hình thực sự được ghi.

setnchannels(n)

Đặt số lượng kênh.

getnchannels()

Trả về số lượng kênh.

setsampwidth(n)

Đặt độ rộng mẫu thành byte n.

getsampwidth()

Trả về chiều rộng mẫu theo byte.

setframerate(n)

Đặt tốc độ khung hình thành n.

Thay đổi trong phiên bản 3.2: Đầu vào không nguyên của phương thức này được làm tròn đến số nguyên gần nhất.

getframerate()

Trả về tốc độ khung hình.

setnframes(n)

Đặt số lượng khung hình thành n. Điều này sẽ được thay đổi sau nếu số lượng khung hình thực sự được ghi khác (lần thử cập nhật này sẽ gây ra lỗi nếu không thể tìm kiếm được luồng đầu ra).

getnframes()

Trả về số lượng khung âm thanh đã viết cho đến nay.

setcomptype(type, name)

Đặt kiểu nén và mô tả. Hiện tại, chỉ hỗ trợ loại nén NONE, nghĩa là không nén.

getcomptype()

Trả về kiểu nén ('NONE').

getcompname()

Trả về tên loại nén mà con người có thể đọc được.

setparams(tuple)

Zz002zz phải là (nchannels, sampwidth, framerate, nframes, comptype, compname), với các giá trị hợp lệ cho các phương thức set*(). Đặt tất cả các tham số.

getparams()

Trả về namedtuple() (nchannels, sampwidth, framerate, nframes, comptype, compname) chứa các tham số đầu ra hiện tại.

tell()

Trả về vị trí hiện tại trong tệp, với cùng tuyên bố từ chối trách nhiệm đối với các phương thức Wave_read.tell()Wave_read.setpos().

writeframesraw(data)

Viết khung âm thanh mà không sửa nframes.

Thay đổi trong phiên bản 3.4: Mọi bytes-like object hiện đều được chấp nhận.

writeframes(data)

Viết khung âm thanh và đảm bảo nframes là chính xác. Nó sẽ phát sinh lỗi nếu luồng đầu ra không thể tìm kiếm được và tổng số khung được ghi sau khi data được ghi không khớp với giá trị đã đặt trước đó cho nframes.

Thay đổi trong phiên bản 3.4: Mọi bytes-like object hiện đều được chấp nhận.

Lưu ý rằng việc đặt bất kỳ tham số nào sau khi gọi writeframes() hoặc writeframesraw() là không hợp lệ và mọi nỗ lực làm như vậy sẽ tăng wave.Error.