トップ 一覧 検索 ヘルプ RSS ログイン

OPMでCSM音声合成・その2(4slotを使用した音声合成)

OPMでCSM音声合成・その2(4slotを使用した音声合成)

その1で取った方法だと、発声だけで全チャンネルを消費してしまいます。RPG等のゲームの演出で、音声のみ出力したい場合には使える方法ですが、ヴォーカル表現への転用を考えると音楽との同期再生ができなければ実用とは言えません。また、使用スロットが4個中1個と、非常に勿体無い使い方をしています。そこで4つのスロット全てを有効的に使う方法はないか考えてみました。

 倍音構成に再集計する

その1とほとんど同じ処理を行ないますが、決定的に違うのは「計算結果を評価する」部分です。その1では鍵盤の周波数に対して再集計しましたが、これをOPMで表現可能な倍音設定の周波数に変更します。

OPMはMULとDT2の組み合わせで64段階の倍音を表現できます。MULは倍音、DT2は倍音の倍率自体の設定項ですから、MUL(16段階)×DT2(4段階)=64段階となります。

上図の音色を使用した場合、o4a(440Hz)の音を出す指示を行っても、実際に出力されるのはo3a(220Hz)になります。アルゴリズム7でOP1のみ有効・MUL=0/DT2=0なことに注目してください。

オペレータは4個ありますから、鍵盤の音程を固定してMULとDT2を操作するだけで、64個中4個の別の周波数の音を1chで出力できます。この64個の周波数は不定ですが、叩く鍵盤の音程を決めた時点で、出力可能な64個の周波数が決まります離散フーリエ変換の結果を、この64個の周波数を基準に再集計します。

結果例

その1では、鍵盤の音程=平均律に従うので、なんとなく多少音痴でも補正されるんじゃないか?という気がしますが、この方法は平均律を完全に無視しています。ですから、とても音痴になる可能性があると予測できます。実際その通りで、試してみると以下のサンプルのようにかなり怪しげな音声になりました。

http://nrtdrv.sakura.ne.jp/mp3/csmtest_20100523.mp3

これは4slot×4chで全チャンネルでo4cを叩いたものです(窓関数なし・ほぼLoPass/HiPassを適用せず)。申し訳ありませんが、こちらも音量注意です(汗)

明らかに元にはない成分が目立った音声になっています。

 複数チャンネルを使用して発音可能な倍音を増やす

周波数帯をイビツな形で64段階に分けただけではクオリティ的にはまだまだ問題があるようです。そこで、複数チャンネルを利用し、叩く鍵盤をズラして、発音可能な倍音成分を増やしてみます。

上図は、平均律とOPMで出力可能な倍音の周波数値の対比図です。平均律は対数変化しているのに対し、倍音はわりと直線的に変化しています。このことからも、倍音利用ではその1と同等の音声合成はできないことがわかります。

倍音は1chのみ使用した場合も2ch使用した場合もあまり変化自体は変わりません。しかし1chのみでは64段階ですが、2ch使用すると128段階になるので、2chを使用した場合は、よりきめ細かくなっています。

そして、NRTDRVで指示できる鍵盤情報はo0d+〜o8d+の97個です(OPMの場合)。複数チャンネルを使用すると、かなりイビツな形ではあるものの、きめ細かさでは、その1を上回ることがわかります。

ただし、1つのチャンネルで発音できる周波数は64個のままですから、仮にAchとBchの2つのチャンネルで演奏するとしたらば、Achでしか出力できない周波数とBchでしか出力できない周波数が発生します。そこで多少変則的になりますが、基準とするテーブルに「どのチャンネルで出力可能か?」というフラグを持たせ、評価の際にはフラグを参照して、そのチャンネルで発音可能な上位4個のデータをそれぞれに取得します。

基本となる鍵盤をどれにするか、また、どれだけ基本となる鍵盤をズラすかは重要な問題ですが、実はあまりテストをしていません。この辺りは最も今後の検証が必要な箇所だと思います。

「もってけ〜」はF majorの曲なので、o4fを基本にすると良いだろうと考えていたのですが、実際に試してみると妙な音声になったので、今回はo4cを基準にしました。また、ズラす幅も半音・全音・4度・5度を試してみたところ、半音が一番明瞭に思えたので、今回は半音を採用しました。かなりテキトーです(汗)

結果例

http://nrtdrv.sakura.ne.jp/mp3/csmtest_20100524.mp3

同じく、4slot×4chでo4c/o4c+/o4d/o4d+を叩いたものです(ハミング窓使用・過度にLoPass/HiPassを適用)

若干怪しさを感じるものの、64段階で処理したものと比べると差は歴然です。