--- title: OscillatorNode.setPeriodicWave() slug: Web/API/OscillatorNode/setPeriodicWave translation_of: Web/API/OscillatorNode/setPeriodicWave ---
{{ APIRef("Web Audio API") }}
{{ domxref("OscillatorNode") }} 接口的 setPeriodicWave()
方法
用来指向 {{domxref("PeriodicWave")}},PeriodicWave 定义了一个周期性波形能够形成oscillator的输出, 当{{domxref("OscillatorNode.type", "type")}} 是 custom 的时候
.
该方法取代了废弃的 {{ domxref("OscillatorNode.setWaveTable()")}}.
OscillatorNode.setPeriodicWave(wave);
wave
{{jsxref("undefined")}}
下面示例说明了 createPeriodicWave() 方法的简单使用
, 从一个周期波形中重新生成了一个正弦波形。
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); osc.setPeriodicWave(wave); osc.connect(ac.destination); osc.start(); osc.stop(2);
这段代码可以运行因为通过定义一个正弦波形使得声音包含了基础的音调。
这里,我们用两个值创建一个{{domxref("PeriodicWave")}}。第一个值是直流偏移,是oscillator开始的时候的值。这里 0 很合适,因为我们想要在 [-1.0; 1.0] 这个范围的中间值开始。
第二个和后面的值是正弦和余弦内容。可以把它看做傅里叶变换的结果,使得可以从时间阈值得到频率阈值。这里通过 createPeriodicWave() 方法,可以指定频率,并且浏览器执行逆傅里叶变换来得到一个时间阈值缓冲。
Here, we only set one component at full volume (1.0) on the fundamental tone, so we get a sine wave.
Specification | Status | Comment |
---|---|---|
{{SpecName('Web Audio API', '#widl-OscillatorNode-setPeriodicWave-void-PeriodicWave-periodicWave', 'setPeriodicWave')}} | {{Spec2('Web Audio API')}} |
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|---|
Basic support | 14 {{property_prefix("webkit")}} | {{CompatVersionUnknown}} | 23 | {{CompatNo}} | 15 {{property_prefix("webkit")}} 22 (unprefixed) |
6 {{property_prefix("webkit")}} |
Feature | Android | Chrome | Edge | Firefox Mobile (Gecko) | Firefox OS | IE Phone | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|---|---|
Basic support | {{CompatNo}} | 28 {{property_prefix("webkit")}} | {{CompatVersionUnknown}} | 25 | 1.2 | {{CompatNo}} | {{CompatNo}} | 6 {{property_prefix("webkit")}} |