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.
Die AudioWorkletGlobalScope
-Schnittstelle der Web Audio API repräsentiert einen globalen Ausführungskontext für benutzerdefinierten Code, der eigene von AudioWorkletProcessor
abgeleitete Klassen definiert.
Jeder BaseAudioContext
verfügt über eine einzelne AudioWorklet
, die unter der audioWorklet
-Eigenschaft verfügbar ist und ihren Code in einem einzelnen AudioWorkletGlobalScope
ausführt.
Da der globale Ausführungskontext über den aktuellen BaseAudioContext
hinweg geteilt wird, ist es möglich, andere Variablen zu definieren und alle im Worklet erlaubten Aktionen durchzuführen — abgesehen von der Definition von AudioWorkletProcessor
-abgeleiteten Klassen.
Instanz-Eigenschaften
Diese Schnittstelle erbt auch Eigenschaften, die in ihrer übergeordneten Schnittstelle WorkletGlobalScope
definiert sind.
currentFrame
Schreibgeschützt-
Gibt eine Ganzzahl zurück, die den ständig zunehmenden aktuellen Sample-Frame des zu verarbeitenden Audio-Blocks darstellt. Sie wird um 128 (die Größe eines Render-Quantum) nach der Verarbeitung jedes Audio-Blocks inkrementiert.
currentTime
Schreibgeschützt-
Gibt eine Gleitkommazahl zurück, die die ständig zunehmende Kontextzeit des verarbeiteten Audio-Blocks darstellt. Sie ist gleich der
currentTime
-Eigenschaft desBaseAudioContext
, zu dem das Worklet gehört. sampleRate
Schreibgeschützt-
Gibt eine Fließkommazahl zurück, die die Samplerate des zugehörigen
BaseAudioContext
darstellt. port
Schreibgeschützt-
Gibt einen
MessagePort
für die benutzerdefinierte, asynchrone Kommunikation zwischen Code im Haupt-Thread und dem globalen Bereich eines Audio-Worklets zurück. Dies ermöglicht benutzerdefinierte Nachrichten wie das Senden und Empfangen von Steuerdaten oder globalen Einstellungen.
Instanz-Methoden
Diese Schnittstelle erbt auch Methoden, die in ihrer übergeordneten Schnittstelle WorkletGlobalScope
definiert sind.
registerProcessor()
-
Registriert eine Klasse, die von der
AudioWorkletProcessor
-Schnittstelle abgeleitet ist. Die Klasse kann dann verwendet werden, indem einAudioWorkletNode
erstellt wird, der ihren registrierten Namen angibt.
Beispiele
In diesem Beispiel geben wir alle globalen Eigenschaften in der Konsole im Konstruktor eines benutzerdefinierten AudioWorkletProcessor
aus.
Zunächst müssen wir den Prozessor definieren und registrieren. Beachten Sie, dass dies in einer separaten Datei geschehen sollte.
// 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);
Als Nächstes laden wir in unserer Hauptskriptdatei den Prozessor, erstellen eine Instanz von AudioWorkletNode
— indem wir den Namen des Prozessors übergeben — und verbinden den Knoten mit einem Audio-Graphen. Wir sollten die Ausgaben der console.log()
-Aufrufe in der Konsole sehen:
const audioContext = new AudioContext();
await audioContext.audioWorklet.addModule("test-processor.js");
const testNode = new AudioWorkletNode(audioContext, "test-processor");
testNode.connect(audioContext.destination);
Spezifikationen
Specification |
---|
Web Audio API # AudioWorkletGlobalScope |