BaseAudioContext: createPeriodicWave() 方法
createPeriodicWave()
方法是 BaseAudioContext
接口的方法,用于创建一个 PeriodicWave
。此波形用于定义一个周期性波形,该波形可用于塑造 OscillatorNode
的输出。
语法
js
createPeriodicWave(real, imag)
createPeriodicWave(real, imag, constraints)
参数
real
和 imag
数组必须具有相同的长度,否则会抛出错误。
constraints
可选-
一个字典对象,指定是否应禁用规范化。如果未指定,则默认情况下启用规范化。它包含一个属性
disableNormalization
-
如果设置为
true
,则禁用周期性波形的规范化。默认值为false
。
注意:如果已规范化,则生成的波形的最大绝对峰值将为 1。
返回值
一个 PeriodicWave
。
示例
以下示例说明了 createPeriodicWave()
的简单用法,以创建一个包含简单正弦波的 PeriodicWave
对象。
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, { disableNormalization: true });
osc.setPeriodicWave(wave);
osc.connect(ac.destination);
osc.start();
osc.stop(2);
这是可行的,因为仅包含基频的声音本质上是正弦波。
在这里,我们创建一个 PeriodicWave
,它包含两个值。第一个值是直流偏移量,即振荡器启动时的值。这里 0
是一个好的值,因为它从 [-1.0; 1.0]
范围的中间启动曲线。第二个及后续值是正弦和余弦分量,类似于傅里叶变换的结果,该结果将时域值转换为频域值。在这里,使用 createPeriodicWave()
,您指定频率,浏览器执行逆傅里叶变换以获得振荡器频率的时域缓冲区。在本例中,我们仅在一个分量上设置了基频的全音量(1.0
),因此我们得到一个正弦波。请记住,基频对应于振荡器的频率(默认情况下为 440 Hz
)。因此,更改振荡器的频率实际上会将此周期性波形的频率也移位。
傅里叶变换的系数应按升序给出(即等),可以是正数或负数。手动获取此类系数(尽管不是最好的方法)的一种简单方法是使用图形计算器。
规范
规范 |
---|
Web Audio API # dom-baseaudiocontext-createperiodicwave |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。