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.

WorkletGlobalScope AudioWorkletGlobalScope

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 des BaseAudioContext, 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 ein AudioWorkletNode 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.

js
// 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:

js
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

Siehe auch