■Pure Data

■1次ローパスフィルター(Pure Data パッチ)

Pure Data(Pd)で使える各ローパスフィルター(LPF)の特性を示します。カットオフ周波数(fc)は5000Hz、サンプリング周波数(fs)は44100Hzです。
03p_198_1lpfs.png

fcが高い場合にアナログ1次LPFに近く使いやすそうなオブジェクトがないので、[rpole~]や[biquad~]を使ってみることにします。私には詳しく説明できる程の知識がないので、とりあえず計算式だけを紹介します。



<[rpole~]用>
こちらのサイトの式が一番精度が高いようです。aとbを逆にしています。
03p_198_2lpfc1.png
[rpole~]の右インレットに上記a1の値を入れます。そのままでは音量が上がるので、出力に b0=1-a1 をかけるとよいようです。

<[biquad~]用>
このアプリケーションノート(pdf)の式を使いました。
03p_198_3lpfc2.png
[biquad~]へ[-a1 0 b0 b1 0]の形で送ります。



[rpole~][biquad~]と同じ意味となる[fexpr~]も加えてパッチを作りました。適宜出力を繋ぎ替えて下さい。
03p_198_4lpf.png
このパッチをダウンロード

下図はfc=1000とfc=5000、fs=44100での特性です。高域部分が[rpole~]では上がり気味に、[biquad~]では下がり気味になるようです。
03p_198_4lpfsf.png

面倒な数式ですが結構苦労したので、いつの日かこのLPFを使うときが来ればいいなぁと思います。

■各種フィルター/パラメトリックイコライザ(Pure Data パッチ)

Pure Data(Pd)で簡単に使えるフィルターとしては[hip~][lop~][bp~]があります。それぞれの特性を下図に示します。

03p_197_1hpf.png<[hip~] ハイパスフィルター(HPF)>
カットオフ周波数を高くした場合は微妙に効きが鋭くなっているようです。ただ高いカットオフ周波数に設定することはあまりなさそうなので、実用上問題ないと思います。
03p_197_2lpf.png<[lop~] ローパスフィルター(LPF)>
カットオフ周波数を高くすると効きが悪くなり、7020Hz以上に設定するとフィルターが無効となってしまいます(44100サンプリング時)。→こちらのメールアーカイブに詳細が載っています。
代替手段としては、後述の[biquad~][rpole~]等のフィルターを用いるしかないと思われます。
03p_197_3bpf.png<[bp~] バンドパスフィルター(BPF)>
変な特性に見えますが、縦軸をdB、横軸(周波数)を対数表示にするとこのような形なります。ワウ等の中心周波数を揺らすエフェクトの場合は、[vcf~]を使います。

<その他のフィルターオブジェクト>
[biquad~][rpole~][cpole~]等のフィルターがありますが、数値の計算が複雑なため、外部ライブラリ「ggee」に頼ることにします。[biquad~]用係数計算オブジェクト8種類([bandpass][equalizer][highpass][highshelf][hlshelf][lowpass][lowshelf][notch])が使用可能になります。

例として[equalizer]を利用したパラメトリックイコライザを作りました。[equalizer]のヘルプファイルとほぼ同じですが、Q値を帯域幅(1オクターブ=100)に変換する式を入れています。
03p_197_4peq.pngこのパッチをダウンロード

■スイープ信号を使った周波数特性確認(Pure Data パッチ)

Pure Data(Pd)で様々なフィルターをかけるときに、どんな周波数特性になるか確認しておきたい場合があります。[noise~]と[rfft~]を使うのが簡単ですが、若干ギザギザな形になるのと横軸(周波数)が対数でないので使いづらさを感じていました。そこで、スイープ信号を用いて見慣れた形で周波数特性を確認できるパッチを作りました。

03p_196_3sweep.png
このパッチをダウンロード※上の図よりグラフが大きいです。)

<使い方>
[pd filter]の部分に目的の処理を入れます(今回は[hip~ 100]と[lop~ 2200]が入っています)。STARTの[○]をクリックすると、周波数スイープが始まりグラフが描画され、十数秒で自動的に終了します。count_up_valueの数値を上げると飛び飛びにスイープするため処理が早く終了します。



<解説>
下の方にある[env~ 2048]は常に1024サンプルごとに音量の数値を出力し、それにより[t b f]の左アウトレットからbangが出続けています。スタート前は[spigot]でそのbangがせき止められていますが、スタートして[spigot]の右インレットに1が入ることでせき止められていたbangが出力され始めます。

そして[+ ]からカウンターと同じ数値が出力され、この数値を元に計算された周波数の余弦波信号が[osc~ 20]から出力されます。その後[pd filter]を通った後の信号の音量が[env~ 2048]から出力され、Array "sweep"に書き込まれます。途中の[*~ 0.00044722]は、変化がないときの音量を30dBに合わせるためのものです。また、[clip 0 60]はデータがグラフの枠からはみ出さないように入れています。

カウンターには[f 1]内の数値が足されていき、533以上の数値になったとき[spigot]の右インレットに0が入り終了となります。



