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.
Das AudioWorkletGlobalScope
-Interface der Web Audio API repräsentiert einen globalen Ausführungskontext für benutzerdefinierten Code, der benutzerdefinierte, von AudioWorkletProcessor
abgeleitete Klassen definiert.
Jeder BaseAudioContext
hat ein einzelnes AudioWorklet
, das unter der audioWorklet
-Eigenschaft verfügbar ist und seinen Code in einem einzelnen AudioWorkletGlobalScope
ausführt.
Da der globale Ausführungskontext über den aktuellen BaseAudioContext
hinweg geteilt wird, ist es möglich, weitere Variablen zu definieren und alle in Worklets erlaubten Aktionen auszuführen – außer der Definition von AudioWorkletProcessor
abgeleiteten Klassen.
Instanz-Eigenschaften
Dieses Interface erbt auch Eigenschaften von seinem Eltern-Interface, WorkletGlobalScope
.
currentFrame
Schreibgeschützt-
Gibt eine Ganzzahl zurück, die das ständig zunehmende aktuelle Sample-Frame des zu verarbeitenden Audio-Blocks darstellt. Es wird nach der Verarbeitung jedes Audio-Blocks um 128 (die Größe eines Renderquantums) erhöht.
currentTime
Schreibgeschützt-
Gibt einen Doppelwert zurück, der die ständig zunehmende Kontextzeit des verarbeiteten Audio-Blocks darstellt. Er entspricht der
currentTime
-Eigenschaft desBaseAudioContext
, zu dem das Worklet gehört. sampleRate
Schreibgeschützt-
Gibt einen Fließkommawert zurück, der die Abtastrate des zugeordneten
BaseAudioContext
darstellt.
Instanz-Methoden
Dieses Interface erbt auch Methoden von seinem Eltern-Interface, WorkletGlobalScope
.
registerProcessor()
-
Registriert eine Klasse, die von dem
AudioWorkletProcessor
-Interface abgeleitet ist. Die Klasse kann dann verwendet werden, indem einAudioWorkletNode
erstellt wird, wobei ihr registrierter Name angegeben wird.
Beispiele
In diesem Beispiel geben wir alle globalen Eigenschaften in der Konsole im Konstruktor eines benutzerdefinierten AudioWorkletProcessor
aus.
Zuerst müssen wir den Prozessor definieren und registrieren. Beachten Sie, dass dies in einer separaten Datei erfolgen 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 Audiographen. Wir sollten die Ausgabe der Aufrufe von console.log()
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 |
Browser-Kompatibilität
BCD tables only load in the browser