アナログシンセのモジュールアーキテクチャ
intro
この記事は、 Web Music Developers JP Advent Calendar 2012 の 22 日目の記事です。
今日は、モジュラーシンセサイザーの仕組みと、それがアーキテクチャ的にはモジュールの集まりで、
しかもそれらモジュールは Stream であると解釈できる点について紹介する。
このブログでは基本的に技術的なトピックしか扱わない。今回も限りなく音楽ネタに近い技術ネタ?だというつもりで書き始める。
"音" とは何か?
「音」とはなにか。
さて、ここから始めねばなるまい。
(と、書き出したかっただけで、読み返すとあまり必要はなかった)
音の世界の深淵に潜り込むと出てくる前に左小指が腱鞘炎になってしまうので、
ここはひとつ、音の「三大要素」にご登場願おう。(理科の時間に習ったよね?)
- 音圧
- 音程
- 音色
まず、音圧だがこれは面倒だから音量(大きさ) と同じだと思っておいていい。
例えば(正確には違うが)、同じピアノを弾いていても、叩く力を変えれば変えることができる。
音程は高さ、ドレミファで表せるあれだ。同じピアノでも叩く鍵盤で高さを変えられる。
音色、これは楽器で言えば個々の独自の音だ。
例えばピアノの「ド」と、バイオリンの「ド」は違う音だ、
当たり前だが、この音色は基本的には楽器を持ち替えない限り変えることはできない。
ピアノを何十年弾きこんでも、バイオリンの音は出せないのだ。
シンセサイザーの挑む領域は、ひとつの楽器でこの三つの要素を全てコントロールしようというところにある。
synthesiser
synthesis とは「合成」という意味であり、
synthesiesr は「波形を合成して音を作り出す」装置ということ。
音の基本となる波形を作り出し、それを鍵盤でコントロールし、アンプで鳴らすというのが、
楽器としてのシンセの基本構造だ。
スピーカで実際の「音」に変換されるまでの全ての工程では、あくまでも電気信号である。
この電気信号に対する操作を行うための様々なモジュールをシンセサイザーは備えている。
基本的なモジュールには以下の種類がある。
- Oscillator
- Filter
- Low Frequency Oscillator
- Envelope Generator
他にも色々な種類があるが、今回は上記基本モジュレータを例にシンセサイザーの仕組みを解説してみたい。
サンプルとして、手元にある Korg の名機 MS-20 の MIDI-Keyboard で実装を確認する。
Oscillator
VCO (Voltage Controlled Oscillator) と呼ばれ、日本語では発振器という。
音の基本になる波形信号を生成する装置、シンセの心臓だ。
最も基本的な波形はサイン波であるが、これはスピーカーを通しても味気ない音しか出ないので、
多くの場合合成波形を生成する。典型的な波形は以下の様なものだ。
- サイン波
- ノコギリ波
- パルス波
- ホワイトノイズ
- リングモジュレータ(本格的なシンセにしかない)
これらを、ピッチやパルス幅などのパラメータを与えて生成する。
つまりシンセ内でのインタフェースとしては、幾つかのパラメータを取得して波形を生成する
Readable Stream といえる。
MS-20 の場合は、二つの VOC を搭載しており、ここで生成した波形をミキサーで混ぜることで、
より幅広い音作りができるようになっている。
Filter
基本的には以下の二つがある。
- High Pass Filter
- Low Pass Filter
例えば、High Pass Filter はすなわち Low Cut Filter と同意であるがフィルターの命名規則は「パスする帯域」に由来する。
名前の通り、 VCO からの波形をインプットとして受け取り、不要な周波数帯域をカットしてアウトプットする Filter Stream である(これぞ Filter !!)。
MS-20 の場合、カットオフ周波数とレゾナンス(peak)をパラメータとして渡すことができる。
アナログ回路の場合、レゾナンス値を振り切るとフィルターが発振し、オシレータになるという荒業がアナログファンを虜にした。
(にくい事に、KORG のアナログモデリングシンセは、デジタルでもこの現象が起こるようにしてくれている。さすがは日本が世界に誇る企業だ、わかってらっしゃる。)
Low Frequency Oscillator
LFO もオシレータなのだが、このモジュールの目的は音自体ではなく低周波数の波形を合成した時に生じる波形の「うねり」の生成が目的だ。
このうねりは、シンセによっては様々なパラメータに作用させることができる。
例えば、フィルターのカットオフをうねらせたり、ピッチをうねらせたり、音量をうねらせたり。
また、この周波数を変更することはうねりの幅を変化させるので、いわゆる
「みょーーんみょーんみょんみょんみょんみょみょみょ〜〜〜〜〜〜〜〜〜〜〜〜〜」
みたいなあれ(ww) をやるには、大体この辺をいじると変態感が味わえてメシウマである。
パラメータとしては、別のオシレータ出力を受け取り、それを元の波形に合成するので、
Stream としてはちょっと複雑な実装になるだろう。
Envelope Generator
これは、音の時間的な音量変化を決めるモジュールだ。
基本的には音の時間変化を ADSR という 4 つのフェーズで調整する。
- Attack
- Decay
- Sustin
- Release
Attack は音の立ち上がりだ、鍵盤を押した時に一番大きな音量になるまでの時間を決める。
打楽器などは短く、バイオリンなどの音色を作るときは多少長くしてやる。
Decay は Sustin で決めた音量に遷移する時間。
Sustin は鍵盤を押している間になり続ける音の大きさだ。
Release は鍵盤を話した時に、音が消えるまでの時間を調整する。余韻の部分になる。
よくある図では以下のようになる。
このモジュールはパラメータに時間を取り時間軸でコントロールをするため、自身も内部にタイマーを持つ、もしくは外部から時間を取得し合成するような特殊な FilterStream と考えることができる。
MS-20 では 2 つ積まれている。
パッチング
他にもシンセは様々な機能を持つが、多くは上記に挙げたものを基本としている。
つまり、モジュールとして用意した Stream をつないで波形を生成してく構成だ。
そして、モジュラーシンセはこうしたモジュールを、インプットとアウトプットを公開した形で用意している。そして、それらのインタフェース(多くは電圧)を合わせた上で各モジュールをケーブルでつなぐと、機能を拡張することができるのだ。
MS-20 では盤面右側がそこにあたる。以下の写真では
- White Noise(右下) を用いて VOC の周波数(左上)をランダムに変化させる
- パルス(左下)を用いて LPF のカットオフ(右上)を変更させる
というパッチングをしている。
他にも外部からのインプットを受け入れたり、波形をコントロールトリガとして再度別のモジュールに適用したりなど、自由度の高い音作りが可能だ。
よくシンセサイザーの写真がケーブルだらけなのは、こうしたモジュールの pipe() を自前でやっているからである。このケーブルがまさしく pipe 処理になるわけだ。
スケーラビリティ
これらのモジュールは、基本的にインプットとアウトプットと合成のみを行うため、参照透過性を守っており、スケールさせやすい。
最終的なアウトプットをまとめるミキサーのインプットが許せば、無限にスケールさせることも可能だ。
以下は、アナログシンセの父である Dr.Moog の有名な写真だ。
手前のは VCO が 1, 2 個しかない mini moog というシリーズだが、
奥に並んでいるシンセは今回紹介したようなモジュール一式を縦に並べたものをユニットとし、ユニットごと水平にスケールさせていることがわかる。
(http://moogarchives.com/ より引用)
また、同様に外部モジュールもユニットにまとめてスケールさせており、必要に応じてケーブルで pipe されているのも見て取れるだろう。
日本では箪笥(たんす)と呼ばれた moog のアナログシンセは、こうした洗礼されたインタフェースを持つモジュール(stream) を pipe により自由に組み合わせ可能な疎結合な形で用意し、さらに水平スケールも可能な秀逸なアーキテクチャだというわけである。
駄文もいいところだが、書いた本人は非常に満足しているのでこの辺で終わりたいと思う。
(本当はもっと書きたいことがあった気がするが、それはまたいつか)