我一直在涉足 WebAudio API,但由于某种原因,我无法让双二阶滤波器工作。我的振荡器、包络和自定义效果都工作正常,但滤波器一直给我带来麻烦。
我有一个主增益控制vca
,我想通过过滤器将其发送到context.destination
。 vca
的定义简单如下:
var vca = context.createGain();
vca.gain.value = 0.3
我的过滤器是这样构建的:
function lowpass() {
var filter = context.createBiquadFilter();
filter.type = 'lowpass';
filter.frequency.value = 1000
}
var filt = new lowpass
当我尝试运行以下命令时,CodePen 抛出类型错误:
vca.connect(filt);
filt.connect(context.destination)
为什么会发生这种情况?是不是滤波器设置有问题,我连接VCA的方法有问题吗?我构建过滤器的方式?谢谢。
最佳答案
这是创建新过滤器的方式。 lowpass()
是一个常规函数,但 new
关键字将其视为构造函数。
您可以通过将代码作为常规函数调用并从中返回过滤器
来修复代码。
function lowpass() {
var filter = context.createBiquadFilter();
filter.type = 'lowpass';
filter.frequency.value = 1000
return filter;
}
var filt = lowpass()
如果想更进一步,您可以将 context
传递到函数中,而不是依赖于在外部作用域中定义的 context
来使其更清晰一些.
function lowpass(context) {
var filter = context.createBiquadFilter();
filter.type = 'lowpass';
filter.frequency.value = 1000
return filter;
}
var filt = lowpass(context)
关于javascript - 当我尝试将音频连接到双二阶滤波器时,为什么 JS 会抛出类型错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61423283/