2017-08-15 81 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確實使用數字指定了過濾器類型。這後來被改爲使用字符串。如果你問我,一個很大的改進。 –