概要
私の通っている東京農工大学 情報工学科では,3年次の後期に「システム製作実験」という実験を行います.
私の班では三好健文氏が開発されている高位合成ツール“Synthesijer”の評価を行い,
その際にエフェクタの一種であるヴォコーダを製作しました.
ヴォコーダとは
「ヴォコーダ」とは”Voice Coder”の略で,元々は音声の分析合成を行うシステムの総称です.
しかし,エフェクタ及び楽器として「ヴォコーダ」に言及する場合はその1種の「チャネル・ヴォコーダ」を
指すのが一般的です.
ピッチシフトなどに利用される「フェーズ・ヴォコーダ」もありますが,エフェクタの名称として
この名前が用いられることは稀です.
チャネル・ヴォコーダは端的に言ってしまえばロボット風の音声を生成するために用いられます.
YMOの「テクノポリス」「ビハインド・ザ・マスク」や
ディズニーランドのエレクトリカルパレードの冒頭のセリフなどがこのチャネル・ヴォコーダの
エフェクトを効果的に使用している一例と言えます.
一般的なチャネル・ヴォコーダは図1のような構成になっています.
チャネル・ヴォコーダは楽器音(キャリア)と音声(モジュレータ)の2つの音響信号を入力とし,
それぞれをフィルタバンクに通すことによって各周波数帯域ごとに信号を分割します.
周波数帯域ごとに分割された音声の信号の強弱を,
同様に分割された楽器音の信号の強弱に反映させてやることによって,
音声の信号の各周波数帯における特徴,つまり「あいうえお」といったような
人間の声の内容を楽器音に反映させることが(ある程度)可能となります.
このように,楽器音に人の声の特徴を反映させることで,
ロボット風の音声を得るのがチャネル・ヴォコーダです.
実装
今回はこのチャネル・ヴォコーダの処理とその周辺機能をFPGA(Spartan-3 Starter Kit:XC3S200)上に
実装しました. 全体の構成は図2のようになっています.
チャネル・ヴォコーダは前に述べたように,2つの音響信号の入力と,
最低1つの音響信号の出力が必要となります.
今回はADCとしてPCM1808(TI)を,DACとしてBU9480Fを接続しました.
ADCはI2S,DACはいわゆる標準フォーマットでの通信となるので,
それぞれに対応したレシーバ/トランスミッタをVerilog-HDLで記述しました.
また,今回は楽器音の代わりとなる音響信号(3和音の矩形波,あるいは鋸歯状波)を
FPGA内部のトーン・ジェネレータで生成しました.この部分もVerilog-HDLで記述しました.
トーン・ジェネレータで発生する和音はSpartan-3 Starter Kitのスイッチを操作することで,
4種類(G,ConG,DonA,GonB)の中から選択できるようになっています.
さて,最後に残ったのがチャネル・ヴォコーダそのものの処理ですが,
この部分はJavaで記述し,高位合成ツール”Synthesijer”を用いてVerilog-HDL記述を得ています.
Synthesijerによって得られたVerilog-HDLのmoduleをその他のVerilog-HDLで記述した
module群と組み合わせ,FPGAに実装しています.
外部のICとの通信のように,クロックに同期して様々な信号の遷移を定義するほうが楽な場合には
Verilog-HDLのようなRTL記述が便利ですが,図1に示したような信号処理,あるいは複雑なプロトコルの処理
といったように,クロック単位の同期よりも複雑な演算をすっきりと記述したい場合には
HDLよりもより高抽象度の記述のほうが便利であると言えます.