我有一条曲线——比如正弦曲线——以均匀的间隔采样到 Float32Array 中,称为 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
samples 数组的内容是这些数字:
0, 0.5, 1, 0.5, 0, -0.5, -1, -0.5, 0, ...
如您所见,曲线由每个给定样本的曲线的值 表示。我想创建一个 PeriodicWave从这些样本值中,可以通过使用 AudioContext.createPeriodicWave() 来完成.
但是,此方法接受以下参数而不是采样值:
- real:一组余弦项(传统上是 A 项)。
- imag:一组正弦项(传统上是 B 项)。
我不太确定这些值对于一组采样值意味着什么。 如何将采样值转换为余弦项和正弦项?
编辑:采样的曲线不一定是正弦波或余弦波。它可以采用任意形状。
最佳答案
如果您真的只想获取波形,则只需使用 AudioBufferSource 并循环播放(作为 AudioBuffer)。
PeriodicWaves 有所不同 - 它们是一种通过改变每个谐波的相对系数来和谐地控制振荡器波形的方法。如果您在“imag”数组的第二个槽中创建了一个只有值“1”的 PeriodicWave,您将得到一个正弦波。同样,您可以通过控制高次谐波来创建方波、三 Angular 波或锯齿波 - 参见 https://en.wikipedia.org/wiki/Non-sinusoidal_waveform .这些浪潮最终可能变得非常富有 -
如果要将其转换为 PeriodicWave,则需要使用 FFT 算法将其转换为 PeriodicWave 使用的相对谐波强度集(https://en.wikipedia.org/wiki/Discrete_Fourier_transform 是一个不错的介绍)。网上有库可以执行此操作,例如 DSP.js ( https://github.com/corbanbrook/dsp.js/ )。
(这个以前叫Wavetable,但是也很迷惑。也许应该改名为HarmonicWaveTable?)
关于javascript - createPeriodicWave 从样本值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39722624/