BaseAudioContext: createPeriodicWave() メソッド

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.

createPeriodicWave()AudioContext インターフェイスのメソッドで、周期的な波形を定義するために使われる PeriodicWave を生成します。これは OscillatorNode の出力を決めるために使われます。

構文

js
createPeriodicWave(real, imag)
createPeriodicWave(real, imag, constraints)

引数

real

余弦項(従来は A 項)の配列。

imag

正弦項(従来は B 項)の配列。

配列 realimag は同じ長さでなければならず、そうでない場合はエラーが発生します。

constraints 省略可

正規化を無効にするかどうか(指定しない場合、正規化は既定で有効)を指定する辞書オブジェクトです。 1 つのプロパティを持ちます。

disableNormalization

true に設定すると、周期的な波の正規化を無効にします。既定値は false です。

メモ: 正規化した場合、結果の波は最大絶対ピーク値が 1 になります。

返値

PeriodicWave です。

次の例は、 createPeriodicWave() を使用して単純な正弦波を含む PeriodicWave オブジェクトを作成する方法を示しています。

js
const real = new Float32Array(2);
const imag = new Float32Array(2);
const ac = new AudioContext();
const osc = ac.createOscillator();

real[0] = 0;
imag[0] = 0;
real[1] = 1;
imag[1] = 0;

const wave = ac.createPeriodicWave(real, imag, { disableNormalization: true });

osc.setPeriodicWave(wave);

osc.connect(ac.destination);

osc.start();
osc.stop(2);

これは、基本音だけを含む音は、定義上、正弦波であるため、うまくいきます。

ここでは、 2 つの値を持つ PeriodicWave を作成します。最初の値は DC オフセットで、これはオシレーターを開始する値です。ここでは、曲線を [-1.0; 1.0] 範囲の中央で開始したいので、 0 が適しています。

2 つ目以降の値は正弦波と余弦波成分です。時間領域の値から周波数領域の値を得る、フーリエ変換の結果と考えることができます。ここでは、createPeriodicWave()で、周波数を指定すると、ブラウザーは逆フーリエ変換を行い、発振器の周波数の時間領域のバッファーを取得します。ここでは、基本音にフルボリューム(1.0)の 1 成分のみを設定しているので、正弦波が得られます。 基本音は発振器の周波数(既定では440Hz)であることに留意してください。 したがって、発振器の周波数を変えることは、効果的にこの周期波の周波数も一緒に変えることになります。

フーリエ変換の係数は昇順で与えなければならず(すなわち、 ( a + b i ) e i , ( c + d i ) e 2 i , ( f + g i ) e 3 i \left(a+bi\right)e^{i} , \left(c+di\right)e^{2i} , \left(f+gi\right)e^{3i} など)、正でも負でも構いません。このような係数を手動で得る簡単な方法は(ベストではありませんが)、グラフ計算機を使うことです。

仕様書

Specification
Web Audio API
# dom-baseaudiocontext-createperiodicwave

ブラウザーの互換性

BCD tables only load in the browser

関連情報