--- title: BaseAudioContext.createPeriodicWave() slug: Web/API/BaseAudioContext/createPeriodicWave translation_of: Web/API/BaseAudioContext/createPeriodicWave ---
{{ APIRef("Web Audio API") }}
{{ domxref("BaseAudioContext") }} 接口的 createPeriodicWave()
方法用于创建可对 {{ domxref("OscillatorNode") }} 输出进行整形的 {{domxref("PeriodicWave")}}(周期波)。
var wave = AudioContext.createPeriodicWave(real, imag[, constraints]);
一个 {{domxref("PeriodicWave")}}.
real
imag
constraints
{{optional_inline}}disableNormalization
: 如果设置为 true
,对周期波禁用规范化。默认值为 false
.如果使用规范化,生成波形的最大绝对峰值为1。
下面的例子为 createPeriodicWave()
的简单用法,创建包含简单正弦波的 {{domxref("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)的分量,所以我们得到一个正弦波。
傅里叶变换系数应该按升序给出 (例如. 等.) 可以是正的或者是负的。一个简单的手动获取此类系数的方法是使用图形计算器,尽管这不是最好的。
Specification | Status | Comment |
---|---|---|
{{SpecName('Web Audio API', '#dom-baseaudiocontext-createperiodicwave', 'createPeriodicWave')}} | {{Spec2('Web Audio API')}} |
{{Compat("api.BaseAudioContext.createPeriodicWave")}}