2012-12-10 87 views
1

我期待實現模擬標準DJ混音器的3頻段均衡器。使用網絡音頻API實現3頻段均衡器

不幸的是我沒有太多的運氣。我知道它涉及到創建BiquadFilter節點並將它們連接到增益節點。不幸的是,我沒有得到任何希望的結果。

我到目前爲止唯一的成功只是gainNode來控制音軌的音量。

任何援助將不勝感激。

感謝, 斯坦

+0

控制增益我有一個非常類似的問題在這裏:創建10波段均衡器使用網絡音頻API(http://stackoverflow.com/questions/12738056/creating-a-10 -band-equalizer-using-web-audio-api) – idbehold

+0

看起來答案並沒有真正討論如何定義濾波器並將它們與增益節點連接起來。 – stan229

回答

6

我會繼續和我的答案闡述idbehold的問題:

我要說的是,你可能想使用的過濾器與5型(峯值),它可以讓所有頻率通過並僅在您設置相應的filter.frequency.value的頻率處放大/縮小。這可以讓你串聯連接濾波器,所以你不需要單獨的音頻路徑。您也可以考慮使用低架濾波器作爲第一個濾波器,使用高架濾波器作爲第三個濾波器,這在3頻段均衡器中很常見。

如果您使用峯化濾波器串聯,每個頻率都不需要單獨的增益節點,您只需爲特定濾波器設置filter.gain.value即可。

的代碼會是這個樣子:

var lowshelf = context.createBiquadFilter(), 
    mid = context.createBiquadFilter(), 
    highshelf = context.createBiquadFilter(); 

//set the filter types (you could set all to 5, for a different result, feel free to experiment) 
lowshelf.type = 3; 
mid.type = 5; 
highshelf.type = 4; 

//connect 'em in order 
yourInput.connect(lowshelf); 
lowshelf.connect(mid); 
mid.connect(highshelf); 
highshelf.connect(yourOutput); 

然後,您可以用各自的Q,頻率和增益值(檢查https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#BiquadFilterNode,看看哪些PARAMS與濾波器類型的作品),例如調節各頻段:

lowshelf.gain.value = 0.6; 
lowshelf.frequency.value = 300; 

編輯

要添加一個獨立的增益,只是做

var gainNode = context.createGainNode(); 

,然後要麼做

gainNode.connect(lowshelf); //pre EQ 

highshelf.connect(gainNode); //post EQ 

取決於你是否希望它張貼或預先的EQ。您可通過執行

gainNode.gain.value = 0.6; 
+0

如何整合一個增益節點,來控制聲音的音量。我正在模擬DJ音頻混音器。再次感謝! – stan229

+1

我已經添加到答案。 :)隨時「接受」答案,如果它幫助你! –

+0

我嘗試過使用postEQ方式,但是當gainNode增益值爲1.0時,過濾器不起作用。當我把它放下來說.95時,我可以修改濾波器的個別增益音量來聽到輸出變化。 使用preEQ方式,我沒有聽到任何濾鏡。 https://gist.github.com/4254053 – stan229