我有一个小型网络应用程序,可根据个人的个人听力图(http://howdeaf.com)来模拟耳聋。基本上,它是:
source -> 2-ch splitter -> 6 inline frequency separators -> merge node -> destination
-> 6 inline frequency separators ->
使用以下代码创建频率分隔符:
for (let i = 0; i < bandSplit.length; i++) {
for (let j in sides) {
var side = sides[j];
let filterNode = context.createBiquadFilter();
filterNode.frequency.value = bandSplit[i];
if (i === 0)
filterNode.type = 'lowshelf';
else if (i === bandSplit.length - 1)
filterNode.type = 'highshelf';
else
filterNode.type = 'peaking';
filterNode.gain.value = 0.0;
this.eqNodes[side].push(filterNode);
if (i > 0)
this.eqNodes[side][i - 1].connect(this.eqNodes[side][i]);
}
}
我调整12个频率分离器节点中每个节点的增益,这是一个非常简洁的模拟。
我想使用不同的曲线值将失真(使用createWaveShaper()
)添加到这12个双二阶滤波器节点中的每一个,但我没有任何成功扭曲只是个人频率。我创建的任何失真节点都会影响该通道的整个音频输出。
有没有办法在个别基础上对这些频率选择节点应用失真?
答案 0 :(得分:0)
除了两个滤镜之外的所有滤镜都是峰值滤镜,增益为0.这基本上可以让一切都通过。因此,无论您应用哪种波形,都可以应用于整个频段。 (例如,参见http://googlechrome.github.io/web-audio-samples/samples/audio/mag-phase.html以获取回复的图表。)
考虑使用不同类型的滤波器,如带通滤波器。这可能不适合您的应用程序,但至少这些过滤器不允许所有频率通过。