PeriodicWave - 定义了可用于调整 OscillatorNode 输出的周期性波形

PeriodicWave 接口定义了可用于调整 OscillatorNode 输出的周期性波形。

PeriodicWave 没有输入或输出;它用于在调用 OscillatorNode.setPeriodicWave() 时定义自定义振荡器。PeriodicWave 本身是由 AudioContext.createPeriodicWave() 创建 / 返回的。

构造函数

PeriodicWave.PeriodicWave()

使用所有属性的默认值创建一个新的 PeriodicWave 对象实例。如果您希望在一开始就建立自定义属性值,请使用 AudioContext.createPeriodicWave() 工厂方法。

属性

没有;同时,PeriodicWave 不继承任何属性。

方法

没有;同时,PeriodicWave 不继承任何方法。

实例

以下实例说明了 createPeriodicWave() 的简单用法,用于创建包含简单正弦波的 PeriodicWave 对象。

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

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

var 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)设置一个分量,因此得到正弦波。

傅里叶变换的系数应按序(例如 (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
PeriodicWave 的定义
工作草案 -

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持14 支持25 不支持156
PeriodicWave() 构造函数551 未知53 不支持42 未知

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持 支持18 未知26 未知14 支持
PeriodicWave() 构造函数551551 未知53 未知42 未知

1. 在 Chrome 59 之前,不支持默认值。

相关链接