播放时更改WebAudio WaveShaper节点的曲线
Altering the Curve of a WebAudio WaveShaper Node While Playing
我正在制作一个滚筒机/采样器,我希望用户能够使用滑块控制输出的失真量。我制作了一个WaveShaper节点,将其适当地连接起来,使用这个网站上的方程设置曲线,所有这些都可以。
然后我想要一个范围输入来调用变化事件上的函数,以重置曲线,从而根据输入的新值提供或多或少的失真。
这是我的:
// Distortion:
bussDistortion = audioContext.createWaveShaper();
bussDistortion.curve = makeDistortionCurve(0);
bussDistortion.connect(audioContext.destination);
// Slider:
distortionAmountSlider = document.querySelector('#distortion_amount');
// Event listener:
distortionAmountSlider.addEventListener('change', changeDistortionAmount, false);
// Update function:
function changeDistortionAmount() {
bussDistortion.curve = makeDistortionCurve(distortionAmountSlider.value);
}
function makeDistortionCurve( amount ) {
var k = typeof amount === 'number' ? amount : 50,
n_samples = 44100,
curve = new Float32Array(n_samples),
i = 0,
x;
for ( ; i < n_samples; ++i ) {
x = i * 2 / n_samples - 1;
curve[i] = ( Math.PI + k ) * x * (1/6) / ( Math.PI + k * Math.abs(x) );
}
return curve;
}
似乎发生的情况是,滑块的第一次更改会导致失真曲线发生变化,但在那之后,进一步的更改不会产生任何影响。有人能解释一下发生了什么吗?
我认为这就是问题所在:
var k = typeof amount === 'number' ? amount : 50
滑块的值是一个字符串,而不是一个数字,这可以解释它第一次工作的原因(它的值为50)。所以如果你做
makeDistortionCurve(parseInt(distortionAmountSlider.value, 10));
你应该准备好了!(或者,如果需要浮点,请使用parseFloat。)
相关文章:
- 节点导出返回一个空对象
- 可以前端maven插件使用节点,npm已经安装
- 在jstree中,如何将指定的节点集中到大型树上
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 如何从模块链中调用函数.导出到节点中
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- d3基于用户选择动态更新节点
- 有条件更新d3.js力图中节点的最佳方法
- 如何处理node.js节点mongodb中的连接和查询队列
- 将DOM节点值与字符串Javascript进行比较
- 节点fs.stat名称未定义
- 无法安装节点sass相关性
- 节点协同与生成器和Promise并行流量控制
- 节点.js将变量显示为 HTML
- 将节点数据分配给另一个变量jstree
- 如何在动态创建的节点上绑定函数
- 承诺在非节点式回调上使用Bluebird
- 通过从节点父级获取所有子级对节点进行排序(获取子级数组)
- 茉莉花节点测试;t正在运行
- 播放时更改WebAudio WaveShaper节点的曲线