今回は、ボコーダーの実装方法をもう少し詳しく見ていきます。また、既存製品としてRoland VP330の回路を調べてみました。
前回はボコーダーの原理を説明し、Pythonでの実装例を載せました。以下が前回の記事で載せたボコーダーの原理図です。図にあるパーツの具体的な実装方法を見ていきましょう。
フィルターバンク
フィルターバンクはボコーダーの肝となる部分で、バンドパスフィルタのセットです。バンドパスフィルタの個数と、個々の通過帯域を決める必要があります。
フィルタは人間の声の特徴を捉える必要がありますが、特に母音の特徴を捉えるためには、第一フォルマント(500Hz-)と第二フォルマント(1000Hz-)を捉えることが重要です。さらに高次の、第三フォルマント(2500Hz-)や第四フォルマント(3500Hz-)もあります。(こちらの図が分かりやすいです。)下図は、WaveSurferというソフトで「あいうえお」と言っている声を分析したものです。赤緑青黄のそれぞれの線が第一~第四フォルマントの周波数を表しています。特に赤と緑の線がどの高さに位置するかで、母音の種類が判別できます。
バンドパスフィルタで抽出した帯域ごとの信号は、次で述べるエンベロープフォロワで強度を抽出するのに用います。一方、キャリア信号も同様のフィルターバンクを通し、BPFごとにその後段にVCAを置いて、エンベロープフォロワの信号で音量を制御します。それをミックスすると、キャリア信号に母音の特徴を載せることができます。
このとき、キャリアが通るフィルターバンクの各BPFは、モジュレータが通るフィルターバンクのそれとは周波数設定を変えることがあります。これによってフォルマントの位置も変わりますが、より人工的な感じの音を作ることができます。
エンベロープフォロワ
エンベロープフォロワはモジュレータ信号の帯域ごとの音量変化を抽出するものです。バンドパスフィルタの出力の絶対値の包絡線を取るようなイメージです。
アナログ的には、ローパスフィルタを通せば音量変化は低周波成分として抽出できますが、打楽器音などの急峻なアタック成分は抽出できません。人の声の場合は、破裂音などを無視するならば、ローパスフィルタで抽出できそうです。
オシレータ
ボコーダーに入力されるのはキャリアとモジュレータの2つの音声信号で、キャリアがシンセサイザーなどの音、モジュレータが人の声です。ただ、キャリア信号に求められるものは普通のシンセサイザーのオシレータに求められるものとは少し違います。
キャリア信号は音程を表現する一方で、フィルターバンクで抽出したモジュレータの特徴も反映できる必要があります。従って倍音成分が豊富であることが重要である一方、フィルターバンクを必ず通る前提なので、それ自体で聴く場合に必ずしも綺麗な音色である必要はありません。
もちろん基本は倍音成分を多く含むパルス波や鋸波になりますが、音色の美しさを犠牲にしてでも、ポリフォニックであることを重視するのが良さそうです。また、人間の声には母音以外にも、「サシスセソ」の子音のような摩擦音(ノイズのような音)が含まれています。これらは鋸波やパルス波ではうまく再現できないので、ノイズをミックスすることが有用です。
VP330の調査
YMOも使っていた、もっとも有名なボコーダーの一つであるRoland VP330について、サービスマニュアルなどからその内部構造を見てみます。
フィルターバンクとエンベロープフォロワ
VP330は、サービスマニュアルによると10バンドのフィルタを使っていました。下のビデオはラックマウント型のVP350ですが、ボコーダーとしてはほぼ同一です。11バンドあるように見えますが、11番目は10番目のBPFよりも高い周波数帯のためのHPFとなっています。
下図はVP330のサービスマニュアルに載っていた、最低帯域のバンドパスフィルタです。左半分がモジュレータ用、右半分がキャリア用で、いずれもオペアンプを使った多重帰還形バンドパスフィルタを2段カスケードしています。計算してみると、モジュレータ側の1段目は中心周波数178Hz、Q=6.89、2段目は中心周波数198Hz、Q=6.27となります。1段目と2段目の中心周波数をずらすことで、減衰は大きくしつつピークをなだらかにしているのではと思われます。
モジュレータが通ったバンドパスフィルタの後にはローパスフィルタ(IC20)があります。これがエンベロープフォロワ(ピークディテクタ)の役割を担っています。計算してみると、このフィルタはカットオフ59Hz、Q=0.61となっています。
その直前にIC35~IC37としてスイッチのようなデバイスがありますが、これはホールドスイッチにつながっています。VP330は、ホールドスイッチをオンにするとその時点のエンベロープフォロワの値がロックされ、モジュレータの入力に関わらず周波数分布をキープできるようになっていました。
エンベロープフォロワの信号は、コンパレータIC41を通ってから、キャリア信号が通る2つのバンドパスフィルタの途中のアナログスイッチ(IC38~IC40は4066です)に入力されています。この部分は、エンベロープフォロワの信号をPWMに変換しているようです。図にありませんが、コンパレータIC41のもう一方の信号は12KHzの三角波となっていました。エンベロープフォロワと三角波を比較して、エンベロープフォロワの方が大きければスイッチがオンになります。そのオンオフ周期は12KHzですが、その後ろのBPFでカットされますので、結果としてBPFの出力×エンベロープフォロワの出力が信号として取り出されます。
エンベロープフォロワの信号を直接使わずにPWMを使うメリットとして、エンベロープフォロワの微小な信号を足切りしたり、過大な信号をクリップできることが考えられます。コンパレータに入る三角波の最小値と最大値で、PWMの出力は0と1になりますが、エンベロープフォロワの値が三角波の最小値より小さかったり、最大値より大きかったとしても、PWMの出力が0より小さくなったり1より大きくなることはないからです。
エンベロープフォロワの信号が2つのBPFの中間に入力されているのは、後段のBPFを使ってPWMの12KHzのキャリア信号をカットするほかに、エンベロープフォロワ自体が持つ低域成分をカットするという目的もあるのではと思います。
上の図はVP350のサービスマニュアルにあったフィルターバンクの構成図です。ここでそれぞれのBPFの帯域が読み取れます。また、6KHz以上の帯域をHPFで取り出し、それを出力にミックス可能になっていることが分かります。この信号の音量は、図左下のピークディテクタ(エンベロープフォロワ)で決定されています。このピークディテクタはキャリア信号につながっているので、HPFを通った音は、キャリアの音が出ている間だけミックスされることになります。
また図中にはモジュレータ側、キャリア側、それぞれ中心周波数が記載されており、以下のようになっています。
150Hz 170Hz
220Hz 250Hz
350Hz 350Hz
500Hz 520Hz
760Hz 760Hz
1.1KHz 1.2KHz
1.6KHz 1.8KHz
2.2KHz 2.5KHz
3.6KHz 3.5KHz
5.2KHz 5.8KHz
必ずしも単純に帯域をスライドしているわけではなく、高くなったり低くなったりしているのは興味深いところです。
オシレータ
次にキャリア信号です。VP330はフルパラフォニック、つまり全鍵盤で同時発音が可能です。ボコーダーなのでフィルタは1セットですが、エンベロープは各鍵にAHR型のものが付いています。
以下がVP330のオシレータ部のブロック図です。
ここでTop Octave Dividersとあるのは、AY-3-0214というチップです。このチップはマスタークロックから1オクターブ=12半音分のトーン(矩形波)を生成します。
その出力がTone Dividersにつながっていますが、これは12音それぞれにつながっている4ビットカウンタです。つまり、一番高いオクターブの12個のトーンをまず生成し、それを4ビットカウンタに入れて分周し、12×4オクターブ分の矩形波を生成しています。こうして全鍵盤に対応する波形が供給され、あとはそれを鍵盤でオンオフするだけとなります。
なお、図をよく見ると、キーを押すとそのキーの音と、その1オクターブ上の音が同時に鳴らされるようになっています。この2つはそれぞれ別の回路で利用されます。
以下は鍵盤でトーンをオンオフする部分の回路です。トランジスタQ1、Q2、Q3が鍵盤の最高音を担当しています。Q1がエンベロープを構成し、Q2には周波数2fのトーンが、Q3には周波数fのトーンが供給されています。
左端にキースイッチがあり、キーを押すとQ1が駆動されます。キーを離すと、C1とD1がエンベロープのリリース信号を生成します。Q1の先には、Q2とQ3があり、Q1が駆動されるとQ2とQ3が同時に駆動され、結果として周波数2fとfのトーンが同時に出力されます。
この2つのトーンのうち、周波数fのトーンは積分回路を通ってボコーダーへ供給されます(U8’)。もう一方はVP330の別の機能である、ヒューマンボイスやストリングスの生成に用いられます。
ここで興味深いのは、Q3のベース信号にはコンデンサC3が直列に入っており、同じ信号が入力されているQ5にはコンデンサが入っていないことです。つまり、ボコーダーへ送られる信号は、矩形波ではありません。
Q2周辺の回路はJunoシリーズの矩形波から鋸波を生成する回路に似ています。トーン信号として供給されている矩形波はコンデンサによって短いパルスとなって、トランジスタQ3をスイッチします。パルスが来るとQ3のコレクタ・エミッタ間が導通し、コンデンサC4は放電されます。キーが押されてQ1が駆動されているときは、パルスが終了するとC4はR7によって充電されていき、Q3によって放電される、という動作を繰り返します。この結果、鋸波状の波形が出力されます。
また、ブロック図を見る限りではVP330にはノイズジェネレータは無いようです。モジュレータに含まれる高域成分はハイパスフィルタで取り出して、出力側へ直接ミックスできるようになっていますので、キャリア信号で再現する必要はないということかもしれません。
以上でVP330の話は終わります。次回は他のボコーダーについても書きたいと思います。
コメント