我有一个小型Web应用程序,该应用程序基于一个人的个人听力图(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个频率分离器节点的每个节点上调整增益,这是一个非常漂亮的模拟。
我想使用不同的曲线值分别向这12个二阶滤波器节点中的每个节点添加失真(使用
createWaveShaper()
),但是我没有成功地使单个频率失真。我创建的任何失真节点都会影响该通道的整个音频输出。有没有办法将失真单独应用于那些选频节点?
最佳答案
除了两个滤波器外,所有滤波器都是增益为0的峰值滤波器。基本上,所有滤波器都可以通过。因此,无论您应用哪种波形整形都将应用于整个频带。 (例如,参见http://googlechrome.github.io/web-audio-samples/samples/audio/mag-phase.html以获取响应图。)
考虑使用其他类型的滤波器,例如带通滤波器。这可能不适用于您的应用程序,但是至少这些滤波器不能让所有频率通过。
关于javascript - 如何使用javascript网络音频仅使特定频率范围失真?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43020591/