javascript - Web Audio API - PeriodicWave 和循环 AudioBufferSourceNode 实现波表的区别?

标签 javascript fft web-audio-api

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

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/

相关文章:

Verilog 中的 FFT 实现 : Assigning Wire input to Register type array

javascript - 为什么不能使用振荡器的递归 onended 属性来创建音乐音序器?

javascript - 通过 PeerConnection 发送带有 Web 音频效果的 MediaStream 对象

javascript - React Eslint 解构赋值

javascript - 需要 JavaScript/JQuery 帮助

javascript - 在 <textarea> 中设置文本,包括换行符

javascript - Ng-Repeat 显示一次性绑定(bind)的不规则行为

math - 进行信号频谱分析时的傅立叶变换 (FFT) 单位

javascript - chrome 中的 Web 音频没有声音(currentTime 始终为 0)

python - Numpy 中数据的功率谱和自相关