0
我正在做下采樣48hkz到16khz。要做到這一點,我需要一個過濾器來防止混淆。 WebAudio API已經filters,而這正是我要尋找:BiQuadFilters vs MyOwnFilter - Javascript WebAudio API
biquadFilter = context.createBiquadFilter();
biquadFilter.type = "lowpass";
biquadFilter.frequency.value = 12000;
biquadFilter.Q.value = 3;
,但我可以用這個簡單的算法使這個:
//Order 3 - Indirect form 2
var a_coef = [1.000000000000000, -0.965779713179161, 0.582644165984302 , -0.106017056545330];
var b_coef = [0.063855924532476, 0.191567773597429, 0.191567773597429, 0.063855924532476];
var z1 = 0; var z2 = 0; var z3 = 0; var z0 = 0;
for (var i = 0; i < buffer.length; i++) {
z0 = buffer[i] + a_coef[1] * z1-a_coef[2] * z2-a_coef[3] * z3;
buffer[i] = b_coef[0] * z0 + b_coef[1] * z1+b_coef[2] * z2 + b_coef[3] * z3;
z3 = z2; z2 = z1; z1 = z0;
};
哪種方式消耗更多的資源? BiquadFilters在本地代碼中被翻譯?是最有效的方法嗎?
所以儘管「myownfilter」的操作簡單。 WebAudioAPI的過濾器將始終在「結果與資源消耗」關係中做得更好。 – carduh
你能否給我一些鏈接,我可以證明WAAPI的哪些部分是用本機代碼寫的? @OskarEriksson – carduh
當然可以! BiquadNode(以及其他API)可以在這裏找到:https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/modules/webaudio/BiquadFilterNode.cpp&sq=package :鉻 –