我正在使用两种技术来创建波表合成器声音:

1-循环一个包含单个波形周期的AudioBufferSourceNode

// Load a single cycle short wave file, then :
  audioContext.decodeAudioData(audioData, function(buffer) {
     source.buffer = buffer;
     source.loop = true;
   },

2-创建一个PeriodicWave并为其提供傅立叶系数
(使用在网上找到的系数,即对于正弦波为(0,1),对于更复杂的波为(0,.1,.4,.6,...)。
 var wave = ac.createPeriodicWave(real, imag);
 OscillatorNode.setPeriodicWave(wave);

使用一种技术优于另一种技术的利弊是什么?这些技术会产生非常不同的听觉结果吗?

我在这里有一个演示这两种方法的演示:
http://davedave.us/wavetable-synth/

我的代码正在开发中,但是在这里:
https://github.com/looshi/wavetable-synth

最佳答案

如果您要加载的音频文件的采样率与音频上下文的采样率相同,那么两者之间并没有太大的区别。我可以想到的主要区别是,如果循环的第一个样本和最后一个样本明显不同,则缓冲区方法可能会产生毛刺。除非您这样做,否则周期性波不会发生这种情况。

如果不更改频率,则音频缓冲区可能需要较少的CPU来产生音频。

对于高基频,周期波可能听起来有些不同,因为它被迫限制了频带。音频缓冲区没有该限制。

关于javascript - Web Audio API-PeriodicWave和循环AudioBufferSourceNode以实现波形表之间的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41748145/

10-14 17:29