AudioWorkletNode: parameters プロパティ
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.
AudioWorkletNode
インターフェイスの読み取り専用プロパティ parameters
は、関連付けられた AudioParamMap
を返します。これは AudioParam
オブジェクトが入った Map
のようなコレクションです。中身のオブジェクトは、用いる AudioWorkletProcessor
の生成時に parameterDescriptors
静的ゲッターに沿って生成されます。
値
AudioParam
のインスタンスを持つ AudioParamMap
オブジェクトです。
これらはデフォルトの AudioNode
で行うのと同じ方法で自動化でき、計算された値は自分の AudioWorkletProcessor
の process
メソッドで使用できます。
例
独自の AudioParam
の作成と使用のデモを行うため、AudioWorkletNode
ページにある例を拡張します。このページでは、ホワイトノイズを出力する単純なノードを作成しました。ここでは、独自のゲインパラメーターを追加し、出力の音量を直接変えることができるようにします。(これは GainNode
を用いてもできますが)
まず、独自の AudioWorkletProcessor
を定義して登録する必要があります。
これは別のファイルで行うことに注意してください。
処理器を拡張し、静的な parameterDescriptors
ゲッターを追加します。これは AudioWorkletNode
のコンストラクター内部で parameters
に生成した AudioParam
オブジェクトを入れるのに用いられます。
// white-noise-processor.js
class WhiteNoiseProcessor extends AudioWorkletProcessor {
static get parameterDescriptors() {
return [
{
name: "customGain",
defaultValue: 1,
minValue: 0,
maxValue: 1,
automationRate: "a-rate",
},
];
}
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) *
(parameters["customGain"].length > 1
? parameters["customGain"][i]
: parameters["customGain"][0]);
// メモ: パラメーターは 128 個の値の配列です。(128 サンプルのそれぞれについて 1 個ずつ)
// ただし、現在自動処理がスケジュールされていない場合、
// 128 サンプル全てで用いる値が 1 個だけ入っていることがあります。
}
});
return true;
}
}
registerProcessor("white-noise-processor", WhiteNoiseProcessor);
次に、メインスクリプトで処理器を読み込み、処理器の名前を渡して AudioWorkletNode
のインスタンスを作成し、このノードを音声グラフに接続します。
const audioContext = new AudioContext();
await audioContext.audioWorklet.addModule("white-noise-processor.js");
const whiteNoiseNode = new AudioWorkletNode(
audioContext,
"white-noise-processor",
);
whiteNoiseNode.connect(audioContext.destination);
すると、ノードのゲインをこのようにして変えることができます。
const gainParam = whiteNoiseNode.parameters.get("customGain");
gainParam.setValueAtTime(0, audioContext.currentTime);
gainParam.linearRampToValueAtTime(0.5, audioContext.currentTime + 0.5);
仕様書
Specification |
---|
Web Audio API # dom-audioworkletnode-parameters |
ブラウザーの互換性
BCD tables only load in the browser