波表合成 - WebAudioApi
Wavetable Synthesis - WebAudioApi
我正在尝试使用网络音频创建一个波表合成器 Api。我想要实现的是从一种波形线性交换到另一种波形(如 Massive 或 Serum)的可能性。
例如:从正弦波开始,我旋转一个旋钮,逐渐将其转换为方波。
我搜索了文档,到目前为止我找到了如何创建自定义波形:
var real = new Float32Array(2);
var imag = new Float32Array(2);
var ac = new AudioContext();
var osc = ac.createOscillator();
real[0] = 0;
imag[0] = 0;
real[1] = 1;
imag[1] = 0;
var wave = ac.createPeriodicWave(real, imag, {disableNormalization: true});
osc.setPeriodicWave(wave);
osc.connect(ac.destination);
osc.start();
osc.stop(2);
主要问题是这个波形是静态的,我不能逐渐把它变成别的东西。
我怎样才能实现我的目标?我在考虑在每个波浪之后放置 2 个增益节点,它们将相互补充。
例如:我的正弦波进入Gain1
,即10,我的方波进入Gain2
,即0。然后我将它们改为互补, Gain1
=5,Gain2
=5 等等.
这是一种有效的方法吗?
IIUC,我不认为使用一组增益节点会产生你想要的结果。而且没有内置节点可以执行此操作。
我想你必须自己用 AudioWorkletNode
来做这件事。
我正在尝试使用网络音频创建一个波表合成器 Api。我想要实现的是从一种波形线性交换到另一种波形(如 Massive 或 Serum)的可能性。
例如:从正弦波开始,我旋转一个旋钮,逐渐将其转换为方波。
我搜索了文档,到目前为止我找到了如何创建自定义波形:
var real = new Float32Array(2);
var imag = new Float32Array(2);
var ac = new AudioContext();
var osc = ac.createOscillator();
real[0] = 0;
imag[0] = 0;
real[1] = 1;
imag[1] = 0;
var wave = ac.createPeriodicWave(real, imag, {disableNormalization: true});
osc.setPeriodicWave(wave);
osc.connect(ac.destination);
osc.start();
osc.stop(2);
主要问题是这个波形是静态的,我不能逐渐把它变成别的东西。
我怎样才能实现我的目标?我在考虑在每个波浪之后放置 2 个增益节点,它们将相互补充。
例如:我的正弦波进入Gain1
,即10,我的方波进入Gain2
,即0。然后我将它们改为互补, Gain1
=5,Gain2
=5 等等.
这是一种有效的方法吗?
IIUC,我不认为使用一组增益节点会产生你想要的结果。而且没有内置节点可以执行此操作。
我想你必须自己用 AudioWorkletNode
来做这件事。