BaseAudioContext: createPeriodicWave() 方法
BaseAudioContext 接口的 createPeriodicWave() 方法用于创建一个 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 |
浏览器兼容性
加载中…