コンプレッサー(Pure Data パッチ)

Pure Data(Pd)では[limiter~]でコンプレッサーを作ることができます(zexyが必要)。自分で作ってもそこまで複雑ではありませんが、今回はニー(knee)というコントロールを追加していますので、やや大掛かりなパッチとなっています。
03p_206_1comp.png
このパッチをダウンロード
[env~ 256]は128サンプルごとに値を出力するため、[delwrite~]で原音をその時間分遅延させてタイミングを合わせています(Windows環境ではなぜかさらに64サンプル程度タイミングがずれました)。[env~]を使ったエフェクト全てに行うべき処理ですが、ディレイタイムがそのままレイテンシーの増加になってしまうため、ノイズゲートオートワウでは省きました。

[env~ 256]からのエンベロープデータは2つの[moses]で3パターンに振り分けます。threshold+kneeの値以上では通常の圧縮動作となり、threshold-kneeの値未満では圧縮がかかりません。真ん中下側と右側の[expr]の式がコンプレッサーの定義的な式となります。
(例)入力:80dB、threshold:60dB、ratio:10のとき
   →( 80 - 60 )÷10 + 60 - 80 = -18 (入力音を-18dB変化させる)

threshold±kneeの範囲では、滑らかにthresholdを変化させます。どういった曲線にするかですが、下図のような楕円を考えました。参考ページ→平行四辺形に内接する楕円の三種
03p_206_2comk.png
k=0のときは急に折れ曲がる形(ハードニー)で、kを上げていく程なだらかなカーブ(ソフトニー)になります。市販のコンプレッサーではどのように処理しているかわからないので、完全に自己流です。

attackとreleaseは音量変化にかける時間(ms)を指定します。[env~]からはデータが次々と出力されてくるので、音量変化の最中にまた次の音量変化に切り替えることになります。このため、実際の変化時間は指定した時間よりも長くかかりますが、動作の仕方としてはそれで問題ないようです。参考ページ→コンプレッサーを考える コンプレッサー アタックタイムの真実 (各種コンプ比較あり)

コンプレッサーの世界は思っていたより奥が深く、入出力の関係がもっと複雑なカーブになっていたり、周波数によって特性が違ったりするものがあるようです。まぁ私には大して違いがわからないでしょうから、あまり深追いしないことにします。

タグ : コンプレッサー PureData 

ノイズゲート(Pure Data パッチ)

Pure Data(Pd)には[threshold~]という音の始まり(立ち上がり、trigger)と終わり(立ち下がり?、rest)を検出できる便利なオブジェクトがあります。これを使うと簡単にノイズゲートを作れると思ったのですが、音声信号をそのままつなぐとtriggerとrestが頻繁に入れ替わってしまいます。この現象はおそらく[threshold~]の内部処理がエンベロープ検出になっていないために起こっているので、[env~]を入れることで対処できます。ただ更に検討していくと、[threshold~]は64サンプル分余計に処理時間がかかってしまう場合があることがわかったため、結局[env~]と[moses]でノイズゲートを作ることにしました。
03p_205_1noiseg.pngこのパッチをダウンロード
threshold以上になった信号は[moses]により右側に送られ、[change]でtriggerを検出します。検出後、左側の[change]に[set 0]が送られrestの受付を開始しますが、同時に左側の[spigot]が一定時間閉じられるため、restをすぐには検出しないようになっています。これによりtriggerとrestの短時間での繰り返しが防げます。threshold未満のときは左側に信号が送られ、同様のことが起こります。

立ち上がり時間(attack)はできるだけ短くしたいのですが、0にするとプチッというノイズが発生することがあるため、とりあえず0.1msというごく短い設定です。立ち下がり時間(decay)は500msと長い設定なのでノイズ遮断のキレが悪いですが、音の消え際を自然にするためにはやむを得ないでしょう。

