0

Web Audio API の WaveShaperNode の伝達関数がどのように機能するか理解できません。私が理解しているように、伝達関数は、信号入力xを取り込み、新しい信号yを生成するウェーブシェイパーです。そう、

y = f(x)

xがゼロに等しい場合、yもそうであることを理解しています。したがって、0 = f(0). 適切な範囲に収まるように、yは [-1, 1] の間にある必要があるため、この関数y = x / (1 + |x|)は出力範囲を [-1, 1] に制限します。また、チェビシェフ多項式は、音楽入力信号を「歪める」ために使用される伝達関数に役立ちます。

ただし、伝達関数の場合、入力信号xを操作して出力yを作成するには、入力信号 x が必要です。ただし、Web Audio API の WaveShaperNode では、元の入力xにアクセスできません(またはアクセスしますか?)。多くの場合、次のようなアルゴリズムを目にします。

for(var i = 0; i < sampleRate; i++){
    var x = i * 2 / sampleRate - 1;
    this.curve[i] = (3 + distortionAmount) * x * 20 * (Math.PI / 180) / (Math.PI + distortionAmount * Math.abs(x));
}

上記のコードのthis.curveは、各サンプル フレームのグラフを表す Float32Array です。xここでは、入力オーディオ信号を表すと想定しています。ただし、実際には正確な入力オーディオ信号を表しているわけではありません。これは、平均的な正弦波を表しているだけで、実際の入力は重要ではないためですか? WaveShaperNode は元の入力xを受け取り、出力yを計算するために作成した一般的な曲線を使用 (乗算?) しますか?

4

2 に答える 2

2

WaveShaper ノードは、それ自体では一般的な伝達関数を有効にしませんが、それを使用してそれを行うことができます。あなたの質問に答えるために- x は配列へのオフセットであり、少し前処理されています。

ウェーブシェイパーに与える曲線は、x のルックアップ テーブルのようなもので、[-1,1] の範囲に広がります。Y は [-1,1] にある必要はありませんが、x にはあります。したがって、[-1,1] の x について f(x) を解くには、

curve[ Math.floor( (x+1)/2 * (curve.length-1) ) ];

またはそのようなもの。

x が 0 に等しい場合、y もそうでなければならないというのは実際には正しくありません。しかし、それは可能性があります。たとえば、ウェーブシェイパーを使用して DC オフセットを実装できます。

デモ コードの「sampleRate」ビットは間抜けです。配列のサイズを決定するには、samplerate ではなく maxint を使用する必要があります。sampleRate は時間領域のものであり、ウェーブシェイパーは振幅ベクトルでのみ動作します。

于 2015-02-04T01:10:52.687 に答える
0

WaveShaperNode は、非線形歪みを適用するものとして説明されています。そのため、従来の線形時不変伝達関数 (厳密には線形歪みにのみ適用されます) はありません。

于 2015-02-03T18:36:13.487 に答える