BaseAudioContext: createPeriodicWave() 方法

基线 广泛可用

此功能已成熟,并在许多设备和浏览器版本上运行。它已在浏览器中可用,自 2021 年 4 月.

createPeriodicWave() 方法是 BaseAudioContext 接口的方法,用于创建一个 PeriodicWave。此波形用于定义一个周期性波形,该波形可用于塑造 OscillatorNode 的输出。

语法

js
createPeriodicWave(real, imag)
createPeriodicWave(real, imag, constraints)

参数

real

余弦项数组(传统上是 A 项)。

imag

正弦项数组(传统上是 B 项)。

realimag 数组必须具有相同的长度,否则会抛出错误。

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)。因此,更改振荡器的频率实际上会将此周期性波形的频率也移位。

傅里叶变换的系数应按升序给出(即 ( a + b i ) e i , ( c + d i ) e 2 i , ( f + g i ) e 3 i \left(a+bi\right)e^{i} , \left(c+di\right)e^{2i} ,\left(f+gi\right)e^{3i} 等),可以是正数或负数。手动获取此类系数(尽管不是最好的方法)的一种简单方法是使用图形计算器。

规范

规范
Web Audio API
# dom-baseaudiocontext-createperiodicwave

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参见