【发布时间】:2017-03-25 18:56:19
【问题描述】:
我有一个基于个人听力图 (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()),但我没有成功仅对单个频率进行失真。我创建的任何失真节点都会影响该通道的整个音频输出。
有什么方法可以单独对这些频率选择节点应用失真?
【问题讨论】:
-
你把 WaveShaper 节点放在哪里了?
-
@RaymondToy 我尝试将 WaveShaper 连接到每个双二阶节点,但这显然是错误的;它塑造了所有通过的声音,而不仅仅是双二阶滤波器的目标频率。然后我将它们并行重新排列,而不是串联,源 -> 分离器 -> [biquad -> 波形整形器] -> 合并 -> 目的地([那些]中的 12 个,每个通道 6 个)但这也不起作用跨度>
标签: javascript audio html5-audio web-audio-api