2017年11月17日金曜日

【Puredata】ノイズゲートの作り方・考え方の備忘録【Noise Gate】

こちらにて作成したノイズゲートの仕組みについて簡単に解説します。
自己流なのであまり細かいところはツッコミ入れないでください。

【ノイズの基本的な処理について】
実際の波形を見ます。
ギターを弾いていない無音部分のはずがサーッというノイズが聞こえる事が多々ありますが、ギターを弾いたときの音がどんどん小さくなると、このサーッというノイズが目立ってきます。

ということで、適度にギターの入力音量にあわせてボリュームを上げ下げすることで強引にノイズ部分も無音にします。
それこそ、ミキサーのボリュームフェーダーを上げ下げするように。


【ギターの減衰の種類について】
ただしギターは奏法により、おおまかに2種類の減衰パターンがあります。

まず、基本的なパターンのロングトーンについて。
ギュイィィィィィィィィィィィン・・・
というパターンのやつです。
これについては緩やかに音量が減衰していくので(下の図ではほぼ直線的に)、
ほぼ音量が小さくなったころにゆっくりボリュームを絞ればOKです。
逆に、いきなりボリュームを絞るとブチッと音が途切れて不自然になります。




さて、ギターには右手でのブリッジミュート・左手で軽く押さえて強制的にミュート、
音を切る奏法があります。
ズンッ や ガッ というやつです。
今回は便宜上これを手ミュートと呼びます。
手ミュートは急激に減衰(下の図ではカーブを描きながら)します。
音もわずかながら余韻で残るのですが、即ボリュームを絞らないとサーッというノイズが目立って格好悪いのです。

ここまででのおさらいで、まず

1:音の立ち上がりを即検出・ボリュームを上げる
2ー1:ロングトーンでの減衰を検出・ボリュームもゆっくり絞る
2ー2:手ミュートでの減衰を検出・ボリュームを高速で絞る

という3つの回路が必要になります。


【音量の測定とボリュームの上げ下げについて】
さて、まずは音の立ち上がりについて。
ここについては出来る限り早く検出する必要があります。
また、できるだけディストーションのような音に対して、
音痩せするようなノイズゲートにはしたくありません。
このため、Bossのような、センド・リターンのあるエフェクターのように、
adc~直下で音量を見て、ディストーションの後ろでボリューム上げ下げするメインの回路を入れました。


【メインの回路について】


ざっくり実際のメインの回路を見ていきます。
上の図でボリュームを上げる・下げる回路に分かれます。
rms変換された音量の下にclip~があります。
これは、

・ボリューム上げる回路については無音~初動のボリュームが上がり始める部分の音量を見れば良い
・ボリューム下げる回路については音量がかなり下がる~無音の部分が分かれば良い

というところで、後ろの回路で数値の処理を簡単にするために適宜調整して入れています。



【2パターンの減衰の処理】

さて、前述したとおり、減衰には2パターンあります。

2ー1:ロングトーンでの減衰を検出・ボリュームもゆっくり絞る
2ー2:手ミュートでの減衰を検出・ボリュームを高速で絞る

この処理には検出も2パターン作らないといけません。
ちなみにclip~ -10 10 が吐き出す数字については、

0~10まではギターの音が聞こえる範囲
-10~0まではギターのわずかな音とノイズが混ざった音
とでも考えてください。

これから2種類のパターンの検出方法を解説します。
が、ここで注意しないといけないのは、
単純に音量が下回ったというだけではこの2パターンは検出・住み分けできない
という点です。


まずはロングトーンから。

ロングトーンについては数値がマイナスになり始めたところから監視を始めて、
(ちょうどlogから== -1000というのが伸びてますが)音量がほぼ消えた付近で検出、
ゆっくりボリュームを絞ります。
これにより自然なロングトーンを維持して、音が終わったらノイズを消します。



次は手ミュートの波形を見ます。
検出したら急いでボリュームを絞る必要があります。
が、音量が下回っただけで検出・処理しようとしてもロングトーンと区別がつかないので
ボリュームを早く絞るか遅く絞るかこれだけではわかりません。
ただ、上の図を見ると「急激に」音量が下がります。
ということは、この減衰するスピード・量が激しいならば(接線の傾きが急になったら)手ミュートと判定できるのでは?と考えた次第です。

と考えたのですが、あまり複雑にしたくなかったので、fexpr~も使わずに考えました。
pipe 2の前後がその処理になります。
すなわち、0秒時点の音量と2ミリ秒経過した時点の音量の差を見て、急激だった場合に手ミュートと判断したわけです。

これによりボリュームをゆっくり絞る・急に絞るという処理用の検出ができました。



【トリガーについて】
ギターは弦が揺れるので物凄く短い周期で音量が上下しながら減衰していきます。
また、ギターをロングトーンで弾いたときに大きなビブラートをかければ、
減衰した音量を少しだけまた音量を上げることができます。

これによる弊害として、ロングトーンの処理が始まったかと思うと
また弾き始めのボリュームを上げる処理が始まったり、
いきなり手ミュートが始まったり、
また、手ミュートとロングトーンの処理を行ったり来たりと、
非常に不自然なボリューム処理が始まります。

これを回避するために、
ボリュームの処理をしている間は、他の処理をしないというロジックが必要になってきます。
そこで、トグルスイッチを設けてこれを把握・管理することにしました。


細かい解説は省きますが、
奏法に合わせて音量の吐き出す値・推移に一定の法則がありましたので、
1つのボリューム回路が動作している間は他の回路は動かさないようにしています。





【Puredata】ノイズゲートの作り方・考え方の備忘録【Noise Gate】

こちら にて作成したノイズゲートの仕組みについて簡単に解説します。 自己流なのであまり細かいところはツッコミ入れないでください。 【ノイズの基本的な処理について】 実際の波形を見ます。 ギターを弾いていない無音部分のはずがサーッというノイズが聞こえる事が多々あります...