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.

WorkletGlobalScope AudioWorkletGlobalScope

Instanz-Eigenschaften

Dieses Interface erbt auch Eigenschaften von seinem Eltern-Interface, WorkletGlobalScope.

currentFrame Nur lesbar

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 Nur lesbar

Gibt einen Doppelwert zurück, der die ständig zunehmende Kontextzeit des verarbeiteten Audio-Blocks darstellt. Er entspricht der currentTime-Eigenschaft des BaseAudioContext, zu dem das Worklet gehört.

sampleRate Nur lesbar

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 ein AudioWorkletNode 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.

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 Audiographen. Wir sollten die Ausgabe der Aufrufe von console.log() 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

BCD tables only load in the browser

Siehe auch