17

Web Audio APIを使用して頭を包み込み、
Winampの10バンドイコライザーのようなものを再現しようとしています。

Winampの10バンドイコライザー
(出典:head-fi.org

収集できるものから、10個のバイクアッドフィルターを作成し、それらtype2(バンドパスフィルターの場合)に設定しfrequency[60, 170, 310, 600, 1000, 3000, 6000, 12000, 14000, 16000]それぞれに設定する必要があります。それが済んだら(そしてここで少し混乱します)、周波数「バンド」ごとに個別のゲインノードを作成し、その値をスライダーにバインドします。

<input id="someFreqBand" type="range" min="-12" max="12" step="0.1" value="0" onchange="slide()"/>

それがすべて正しいと仮定すると、残りの唯一のステップは、10個のゲインノードすべてをオーディオコンテキストに接続することですdestination(10個の周波数「バンド」すべてを取り、それらをミックス/同期することを想像します)。これは、Webオーディオの10バンドイコライザーを作成するための正しい方法ですか?

私が混乱している主なことは、すべてのノードが単一の入力または出力(宛先を含む)しかないため、ソースを10の周波数帯域フィルター(+関連するゲインノード)に「接続」する方法です。

4

3 に答える 3

15

すべてのフィルターをデスティネーションに接続することで、5つのパス(ルート)を作成し、ソースサウンドの5倍の増幅を聞くことができます。それは正しい方法ではありません。各フィルターを1行で接続する必要があります。

source.connect(filter1);
filter1.connect(filter2);
filter2.connect(filter3);
filter3.connect(filter4);
filter4.connect(filter5);
filter5.connect(context.destination);
于 2013-04-09T06:36:22.983 に答える
10

Matt Dが言ったように、同じ宛先にフィルターを接続するのに問題はないはずです。

ただし、タイプ5(ピーキング)のフィルターを使用することをお勧めします。これにより、すべての周波数が通過し、それぞれのfilter.frequency.valueを設定した周波数でのみ増幅/低減されます。これにより、フィルターを直列に接続できるため、10個の個別のオーディオパスは必要ありません。また、最初のフィルターとしてローシェルフフィルターを使用し、10番目のフィルターとしてハイシェルフフィルターを使用することを検討することもできます。これは、イコライザーではかなり一般的です。しかし、それがwinampの機能であるかどうかは思い出せません。

最後に、ピーキングフィルターを直列に使用する場合は、周波数ごとに個別のゲインノードは必要ありません。特定のフィルターに、filter.gain.valueを設定するだけです。

于 2012-10-10T12:29:03.350 に答える
2

私が混乱している主なことは、すべてのノードが単一の入力または出力(宛先を含む)しかないため、ソースを10の周波数帯域フィルター(+関連するゲインノード)に「接続」する方法です。

これは真実ですが、別の物理入力にのみ接続できる物理出力のように考えないでください。Webオーディオノードの単一の出力を複数のノードに接続でき、ノードは複数の入力を受信することもできます。たとえば、入力ノードを5つのフィルターに並列にチェーンしてから、それらを結合し直したいとします。あなたはこのようなことをすることができます:

source.connect(filter1);
source.connect(filter2);
source.connect(filter3);
source.connect(filter4);
source.connect(filter5);

filter1.connect(context.destination);
filter2.connect(context.destination);
filter3.connect(context.destination);
filter4.connect(context.destination);
filter5.connect(context.destination);

ここでの重要な洞察は、.connectを複数回呼び出すと、出力が別のノードに切り替わることはなく、出力接続が追加されるだけであるということです。言い換えれば、それは「ファンアウト/ファンイン」システムです。

于 2012-10-09T19:47:44.367 に答える