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.

WorkletGlobalScope AudioWorkletGlobalScope

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

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

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