(※パッチ内容を把握しきれていませんが、Isaac(139)さんのノイズゲートの方が高機能だと思います。→139 not found [Puredata]Noise Gate

バックグラウンドのノイズを消すという機能は、[rfft~]を使って周波数解析すれば実現できるかもしれません。しかしCPU負荷と処理時間の問題があるため、難しいだろうと思います。

タグ : PureData 

オートワウ(Pure Data パッチ)

[env~](エンベロープフォロワー)を使って音量データを取得し、それに応じてバンドパスフィルター(BPF)の中心周波数が変わるようにすれば、オートワウ(エンベロープフィルター)となります。中心周波数を揺らす場合のBPFは[vcf~]を使いますが、Q値が基本的に固定値となります。ペダルワウは中心周波数が高い時(ペダルを閉じたとき)Q値が小さくなりますが、そこまで再現しなくてもワウっぽい音にはなるようです。
03p_204_1awah.pngこのパッチをダウンロード
rangeコントロールは、中心周波数が最高(2200Hz)になる時と最低(440Hz)になる時の音量差を調整します。rangeが小さい方が、音量減衰時に周波数の変化が急(速くこもる)ということになります。

滑らかに中心周波数を変化させるため、周波数と変化にかける時間の数値を[pack]でまとめて[line~]に送ります。[env~ 1024]からは512サンプルごとに数値が出力されるため、変化にかける時間は、512÷44100で約12msという計算となります(44100サンプル時)。

LFOやタップテンポを入れ、周期的にワウをかけることも可能です。ただデジタルだからといって多機能にしすぎると、CPU負荷の問題が出てくるかもしれないので、シンプルな構成にしています。

タグ : PureData オートワウ 

フェイザー(Pure Data パッチ)

Pure Data(Pd)でのオールパスフィルター(APF)は[rzero_rev~]と[rpole~]を組み合わせて作ります。原音とAPFを通した音を足せばフェイザーとなります。参考ページ→Making and using all-pass filters
03p_203_1phaser.pngこのパッチをダウンロード
[rzero_rev~]と[rpole~]に入れる係数計算は、1次ローパスフィルターのときの[rpole~]用計算式をそのまま使うとうまくいきました。上側の[expr~]が2π*fc/fsの計算ですが、周波数はMXR Phase 90を参考に150~2250Hzで変化するようにしています。

Uni-Vibeもフェイザーと似た仕組みなので再現できそうなのですが、いまいち係数の設定がうまくいきませんでした。今後使いたくなったときに作るかもしれません。



【フィードバックについて】

Phase 90ではAPF最終段から2段目にフィードバックがかかっていますが、Pdで同じことをやろうとすると、「error: DSP loop detected」と出てしまいます。このエラーを回避するには、[send~][receive~]を使い1ブロックサイズ分遅延を発生させます。参考ページ→What's A "DSP-Loop"?

今回のフェイザーでは上記の方法だと出音がアナログの場合とは違うように感じたので、結局フィードバックは入れないことにしました。[block~]でブロックサイズを減らし遅延を少なくする方法もありますが、CPU負荷を考えると現実的ではないと思います。

タグ : PureData フェイザー 

ビブラート/コーラス(Pure Data パッチ)

ディレイの時には[delread~]からディレイ音を出力させましたが、ディレイタイムを連続的に変化させる場合は、[vd~](variable delay)を使います。LFOで周期的にディレイタイムを変化させると、ディレイ音の音程が揺れてビブラートがかかり、原音とビブラート音を足せばコーラスとなります。
03p_202_1chorus.pngこのパッチをダウンロード
LFOの出力はトレモロの時と同じ三角波ですが、abs関数を使うと簡単になると気づいて式を変更しました。出力範囲は0~1で、[*~ ]により振幅が調整されます。[+~ 3]を入れているのは、[vd~]の最短ディレイタイムが64サンプル分(44100サンプリング時1.5ms)となっているためで、一応余裕をみて3ms足しています。

ビブラート音をフィードバックさせればフランジャーとなりますが、いまいち数値の調整がうまくいきませんでした。今後使いたくなったときに作るかもしれません。



【depth計算について】

通常のコーラスエフェクターは、揺れのスピードを遅くすると効きが浅くなります。今回のdepthコントロールでは音程を変える幅が設定され(いわゆるデチューン機能)、rateを変更しても効果が変わらないようにしました。具体的には、最大で約25centピッチが変化するように調整しています。

詳しい原理は省くとして、例えば1000Hzの信号に可変ディレイをかけるとします。1秒間かけて徐々にディレイタイムを0から100msに変化させたとき、ディレイ音は100Hzズレて900Hzの音になります。同様に、0.5秒間かけてディレイタイムを0から25msへ変化させたとき、ディレイ音は50Hzズレて950Hzとなります。このように、比例計算によって周波数の変化幅を調節できます。

タグ : PureData ビブラート コーラス 

管理人

管理人

自己紹介のページ
記事一覧
Twitter
GitHub

ブログ内検索
カテゴリー
タグ

自作エフェクター   レイアウト   回路図   歪み   PureData   周波数特性   マイコン   波形・倍音   RaspberryPi   エレキギター   アンプ   エレキベース   エフェクター自作方法   歪率   真空管   コーラス   ピックアップ   静音ギター   ヘッドフォンアンプ   擬似ギター出力   市販エフェクター   アコースティックギター   ブースター   コンデンサ   ソロギター   ポールピース   イコライザー   コンプレッサー   ビブラート   フェイザー   トレモロ   TAB譜   ディレイ   DIY_Layout_Creator   ワウ   オートワウ   バッファー   

最近の記事
最新コメント
Twitter
RSS
メールフォーム
当ブログに関するお問い合わせはこちらからお願いします。 ※FAQ(よくある質問)もお読みください。

お名前
メールアドレス
件名
本文

アクセスカウンター