我有一个小型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/

10-15 15:43