首页 > 解决方案 > 如何转换波表以与`OscillatorNode.setPeriodicWave`一起使用?

问题描述

我想使用带有 WebAudio 的自定义波形OscillatorNode。我是音频合成的新手,但在数学方面仍然很吃力(至少我可以编程)。

波形被定义为函数,所以我有函数本身,并且可以对波形进行采样。但是,该OscillatorNode.createPeriodicWave方法需要两个数组(realimag)来定义频域中的波形。

AnalyserNode具有用于在频域中计算数组(字节或浮点数)的 FFT 方法,但它适用于来自另一个节点的信号。

我想不出一种将波表AnalyserNode正确输入的方法,但如果可以的话,它只返回一个数组,而OscillatorNode.createPeriodicWave需要两个。

TLDR从周期函数开始,你如何计算对应的参数OscillatorNode.createPeriodicWave

标签: javascriptsignal-processingfftweb-audio-api

解决方案


由于您有一个由函数定义的周期性波形,因此您可以计算该函数的傅里叶级数。如果该系列有无限数量的术语,则需要截断它。

这是一项工作,但这正是预定义振荡器类型的计算方式。例如,请参阅OscillatorNode的方波定义。PeriodicWave 方波的系数正是以这种方式计算的。

如果您知道波形的带宽,则无需进行杂乱的积分,就可以大大简化工作。只需足够快地均匀采样波形,然后使用FFT获得所需的系数PeriodicWave采样定理中的其他细节。

或者您可以假设AudioContext(通常为 44.1 kHz 或 48 kHz)的采样率足够高,只需每 1/44100 或 1/48000 秒采样一次波形并计算结果样本的 FFT。


推荐阅读