当初は[metro]を使ってbangを出力し続けていたのですが、[env~]の出力を利用する方が無駄がない気がして変更しました。Arrayのサイズは534と中途半端ですが、なんとなくグラフの大きさは500程度がちょうどいいかなと思って調整した結果となっています。

■バイパススイッチ/ブースター(Pure Data パッチ)

デジタルエフェクターの場合でも、物理的にトゥルーバイパスにするのも一つの手だと思います。しかし、それだとフットスイッチに別の機能を割り当てることができないので、Pure Data(Pd)のパッチ内でエフェクトオン・オフを切り替えることにします。

03p_195_1boostP.pngこのパッチをダウンロード
エフェクトオン時(トグルスイッチが[×]の時)に[spigot~]の左アウトレットから右アウトレットに出力が切り替わります。右アウトレットからの出力に対し、様々なエフェクト処理を行っていく形になります。

エフェクト切替時には下図のように、波形が途切れて雑音が出ます。[line~]で音量を滑らかに変化させれば雑音を消すこともできますが、ごくわずかなので気にしないことにします。
03p_195_2boostPi.png

エフェクト処理は、音量を増減させるだけです。ナンバーボックスで変化させる量をdBで指定します。PdでのdB値は、100が基準(等倍)なので+100しています。そして、[dbtorms]で実際計算に使う倍率へ変換します。

RasPd2ではSN比改善のため入力で+9dB、出力で-9dBしています。その関係で、入出力が最大0.32Vrms程度です。あまりないとは思いますが、単体でクリーンブースターとして使う場合には力不足となってしまいます。

■Pure Data 設定メモ(Windows 7用)

Pure Data(Pd)のインストールについては、Pure Data Japanにも記載があるのですが、私の環境(Windows 7 Home Premium)ではエラーでなかなかうまくいかないことがあったので、メモを残しておきます。



<インストール>
Pd-extendedは今後アップデートがなさそうなので、Pure Data vanillaの方を使います。puredata.infoのダウンロードページから、インストーラーをダウンロードしてインストールします(まれにサイトがダウンしています)。デフォルトのインストール先フォルダはC:\Program Files\Pd\になっていますが、念のため私はC:\Pd\に変更しています。※作成したパッチのファイルパスに全角文字や半角カタカナ・半角スペースがある場合、「~: can't open」というエラーが出ます。

Pdを実行すると、「msvcr71.dllが見つからなかったため、このアプリケーションを開始することができませんでした。アプリケーションをインストールし直すとこの問題が解決される場合があります。」というエラーメッセージが表示される場合があります。msvcr71.dllファイルをネット検索してダウンロードし、C:\Windows\System32フォルダかC:\Windows\SysWOW64フォルダに置くと解決します。



<オーディオ設定>
Media→Audio Settings...を開こうとすると、以下のエラーが出ます。{} のあたりには使っているオーディオデバイスの名前が入るようです。
(Tcl) UNHANDLED ERROR: extra characters after close-brace
while executing
"lappend audio_indevlist {}CN (Realtek High Definition}
global audio_outdevlist; set audio_outdevlist {}
lappend audio_outdevlist {Xs[J..."
("uplevel" body line 2)
invoked from within
"uplevel #0 $docmds"

日本語が問題らしく、コントロールパネル→地域と言語→管理→システムロケールの変更→英語(米国)へ変更し再起動すると、Audio Settings...が開けるようになります。

Block sizeが256だとDelayを大きくしても音切れするため、512にしています。Delayはとりあえず小さければよいようで、5msとしました。レイテンシーは65ms程度で、プロセス優先度をリアルタイムにしても変化しませんでした。Windows環境ではこれが限界だろうと諦めています。設定後はシステムロケールを日本語に戻して大丈夫です。

※ASIOを利用すると低レイテンシーが期待できるらしいですが、私の環境ではうまくいきませんでした。ASIO4Allをインストール後、PdでMedia→ASIOを選択しましたがフリーズします。システムを英語にすれば動くという情報もあり、こちらのページを参考に言語パックをインストールしてみましたが、再起動後画面が真っ黒のままとなり、システムの復元をしないと元に戻りませんでした。



<externals設定>
Pdには便利な外部オブジェクトがあり、それを使うためにはexternals(外部ライブラリ)をインストールする必要があります。例としてzexyをインストールします。
  ・Help→Find externalsからzexyを入力し検索
    ・最新のWindows用(Windows-i386-32)のものを選択
    ・デフォルトのフォルダ(.../Pd/extra/)にインストール
  ・File→Preferences→Path...→New...からインストールしたフォルダ(.../Pd/extra/zexy)を選択
※オブジェクトの種類によってはスタートアップに登録が必要なものがあるようです。
  ・File→Preferences→Startup...→New...からzexyと入力し、Startup flagsに「-lib zexy」を入力

基本的に外部ライブラリを使う場合はlibdirが必要なようです。他にも依存関係がある外部ライブラリがあるかもしれません。現状私はlibdir cyclone unauthorized ggee zexyの5つをインストールし、zexyのみスタートアップに登録しています。

■タグ : PureData

管理人

ブログ内検索

メールフォーム

当ブログに関するお問い合わせはこちらからお願いします。 ※FAQ(よくある質問)もお読みください。

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

アクセスカウンター