我使用两种技术来创建波表合成器声音:
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/