Gọi lại python-sounddevice

Giả sử bạn có một mảng NumPy tên là

import sounddevice as sd
8 chứa dữ liệu âm thanh với tần suất lấy mẫu là
import sounddevice as sd
9 [trong hầu hết các trường hợp, đây sẽ là 44100 hoặc 48000 khung hình mỗi giây], bạn có thể phát lại bằng play[]

sd.play[myarray, fs]

Chức năng này trả về ngay lập tức nhưng vẫn tiếp tục phát tín hiệu âm thanh ở chế độ nền. Bạn có thể dừng phát lại với stop[]

sd.stop[]

Nếu bạn muốn chặn trình thông dịch Python cho đến khi quá trình phát lại kết thúc, bạn có thể sử dụng hàm wait[]

sd.wait[]

Nếu bạn biết rằng bạn sẽ sử dụng cùng một tần số lấy mẫu trong một thời gian, bạn có thể đặt nó làm mặc định bằng cách sử dụng mặc định. tỷ lệ mẫu

sd.default.samplerate = fs

Sau đó, bạn có thể bỏ đối số lấy mẫu

sd.play[myarray]

Ghi chú

Nếu bạn không chỉ định tần số lấy mẫu chính xác, âm thanh có thể phát lại quá chậm hoặc quá nhanh

ghi âm

Để ghi dữ liệu âm thanh từ thiết bị âm thanh của bạn vào một mảng NumPy, bạn có thể sử dụng rec[]

duration = 10.5  # seconds
myrecording = sd.rec[int[duration * fs], samplerate=fs, channels=2]

Một lần nữa, để sử dụng nhiều lần, bạn có thể đặt mặc định bằng default

________số 8

Sau đó, bạn có thể bỏ các đối số bổ sung

myrecording = sd.rec[int[duration * fs]]

Chức năng này cũng trả về ngay lập tức nhưng tiếp tục ghi ở chế độ nền. Trong khi chờ đợi, bạn có thể chạy các lệnh khác. Nếu bạn muốn kiểm tra xem quá trình ghi đã kết thúc hay chưa, bạn nên sử dụng hàm wait[]

sd.wait[]

Nếu quá trình ghi đã kết thúc, quá trình này sẽ quay lại ngay lập tức;

Theo mặc định, mảng được ghi có kiểu dữ liệu

sd.play[myarray, fs]
0 [xem mặc định. dtype], nhưng điều này có thể được thay đổi bằng đối số dtype

import sounddevice as sd
1

Phát lại và ghi đồng thời

Để phát lại một mảng và ghi cùng lúc, bạn có thể sử dụng playrec[]

import sounddevice as sd
2

Số lượng kênh đầu ra được lấy từ

import sounddevice as sd
8, nhưng số lượng kênh đầu vào vẫn phải được chỉ định

Một lần nữa, giá trị mặc định có thể được sử dụng

import sounddevice as sd
3

Trong trường hợp này số kênh đầu ra vẫn được lấy từ

import sounddevice as sd
8 [có thể có hoặc không có 2 kênh] nhưng số kênh đầu vào được lấy mặc định. kênh truyền hình

Lựa chọn thiết bị

Trong nhiều trường hợp, [các] thiết bị đầu vào/đầu ra mặc định sẽ là [các] thiết bị bạn muốn, nhưng tất nhiên là có thể chọn một thiết bị khác. Sử dụng query_devices[] để lấy danh sách các thiết bị được hỗ trợ. Danh sách tương tự có thể được lấy từ một thiết bị đầu cuối bằng cách gõ lệnh

import sounddevice as sd
4

Bạn có thể sử dụng ID thiết bị tương ứng để chọn thiết bị mong muốn bằng cách gán mặc định. thiết bị hoặc bằng cách chuyển nó dưới dạng đối số thiết bị để phát[], Stream[], v.v.

Thay vì ID thiết bị số, bạn cũng có thể sử dụng danh sách các chuỗi con phân biệt chữ hoa chữ thường được phân tách bằng dấu cách của tên thiết bị [và tên API máy chủ, nếu cần]. xem mặc định. thiết bị để biết chi tiết

import sounddevice as sd
5

Luồng gọi lại

Các chức năng thuận tiện nói trên play[], rec[] và playrec[] [cũng như các chức năng liên quan wait[], stop[], get_status[] và get_stream[]] được thiết kế cho các tập lệnh nhỏ và sử dụng tương tác [e. g. trong sổ ghi chép Jupyter]. Chúng được cho là đơn giản và tiện lợi, nhưng các trường hợp sử dụng của chúng khá hạn chế

Nếu bạn cần kiểm soát nhiều hơn [e. g. ghi liên tục, xử lý thời gian thực,. ], bạn nên sử dụng các lớp "luồng" cấp thấp hơn [e. g. Stream, InputStream, RawInputStream], với giao diện gọi lại "không chặn" hoặc với Luồng "chặn". đọc [] và Truyền phát. write[], xem Chặn luồng đọc/ghi

Để làm ví dụ cho giao diện "không chặn", đoạn mã sau tạo Luồng có chức năng gọi lại để lấy dữ liệu âm thanh từ các kênh đầu vào và chỉ cần chuyển tiếp mọi thứ đến các kênh đầu ra [hãy cẩn thận với âm lượng đầu ra, vì điều này có thể gây ra

import sounddevice as sd
6

Điều tương tự có thể được thực hiện với RawStream [NumPy không cần phải cài đặt]

import sounddevice as sd
7

Ghi chú

Chúng tôi đang sử dụng các mẫu 24 bit ở đây không vì lý do cụ thể nào [chỉ vì chúng tôi có thể]

Tất nhiên, bạn có thể mở rộng các chức năng gọi lại để thực hiện những công việc phức tạp hơn tùy ý. Bạn cũng có thể sử dụng các luồng không có đầu vào [e. g. OutputStream] hoặc các luồng không có đầu ra [e. g. Dòng đầu vào]

Xem . tài liệu. `ví dụ` để biết thêm ví dụ.

Chặn luồng Đọc/Ghi

Thay vì sử dụng chức năng gọi lại, bạn cũng có thể sử dụng các phương thức "chặn" Stream. đọc [] và Truyền phát. write[] [và tất nhiên là các phương thức tương ứng trong InputStream, OutputStream, RawStream, RawInputStream và RawOutputStream]

Chủ Đề