AudioWorkletGlobalScope
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2021.
* Some parts of this feature may have varying levels of support.
Giao diện AudioWorkletGlobalScope của Web Audio API biểu thị một ngữ cảnh thực thi toàn cục cho mã do người dùng cung cấp, dùng để định nghĩa các lớp tùy chỉnh kế thừa từ AudioWorkletProcessor.
Mỗi BaseAudioContext có một AudioWorklet duy nhất, có sẵn qua thuộc tính audioWorklet, và nó chạy mã của mình trong một AudioWorkletGlobalScope duy nhất.
Vì ngữ cảnh thực thi toàn cục được chia sẻ trong BaseAudioContext hiện tại, bạn có thể định nghĩa các biến khác và thực hiện mọi thao tác được cho phép trong worklet, ngoài việc định nghĩa các lớp kế thừa từ AudioWorkletProcessor.
Thuộc tính thể hiện
Giao diện này cũng kế thừa các thuộc tính được định nghĩa trên giao diện cha của nó, WorkletGlobalScope.
currentFrameRead only-
Trả về một số nguyên biểu thị sample-frame hiện tại của khối âm thanh đang được xử lý và liên tục tăng lên. Giá trị này tăng thêm 128 (kích thước của một render quantum) sau khi mỗi khối âm thanh được xử lý xong.
currentTimeRead only-
Trả về một số thực double biểu thị thời gian ngữ cảnh của khối âm thanh đang được xử lý và liên tục tăng lên. Giá trị này bằng với thuộc tính
currentTimecủaBaseAudioContextmà worklet thuộc về. sampleRateRead only-
Trả về một số thực float biểu thị tốc độ lấy mẫu của
BaseAudioContextliên kết. portRead only Thử nghiệm-
Trả về một
MessagePortđể giao tiếp tùy chỉnh, bất đồng bộ giữa mã trên luồng chính và phạm vi toàn cục của audio worklet. Điều này cho phép gửi và nhận các thông điệp tùy chỉnh, chẳng hạn như dữ liệu điều khiển hoặc thiết lập toàn cục.
Phương thức thể hiện
Giao diện này cũng kế thừa các phương thức được định nghĩa trên giao diện cha của nó, WorkletGlobalScope.
registerProcessor()-
Đăng ký một lớp kế thừa từ giao diện
AudioWorkletProcessor. Sau đó lớp này có thể được sử dụng bằng cách tạo mộtAudioWorkletNodevà cung cấp tên đã đăng ký của nó.
Ví dụ
Trong ví dụ này, chúng ta xuất tất cả các thuộc tính toàn cục ra console trong hàm khởi tạo của một AudioWorkletProcessor tùy chỉnh.
Trước tiên, chúng ta cần định nghĩa processor và đăng ký nó. Lưu ý rằng việc này nên được thực hiện trong một tệp riêng.
// AudioWorkletProcessor defined in : test-processor.js
class TestProcessor extends AudioWorkletProcessor {
constructor() {
super();
// Logs the current sample-frame and time at the moment of instantiation.
// They are accessible from the AudioWorkletGlobalScope.
console.log(currentFrame);
console.log(currentTime);
}
// The process method is required - output silence,
// which the outputs are already filled with.
process(inputs, outputs, parameters) {
return true;
}
}
// Logs the sample rate, that is not going to change ever,
// because it's a read-only property of a BaseAudioContext
// and is set only during its instantiation.
console.log(sampleRate);
// You can declare any variables and use them in your processors
// for example it may be an ArrayBuffer with a wavetable
const usefulVariable = 42;
console.log(usefulVariable);
registerProcessor("test-processor", TestProcessor);
Tiếp theo, trong tệp kịch bản chính, chúng ta sẽ tải processor, tạo một thể hiện của AudioWorkletNode bằng cách truyền cho nó tên của processor, rồi kết nối node đó vào một đồ thị âm thanh. Chúng ta sẽ thấy đầu ra của các lệnh gọi console.log() trong console:
const audioContext = new AudioContext();
await audioContext.audioWorklet.addModule("test-processor.js");
const testNode = new AudioWorkletNode(audioContext, "test-processor");
testNode.connect(audioContext.destination);
Thông số kỹ thuật
| Thông số kỹ thuật |
|---|
| Web Audio API> # AudioWorkletGlobalScope> |