ソフトシンセのフィルター設計に便利なページ作った
最近、趣味でソフトシンセを作っています。
VCOやVCAはわりと簡単な仕組みで実装できることがわかりましたが、VCF(フィルター)に関してはちょっと難しかったです。アナログ回路なら抵抗1個、コンデンサー1個でできるようなトーンコントロールでさえも、ソフトウェアで実現しようとするとけっこうな数学的な数式になってしまいます。また、理論的な解説をそれなりに理解しても、実際にその数式に与えるパラメータとしては何が適切なのかがよくわかりません。
いろいろ調べてみると、RBJ Audio EQ Cookbookというバイブルのようなテキストがあって、デジタルフィルターを設計するときは、何はなくともこれを読めって感じらしいです。わりと短いテキストですし、和訳された方もいらっしゃるのでだいぶ理解の助けにはなります。
とはいえ、それでもまだ具体的なソースコードに落とし込むにはもうひとひねり必要です。ここに出てくるFsやf0やw0やalphaやb0、b1、b2……のパラメータのうち、どれが固定でどれが導出されるもので、どれがシンセサイザーのパネルのCutoff Frequencyにひもづくのかで悩みました。それからシンセのフィルターといえばレゾナンスを上げてミヨ〜〜ンという音にすることが多いですが、このレゾナンスを上げるにはどうすればよいのかも不明です。
世の中には便利な物を作る人がいて、このRBJ Audio EQ Cookbookの各種フィルターをグラフ表示するExcelシートが公開されています。これをいろいろ触ってようやく理解できました。結局のところCutoff Frequencyはf0、ResonanceはQ、Fsは44100固定としてあとはそれらから求めれば普通のHPF、LPFはできるっぽいです。
せっかくなので、ウェブブラウザだけで見られるようにJavaScriptでグラフ表示するページを作ってみました。HPF、LPFのf0とQの値を変えると周波数特性がどのように変化するかがわかると思います。
おまけで、ちょっとしたサンプルソースコードもつけています。
グラフ表示にはjQuery UIと、こちらの折線グラフライブラリを使っています。HTML5対応ブラウザで見てください。