如何使用javascript网络音频扭曲特定的频率范围?

时间:2017-03-25 18:56:19

标签: javascript audio html5-audio web-audio

我有一个小型网络应用程序,可根据个人的个人听力图(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个双二阶滤波器节点中的每一个,但我没有任何成功扭曲只是个人频率。我创建的任何失真节点都会影响该通道的整个音频输出。

有没有办法在个别基础上对这些频率选择节点应用失真?

1 个答案:

答案 0 :(得分:0)

除了两个滤镜之外的所有滤镜都是峰值滤镜,增益为0.这基本上可以让一切都通过。因此,无论您应用哪种波形,都可以应用于整个频段。 (例如,参见http://googlechrome.github.io/web-audio-samples/samples/audio/mag-phase.html以获取回复的图表。)

考虑使用不同类型的滤波器,如带通滤波器。这可能不适合您的应用程序,但至少这些过滤器不允许所有频率通过。