BaseAudioContext: createPeriodicWave() 方法

Baseline 已廣泛支援

此特性已得到良好支援,可在多種裝置和瀏覽器版本上使用。自 2021 年 4 月起,所有瀏覽器均已支援此特性。

BaseAudioContext 介面的 createPeriodicWave() 方法用於建立一個 PeriodicWave。這個波形用於定義一個週期性波形,可以用來塑造 OscillatorNode 的輸出。

語法

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

引數

real

餘弦項的陣列(傳統上稱為 A 項)。

imag

正弦項的陣列(傳統上稱為 B 項)。

realimag 陣列必須具有相同的長度,否則會丟擲錯誤。

constraints 可選

一個字典物件,用於指定是否停用歸一化。如果未指定,預設啟用歸一化。它包含一個屬性:

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);

這是可行的,因為只包含基頻的聲音本質上就是正弦波。

在這裡,我們建立了一個帶有兩個值的 PeriodicWave。第一個值是直流偏移,也就是振盪器開始時的值。值為 0 在這裡是好的,因為它將曲線的起點設在 [-1.0; 1.0] 範圍的中間。第二個及後續值是正弦和餘弦分量,類似於傅立葉變換的結果,它將時域值轉換為頻域值。在這裡,使用 createPeriodicWave(),您指定頻率,瀏覽器會執行逆傅立葉變換,以獲得振盪器頻率的時域緩衝區。在此示例中,我們將基頻分量設定為一個(值為 1.0)且音量最大,因此我們得到一個正弦波。請注意,基頻對應于振蕩器的頻率(預設情況下為 440 Hz)。因此,改變振盪器的頻率會有效地移動此週期性波形隨之移動。

傅立葉變換的係數應按升序給出(例如:(a+bi)ei,(c+di)e2i,(f+gi)e3i\left(a+bi\right)e^{i} , \left(c+di\right)e^{2i} ,\left(f+gi\right)e^{3i}等等),可以是正數或負數。手動獲取此類係數的一個簡單方法(儘管不是最好的方法)是使用圖形計算器。

規範

規範
Web Audio API
# dom-baseaudiocontext-createperiodicwave

瀏覽器相容性

另見