我一直在四處尋找使用Web音頻API創建音頻均衡器:http://webaudio.github.io/web-audio-api/網絡音頻API均衡器
我發現了很多有關創建可視化線程的,但當然不是我想做的事。我只是想要使用頻率滑塊來改變聲音。我發現biquadFilter應該做的工作,但我不能得到一個好的結果。當我改變任何頻率值時,聲音會一直改變,但它會降低聲音的質量,同時會改變頻率。
我第一次加載聲音:
Audio.prototype.init = function(callback){
var $this = this;
this.gainScale = d3.scale.linear().domain([0,1]).range([-40,40]);
this.context = new AudioContext();
this.loadSounds(function(){
$this.loadSound(0);
$this.play();
callback.call();
});
};
一切運作良好,聲音播放時,準備好了。
我有10個頻率滑塊[32,64,125,250,500,1000,2000,4000,8000,16000]。 對於每個滑塊創建過濾器,我將其連接到源,如描述在這裏:Creating a 10-Band Equalizer Using Web Audio API:
Audio.prototype.createFilter = function(index,frequency){
if(this.filters == undefined) this.filters = [];
var filter = this.context.createBiquadFilter();
filter = this.context.createBiquadFilter();
filter.type = 2;
filter.frequency.value = frequency;
// Connect source to filter, filter to destination.
this.source.connect(filter);
filter.connect(this.context.destination);
this.filters[index] = filter;
};
最後,當我改變滑塊的值I更新濾波器:
Audio.prototype.updateFilter = function(index,newVal){
this.filters[index].frequency.gain = this.gainScale(newVal);
};
注意:我的this.gainScale函數將[0,1]中的值作爲輸入,並返回[-40,40]中的值以將增益設置爲-40至40之間的每個頻率。
將不勝感激任何幫助!
嗨,非常感謝,它解決了我的大部分問題,並開始聽起來像是不是太糟糕。 基本上,我現在只是創建沒有類型的過濾器,而不連接它們。 然後,我根據過濾器索引給出一個類型(0:lowshelf,0 Charles
結合每個頻率的低架和高架濾波器怎麼樣? –
例如,如果您想修改250赫茲的增益,將350減少到350以上,將第二個高架減少到150,從而將所有的部分切割到150以下。連接兩個增益並一次修改它們的值?您認爲這樣會起作用嗎? –