OscillatorNode: setPeriodicWave() 方法

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

OscillatorNode 接口的 setPeriodicWave() 方法用于指向一个 PeriodicWave 对象,该对象定义了一个周期性波形,可以用来塑造振荡器的输出,当 typecustom 时。

语法

js
setPeriodicWave(wave)

参数

wave

一个 PeriodicWave 对象,表示用作振荡器输出形状的波形。

返回值

无(undefined)。

示例

下面的示例演示了 createPeriodicWave() 的简单用法,通过一个周期性波形重新创建了一个正弦波。

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

osc.setPeriodicWave(wave);

osc.connect(ac.destination);

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

这是可行的,因为只包含基频的声音,根据定义,就是一个正弦波。

在这里,我们创建了一个带有两个值的 PeriodicWave。第一个值是直流偏置,也就是振荡器开始时的值。这里使用 0 是一个好选择,因为我们希望曲线从 [-1.0; 1.0] 范围的中间开始。

第二个及后续的值是正弦和余弦分量。你可以将其理解为傅里叶变换的结果,其中你从时域值获得频域值。在这里,使用 createPeriodicWave(),你指定了频率,然后浏览器会执行一个逆傅里叶变换,为振荡器的频率获取一个时域缓冲区。在这里,我们只在基频上以全音量(1.0)设置了一个分量,所以我们得到的是一个正弦波。

规范

规范
Web Audio API
# dom-oscillatornode-setperiodicwave

浏览器兼容性

另见