前回はRolandのボコーダー、VP330を調査しました。続いて今回は、KORGのVC-10およびその他のボコーダーの実装を見てみます。
KORG VC-10の調査
コルグはVC-10というボコーダーを出していました。発売はVP330より1年あまり早い1978年4月となっています。坂本龍一の「千のナイフ」のイントロで使われているのが有名です。
下図はVC10のブロック図です。モジュレータ信号そのものを出力にミックスできるようになっています。また、オシレータとノイズをミックスしてキャリアとすることができます。
フィルターバンク
このボコーダーは、サービスマニュアルによると、下図のように20バンドのフィルタを使っています。ただし、キャリア信号としてオシレータの音が入力されているのは1~16の各バンドで、17~20のバンドにはオシレータではなくノイズジェネレータの信号が入力されていました。おそらくサシスセソなどの子音の摩擦音の再現を狙ったと思われます。
また、BPFを抜けたキャリア信号をミックスする際に、帯域によって5つの異なる設定のアンプを通るようになっており、ここでさらに低域成分をカットしているようです。
フィルタはカスケードした多重帰還形バンドパスフィルタで、VP330と同じく1段目と2段目で微妙に定数を変えてあります。ただしモジュレータ側とキャリア側のフィルタの定数は一致しています。
回路定数からそれぞれのBPFの特性を計算することができます。フィルタのQは抵抗だけで決まりますが、抵抗の値は全フィルタで固定となっているため、Qの値は全フィルタで同じで、1段目はQ=7.10、2段目はQ=7.16となります。
中心周波数はそれぞれ以下のようになっていました。(1つ目が1段目、次が2段目のフィルタで、単位はすべてHzです。)
241 199
290 240
343 284
419 347
514 426
628 521
754 625
943 781
1131 938
1379 1143
1663 1379
2020 1674
2406 1995
2900 2404
3427 2841
4189 3473
5141 4262
6283 5209
7540 6251
9425 7813
なお前述したように、周波数の高いほうの4つのフィルタはキャリア信号としてホワイトノイズだけが入力されています。
エンベロープフォロワ
以下の図は1つ分のバンドパスフィルタの回路です。左側に3つ入力があり、一番上がモジュレータ、一番下がキャリアです。真ん中はエンベロープフォロワに与えるバイアス電圧を与えています。
モジュレータ側のBPFの出力は、オペアンプとダイオード2つで構成された半波整流回路を通り、次のオペアンプで元信号と2:1で加算されて信号の絶対値に変換されます。
この信号はその先につながる電解コンデンサをチャージします。信号が来なくなると、コンデンサはR2301とR2401を介して接続されているバイアス電圧に向かってゆっくり放電していきますが、この過程がエンベロープのリリースを構成します。
そのエンベロープの出力はトランジスタQ101を介して、キャリア側のBPFを経由した音量を制御しています。Q101のバイアスの設定は、フィルターバンクのブロック図に記載されているとおり、1~14番目、15・16番目、17~20番目(キャリアがホワイトノイズ)で、それぞれ異なる電圧が与えられています。
なお、このエンベロープの信号はもう一つ、右端のR1401を通じて取り出されています。この信号は、全フィルタについて加算された結果が「アクセント信号」として、オシレータのピッチ制御信号に入力されています。
オシレータ
VC10は32鍵のキーボードがあり、フルパラフォニック、つまり全鍵盤で同時発音が可能です。そのために発振回路を32個搭載しています。下の図は、その1つ分の回路です。(元の回路図を90度回転しています。)
左上がキースイッチにで、このゲート信号はまずコンデンサとダイオードで構成されたエンベロープ回路へ入ります。ここでアタック/リリース信号を作っています。その先にあるトランジスタは、中央下部にある発振回路からのトーン信号を、エンベロープ信号に合わせて右端のオペアンプへ供給しています。
発振回路を構成しているのは、図の中央下部のダイオードに端子が1本増えたような素子と、その右隣のコンデンサです。このダイオードに似た素子はPUT(プログラマブルユニジャンクショントランジスタ)です。この素子はアノード側の電圧がゲート(斜めに出ている制御線)の電圧を超えると、アノード・カソード間が導通します。
コンデンサはPUTの左にあるトランジスタからの電圧を受けて充電され、だんだん電圧が上がっていきます。その電圧がゲートの電圧を超えると、アノード・カソード間が導通してコンデンサが放電されます。すると電圧が下がるので、アノード・カソード間も絶縁されて再び充電が始まります。そして十分充電されると、再び放電されます。このようなプロセスを繰り返す結果、鋸波状の波形が生成されます。
なおPUTのゲート信号は別のLFOにつながっており、そのLFOが発振周波数を揺らしてビブラート効果を出しています。
その他の特徴
VC10では、キャリアとしてホワイトノイズを鋸波にミックスして用いることができます。ホワイトノイズの量を増やすと、ボコーダーの出力はしわがれ声のような感じになります。
オシレータのピッチを、エンベロープフォロワから作ったアクセント信号やビブラートで揺らすことで、単調なロボットボイスとは違う声も合成できます。VP330と比較すると、VP330はクリアで聴き取りやすいロボットボイスを作ることができますが、VC10はもっと人工的な音を目指していたのかもしれません。
なお、full bucket musicからVC10をエミュレートするVSTプラグインが配布されていますので、VC10に興味のある方にはお勧めです。
その他のボコーダー
Mutable Instruments Warps
MCUを用いた実装としては、Mutable InstrumentsのWaprsにもボコーダーが搭載されています。こちらのフィルターバンクは20バンドで、かつ最低帯域のフィルタはローパスフィルタ、最高帯域のフィルタはハイパスフィルタとなっています。
この実装で使われているフィルタはBiQuadフィルタではなく、Chamberlinフィルタというステートバリアブルフィルタで、STM32用のDSPライブラリstmlibの中に含まれています。ソースコードにアルゴリズムについての記載があり、こちらの論文にあるMODIFIED CHAMBERLIN FILTERを利用しているようです。
フィルタは2段カスケードで用いられています。フィルタのパラメータはソースコードにあるのですが、変数名から、87Hz~7040Hzをカバーしているのではないかと思われます。パラメータの実体はこちらにあります。長さ7の配列になっていますが、それぞれ以下の意味があるようです。
coefficients[0] : decimation factor
coefficients[1] : delay / decimation factor
coefficients[2] : post gain
coefficients[3] : 1st filter fc
coefficients[4] : 1st filter q
coefficients[5] : 2nd filter fc
coefficients[6] : 2nd filter q
ソースコードは結構複雑なので読み切れていませんが、演算量削減のためか、帯域に合わせてサンプリングレートを変動させているようです。
moog 16channel vocoder
そのほか、回路やソースコードは非公開のものもいくつか紹介します。
moogもボコーダーを出していました。現在は復刻版が出ています。このボコーダーは16バンドです。VP330同様、高域はハイパスフィルタを通したモジュレータ信号をミックス可能です。オシレータは付いていません。フィルターバンクにはパッチベイがあり、モジュレータ側のどのBPFのエンベロープフォロワをキャリア側のどのBPFに接続するかを選ぶことができます。
個々のBPFの帯域は本体に書かれており、50Hz~5080Hzとなっています。個々のフィルタの詳細は残念ながら分かりませんでした。
このmoogのボコーダーですが、実は「Bode Vocoder Model No 7702」と同一のもの、という話があります。実際、写真を見るとほぼ同じに見えます。このBode 7702はネットを漁るとマニュアルが見つかり、その中に回路図の一部も掲載されています。その回路図によると、このボコーダーは16チャンネルですが最低域はBPFではなく、LPFになっているようです。残り15チャネルは、VP330やVC10と同じくオペアンプを使ったBPFを2つカスケードした構成で、フィルタのQは概ね7.8に設定されていました。これはRolandやKORGよりも大きな値で、その分、各BPFの帯域幅は狭めになっていました。
MicroKorg
デジタルシンセでボコーダーが搭載されている製品も結構いろいろあります。有名なところではKORGのMicroKorgにもボコーダーが搭載されています。このボコーダーは16バンドのフィルターバンクが搭載されており、マニュアルには周波数も記載されています。ただ、「2つのフィルターで1つのチャネルを構成」しているようにも見え、だとすると、ソフトウェアですがこれまで見てきたハードウェアボコーダー同様、処理としては2Poleフィルタ2つをカスケードしているということなのかもしれません。もしそうであれば、このボコーダーは8バンドのフィルターバンクということになります。
NTS-1用ボコーダー
コードは公開されていませんが、初代NTS-1にもボコーダーの実装例があります。
初代にはオシレータへの音声入力が無かったので、エフェクタとして実装されています。オシレータからの音と外部入力からの音を分離するために、外部入力は片chだけ使用するようです。こうすることで、左右のチャネルにそれぞれ「キャリアのみ」と「キャリア+モジュレータ」が入力され、左右のチャンネルを引き算してモジュレータ信号を分離しています。
このボコーダーも16バンドのフィルタが使われています。2番目の記事を見ると、NTS-1では計算量的には少々シビアで、だいぶ最適化が必要だったようです。
以上で既存のボコーダーの紹介は終わりにします。次回はlogue SDK V2でのボコーダーの実装を紹介します。
コメント