Javascript 从采样值数组创建PeriodicWave

Javascript 从采样值数组创建PeriodicWave,javascript,audio,web-audio-api,Javascript,Audio,Web Audio Api,我有一条曲线,比如说正弦曲线,它以均匀的间隔被采样到一个数组中,称为samples。曲线按值采样。如果在屏幕上显示一些四舍五入的样本,我们将得到如下结果: 1.0 | x x 0.5 | x x x x 0.0 | x x x x x -0.5 | x x x x -1.0 | x x 样本数组的内容是沿着这些数字的: 0, 0.5, 1

我有一条曲线,比如说正弦曲线,它以均匀的间隔被采样到一个数组中,称为samples。曲线按值采样。如果在屏幕上显示一些四舍五入的样本,我们将得到如下结果:

 1.0 |    x           x
 0.5 |  x   x       x   x
 0.0 | x     x     x     x     x
-0.5 |        x   x       x   x
-1.0 |          x           x
样本数组的内容是沿着这些数字的:

0, 0.5, 1, 0.5, 0, -0.5, -1, -0.5, 0, ...
如您所见,曲线由每个给定采样的曲线值表示。我想从这些示例值创建一个示例,可以使用

但是,此方法接受以下参数而不是采样值:

实数:余弦项的数组,传统上称为A项。 imag:正弦项的数组,传统上称为B项。 我不太确定这些值对于采样值数组意味着什么。如何将采样值转换为余弦项和正弦项


编辑:采样的曲线不一定是正弦波或余弦波。它可以是任意形状。

如果你真的只想获取一个波形,那么只需使用AudioBufferSource并将其作为AudioBuffer循环即可

周期波是不同的——它们是通过改变每个谐波的相对系数来和谐地控制振荡器波形的一种方法。如果在imag数组的第二个插槽中创建了一个值为1的周期波,则会得到一个正弦波。同样,您可以通过控制高次谐波来创建方形、三角形或锯齿波-请参阅。这些波浪最终会变得相当丰富-

如果你想把它转换成周期波,你需要把它转换成周期波使用的一组相对谐波强度,使用FFT算法是一个不错的介绍。网络上有这样的库,比如DSP.js


这过去被称为Wavetable,但这也令人困惑。也许它应该被重命名为HarmonicWaveTable?

如果你确定你的时域波形是周期性的,那么你只需要对波形进行傅里叶变换就可以得到傅里叶系数。变换的实部和虚部可以作为实部和imag参数传递给createPeriodicWave


但如果你已经有了波形,只需将其保存在AudioBuffer中,将其分配给AudioBufferSourceNode,将loop设置为true,并将其用作音频源,而不是带有自定义周期波的振荡器节点。

我现在知道了,所以它是一个简单波数组的定义数组,每一个随后都有一个或多个八度音阶,频率比前一个高一倍或更多。