Javascript 为什么在我尝试将音频连接到双四元滤波器时JS抛出类型错误?
我一直在涉猎WebAudioAPI,由于某些原因,我无法让双四元过滤器工作。我的振荡器、封套和自定义效果都很好,但滤波器一直给我带来麻烦 我有一个主增益控制Javascript 为什么在我尝试将音频连接到双四元滤波器时JS抛出类型错误?,javascript,audio,typeerror,web-audio-api,Javascript,Audio,Typeerror,Web Audio Api,我一直在涉猎WebAudioAPI,由于某些原因,我无法让双四元过滤器工作。我的振荡器、封套和自定义效果都很好,但滤波器一直给我带来麻烦 我有一个主增益控制vca,我想通过我的过滤器将其发送到context.destinationvca的定义如下: var vca = context.createGain(); vca.gain.value = 0.3 我构建的过滤器如下所示: function lowpass() { var filter = context.createBiquadFi
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()
如果您想更进一步,您可以将上下文
传递到函数中,而不是依赖将在外部范围中定义的上下文
,使其更干净
function lowpass(context) {
var filter = context.createBiquadFilter();
filter.type = 'lowpass';
filter.frequency.value = 1000
return filter;
}
var filt = lowpass(context)
这就解决了问题–您的回答还说明了我的代码中的其他问题,即对非构造函数调用new
。我还将频率的方法更改为filter.frequency.setValueAtTime(1000,context.currentTime)
,这可能会有所不同。