2017-08-15 117 views
1

所以我在浏览器中创建了一个合成器,并且想为它添加一些过滤器。我创建了所有的滤波器,并将我的振荡器连接到滤波器,并将滤波器连接到音频目标。现在,当我选择低通滤波器玩,我在控制台收到此错误,将不添加任何影响:网络音频API过滤器不起作用

The provided value '3' is not a valid enum value of type BiquadFilterType. 

片段我的代码:

function init() { 
    octaveNumber = document.getElementById("octaveNum"); 
    audioCtx = new (window.AudioContext || window.webkitAudioContext); 
    osc = audioCtx.createOscillator(); 
    volume = audioCtx.createGain(); 
    filter = audioCtx.createBiquadFilter(); 
    osc.connect(filter); 
    volume.connect(audioCtx.destination); 
    booleanVal = false; 
    osc.frequency.value = freqSlider.value 
    osc.start(); 
    gainDisplay.innerHTML = gainSlider.value; 
} 

lowpass.addEventListener("click", function(event) { 
    filter.type = 3; // In this case it's a lowshelf filter 
    filter.frequency.value = 440; 
    filter.Q.value = 0; 
    filter.gain.value = 0; 
}) 

function start() { 
    UI('start'); 
    volume.gain.value = gainSlider.value; 
    filter.connect(volume); 
} 

这是什么意思?

+0

是允许的过滤器不是这些https://developer.mozilla.org/en-US/docs/Web/API/BiquadFilterNode/type,所以在你的案例'filter.type ='lowpass'' – Quince

回答

1

你看到的错误很自我解释。基本上,filter.type = 3;不是有效的BiquadFilterNode类型,如MDN所列,“是一个字符串(枚举)值,用于定义节点正在执行的过滤算法类型。”

它的值是字符串:'highpass','bandpass','lowshelf','highshelf','peaking','notch'和'allpass'。

您可以在MDN页面找到它们的含义。

+0

我正在阅读一些愚蠢的博客文章,它出于某种原因使用数字而不是过滤器名称。现在正在工作,但得到一些奇怪的错误'提供的值'不是104行的有效的类型为OscillatorType的枚举值,它是osc.type = this.value;其中值代表正弦或三角形等波形值。所以完全没有意义。 – Limpuls

+0

@Limpus,很高兴帮助。你的新错误告诉你,你的'this.value'被设置为一个空字符串,所以它不是你可能认为的那样(因为在执行第104行时它不是'sine'或'triangle'。它稍后或异步设置)。考虑使用调试器,例如Chrome浏览器的DevTools,它可以让您设置断点并即时评估您的代码。 – rgthree

+0

为了记录,早期版本的WebAudio确实使用数字指定了过滤器类型。这后来被改为使用字符串。如果你问我,一个很大的改进。 –