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.
Das AudioWorkletGlobalScope
Interface der Web Audio API repräsentiert einen globalen Ausführungskontext für benutzerdefinierten Code, der benutzerdefinierte Klassen definiert, die von AudioWorkletProcessor
abgeleitet sind.
Jeder BaseAudioContext
hat eine einzelne AudioWorklet
, die unter der Eigenschaft audioWorklet
verfügbar ist und deren Code in einem einzigen AudioWorkletGlobalScope
ausgeführt wird.
Da der globale Ausführungskontext über den aktuellen BaseAudioContext
geteilt wird, ist es möglich, andere Variablen zu definieren und alle in Worklets erlaubten Aktionen auszuführen – abgesehen von der Definition von AudioWorkletProcessor
abgeleiteten Klassen.
Instanz-Eigenschaften
Dieses Interface erbt auch Eigenschaften, die auf seinem Eltern-Interface WorkletGlobalScope
definiert sind.
currentFrame
Schreibgeschützt-
Gibt einen ganzzahligen Wert zurück, der den ständig ansteigenden aktuellen Sample-Frame des verarbeiteten Audioblocks darstellt. Er wird nach der Verarbeitung jedes Audioblocks um 128 erhöht (die Größe eines Renderquanten).
currentTime
Schreibgeschützt-
Gibt eine Kommazahl zurück, die die ständig ansteigende Kontextzeit des verarbeiteten Audioblocks darstellt. Sie ist gleich der
currentTime
Eigenschaft desBaseAudioContext
, zu dem das Worklet gehört. sampleRate
Schreibgeschützt-
Gibt einen Float-Wert zurück, der die Abtastrate des zugehörigen
BaseAudioContext
darstellt. port
Schreibgeschützt Experimentell-
Gibt einen
MessagePort
für benutzerdefinierte asynchrone Kommunikation zwischen Code im Haupt-Thread und dem globalen Scope eines Audio-Worklets zurück. Dies ermöglicht benutzerdefinierte Nachrichten, wie das Senden und Empfangen von Steuerdaten oder globalen Einstellungen.
Instanz-Methoden
Dieses Interface erbt auch Methoden, die auf seinem Eltern-Interface WorkletGlobalScope
definiert sind.
registerProcessor()
-
Registriert eine von der
AudioWorkletProcessor
Schnittstelle abgeleitete Klasse. Die Klasse kann dann verwendet werden, indem einAudioWorkletNode
erstellt wird, dem ihr registrierter Name übergeben wird.
Beispiele
In diesem Beispiel geben wir alle globalen Eigenschaften im Konstruktor eines benutzerdefinierten AudioWorkletProcessor
in der Konsole aus.
Zuerst 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 werden wir in unserer Hauptskriptdatei den Prozessor laden, eine Instanz von AudioWorkletNode
erstellen – indem wir ihm den Namen des Prozessors übergeben – und den Knoten mit einem Audiografen verbinden. Wir sollten die Ausgabe 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 |