2016-12-12 5 views
2

コンテキスト:Attack、Decay、SustainおよびReleaseがすべてAudioParamsのWebAudioAPIにADSRエンベロープを実装しようとしています。「ノートオン」と「ノートオフ」は入力それぞれ1と0の値。私は4つのDynamicCompressorノードを使用しており、これを達成するために多くのゲイン操作を行っています。これは、コンプレッサーが技術的にアタック・リリース・エンベロープであるためです。WebAudioAPI:2つのAudioNodesの出力を分割する

減衰信号を生成するDynamicCompressorと組み合わされたレベルオフセットを得るために、ある信号のレベルを別の信号のレベルで除算する必要があるという点を除いて、すべてがうまくいっています。 sustainLevelattackDurdecayDurはすべてAudioParamsであることを

decayOffsetY = (1 - sustainLevel) * (attackDur + decayDur)/decayDur 

注:それが助け場合

は、ここで式です。

加算、減算、および乗算はいずれもConstantSourceNodesGainNodesを使用するとかなり簡単に達成できますが、除算についてはどうすればよいですか?

注:私は、圧縮機は、技術的に比で信号を分割するため、分割を実行するために別のDynamicCompressorNodeの使用について考えたが、この比は、対数スケールであり、そしてIは

の圧縮率で終わります
log(decayDur)/5 

1/decayDurの値を達成し、別のGainNodeに接続します。しかし、AudioNodesだけでMath.logを実行することは可能ですか?

答えて

2

WaveShaperNodeを使用して逆またはログを計算します。入力がゼロに近く、波形シェイパーのカーブ配列を作るのにどれくらいの時間がかかるのかを理解する必要がありますが、これはうまくいくはずです。

+0

ワウ私は単なるディストーションツールとして波打ちを見落としました。私は 'WaveShaperNode'入力が-1から1の範囲に制限されていることを理解していますが、この制限も出力にも当てはまりますか? – euwbah

+0

良い質問です。出力は同じ範囲に限定されません。それは多かれ少なかれ任意であるべきです。 –

関連する問題