PeriodicWave

PeriodicWave 接口定义了一个可用于对 OscillatorNode(振荡节点) 的输出进行构造(描述)的周期性波形。

PeriodicWave (周期波) 没有输入或输出;它用于调用 OscillatorNode.setPeriodicWave() 时定义自定义振荡器。 PeriodicWave 自身由 AudioContext.createPeriodicWave() (en-US) 创建/返回。

构造函数

PeriodicWave.PeriodicWave() (en-US)
使用所有属性的默认值创建一个新的 PeriodicWave 对象实例。如果你想一开始就建立自定义属性值,请使用 AudioContext.createPeriodicWave() (en-US) 工厂方法替代。

属性

None; 而且, PeriodicWave 不继承任何属性。

方法

None; 而且, 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 (周期波) 。第一个值是 DC(直流) 偏移,它是振荡器启动的值。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}    等.) 可以是正的或者是负的。一个简单的手动获取此类系数的方法是使用图形计算器,尽管这不是最好的。

规格

Specification Status Comment
Web Audio API
PeriodicWave
Working Draft  

浏览器兼容性

BCD tables only load in the browser

参见