AudioWorkletNode

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.

メモ: このインターフェイスは安全なコンテキストの外でも使用可能ですが、BaseAudioContext.audioWorklet プロパティはそうではありません。そのため、独自の AudioWorkletProcessor は安全なコンテキストの外では使用できません。

ウェブオーディオ APIAudioWorkletNode インターフェイスは、ユーザー定義の AudioNode (他のノードとともに音声ルーティンググラフに接続できる) の基底クラスを表します。これは対応する AudioWorkletProcessor (ウェブオーディオレンダリングスレッドで実際の音声処理を行う) を持ちます。

EventTarget AudioNode AudioWorkletNode

コンストラクター

AudioWorkletNode()

新しい AudioWorkletNode オブジェクトのインスタンスを作成します。

インスタンスプロパティ

親の AudioNode からもプロパティを継承します。

AudioWorkletNode.port 読取専用

ノードと対応する AudioWorkletProcessor の間での双方向通信に使用する MessagePort を返します。もう一方の端は、処理器の port プロパティで参照できます。

AudioWorkletNode.parameters 読取専用

AudioParamMap を返します。これは AudioParam オブジェクトのコレクションです。対応する AudioWorkletProcessor の生成中に生成されます。この AudioWorkletProcessor に静的な parameterDescriptors ゲッターがある場合、このゲッターが返す AudioParamDescriptor の配列がこの AudioWorkletNode において AudioParam オブジェクトを生成するのに用いられます。この仕組みにより、AudioWorkletNode からアクセスできる独自の AudioParam オブジェクトを生成できます。そして、対応する AudioWorkletProcessor でこれらの値を使用できます。

イベント

processorerror

対応する AudioWorkletProcessor でエラーが投げられた時発火します。発火した後は、処理器、そして対応するノードはずっと無音を出力します。

インスタンスメソッド

親の AudioNode からメソッドを継承します。

AudioWorkletNode インターフェイスは自身のメソッドを定義していません。

この例では、ランダムノイズを出力する独自の AudioWorkletNode を生成します。

まず、ランダムノイズを出力する独自の AudioWorkletProcessor を定義する必要があります。注意点として、これは個別のファイルで定義してください。

js
// random-noise-processor.js
class RandomNoiseProcessor extends AudioWorkletProcessor {
  process(inputs, outputs, parameters) {
    const output = outputs[0];
    output.forEach((channel) => {
      for (let i = 0; i < channel.length; i++) {
        channel[i] = Math.random() * 2 - 1;
      }
    });
    return true;
  }
}

registerProcessor("random-noise-processor", RandomNoiseProcessor);

そして、メインスクリプトファイルで処理器をロードし、この処理器の名前を渡して AudioWorkletNode のインスタンスを作成し、作成したノードを音声グラフに接続します。

js
const audioContext = new AudioContext();
await audioContext.audioWorklet.addModule("random-noise-processor.js");
const randomNoiseNode = new AudioWorkletNode(
  audioContext,
  "random-noise-processor",
);
randomNoiseNode.connect(audioContext.destination);

仕様書

Specification
Web Audio API
# AudioWorkletNode

ブラウザーの互換性

BCD tables only load in the browser

関連情報