MIDIでファミリーコンピューターの音楽を再現する。

(相当専門的なので気をつけてください。わかりやすいように改良して行くつもりではいますが・・・)

世の中にはたくさんのファミリーコンピューター(FC)のMIDIデータがありますが、いまいち物足りない、と思った方もいらっしゃると思います。まあ、曲の出来はその人に頑張ってもらうしかないのですが、ことに音色に関してはこれは作り手の努力ではどうにもならないところでもあります。しかし、その音をどうにかして作り出せるのではないかという考えからこの話は始まるのです。

波形合成

音を作り出す?

そもそも音とは様々な音波(正弦波:SineWave)の集まりであるということは何となく知っていると思います。ステレオのイコライザをいじると音の聞こえかたが変わりますが、それは音波の成分を増減させているからです。MIDIの各種フィルタも同じ要領で成分を加減してあげることにより音質を変えてあげているわけです。そこで、逆に音波を1からまとめ上げてあげれば思い通りの音色が作り上げられるのではないかと考えたわけです。

そんなこと出来るのか?

最近のMIDI音源の多くはあらかじめ録音してある音を再生する方式なので(SC-88など)、音を合成させるのにはちょっと(いや相当)不都合なのですが、ある限定した環境で有れば(FCの音色程度)合成が出来るのではないかと考えました。幸いSC-88には正弦波が登録されているのでこの音の和音を作れば新たな波形を作り出せるはずです。

何の音を作り出したいのか?

作り出したいと思った音は三角波矩形波です。

三角波

三角波はその名の通り波形が[/\/\/\]と三角の形状をした波です。音は正弦波(MIDIで確認できます。)と違い倍音(高周波成分)を含んでいるので若干正弦波よりも硬めの音となります。後述の方形波(SquareWave)と正弦波の中間の音に聞こえます。実はこの音はSC-88proにも登録されていない(最新の音源にはあるのかもしれませんが)ので、FC音楽の完成度を下げる原因となったと考えたからです。

三角波の倍音はどういうものなのか?

三角波の倍音はc3(オクターブ3のド)を基準にすると奇数倍の倍音(1,3,5,7,9...)がふくまれていて、その割合は1:1/9:1/25:1/49:1/81:....となっています。つまり倍数の二乗分の1になって行くわけです。ということは、この割合の音量で倍音を配置していけば理論上は三角波になるはずです。ただ、ここで問題が発生します。いったいMIDIの音量分布はどれくらいの割合になっているかということです。

MIDIの音量分布はどうなっているのか?

いくら三角波の倍音分布がわかっていてもそれを正確にMIDIで再現しなければ予想した音は鳴りません。私の見つけた法則は経験則なので理論がないのが難点ですが、おおむね良好な近似を得られているので今回はその法則を書きます(実際の法則を知っている人は是非教えてくださいませ・・・)。その法則とは、

(実際の波の強度比の平方根)=(MIDIの音量比)

という法則です。つまり、もし基音とある倍音の音量比が9倍ならば、MIDIの音量比は3倍になるわけです。この法則を利用しますと、(1:1/9:1/25:1/49:1/81)→(1:1/3:1/5:1/7:1/9)となるわけです。この配列にしてあげれば三角波を再現できるはずです。実際合成した波形を下に表示しておきます。

平均律なのに大丈夫か?

ここは、まだ私も本当に平気なのかわかってません。今のところ出来た音にうなりが発生する理由の一つと考えています。これをきっちり修正するのは労力があまりにもかかるのでとりあえずは考えていません。これよりも倍音の省略の方がよほど重要な気がします。

倍音の省略?

三角波の倍音は奇数倍に全て存在するわけですから理論的には無限にあるわけです。ただ、そこまでMIDIでやるのは効率的ではありません。なのである一定のところで倍音を切り捨ててしまう必要が出てきます。この切り捨てる場所は、ちょうどMIDIのローパスフィルタをかけたのと同じ状態になります。すなわち、あまり高次倍音を切りすぎるとこもった音になるわけです。そのときの三角波の重要度によって倍音数を調整した方がよいかもしれません。現実的には倍音を4こ程度が適当ではないでしょうか。

三角波をならしてみたがなんだか物足りない。

実は合成した三角波とFCの三角波では大きな違いが一つあります。FCの三角波はビットが荒く、三角波というよりピラミッド波もしくは階段波と言えるような波形をしてます。この段々があの特有なノイズを発生させているようです。今のところは今までにもよくノイズ再現として使われていたElecPiano2を利用するのが有効なようです。これを正弦波で合成するのはよほど高次倍音まで利用しなくてはならないので今のところ現実的ではないようです。

三角波2

上記の方法以外で三角波を再現できる方法を見つけました。それは、インサーションエフェクトを利用した方法です。Lo-Fiはノイズを発生させたり音質をわざと劣化させたりするエフェクトです(と、思っている・・・)。で、今回はその中でも音質を劣化させるところに目をつけました。音質を劣化させるということは音を何らかの方法で歪めているということです。実際、正弦波にLo-Fi2を用いると綺麗な三角形になってくれました。波形も、上記の正弦波の組み合わせよりも綺麗です。それになぜかあの特有のノイズもなってます(ノイズを鳴らす設定は切っている)。理由はわからないですが、とりあえず結果オーライにしときます。インサーションの値は、うちのぺえじに掲載されている悠久の風でも参考にしてくださいませ。

他の音色は?

FCの音色は三角波だけではありません。他にも4種類の矩形波、2種類のノイズが存在しているようです。

何の音色でならしている?

今のところネット上で使用されているもっとも似ている音色は

です。ここからもわかると思いますが、三角波がないわけです。というわけで今まで頑張って作っていたわけですが、もう一つ重要な音がないのです。それは1:3矩形波です。

変調矩形波

矩形波とは、文字通り矩形(長方形)がずらずらと並んだ波形[_■_■_■_]をしています。この長方形(凸)部分とそうで無い(凹)部分の比率を変える(変調)ことによりさまざまな特性の音を鳴らすことが出来ます。凸部と凹部の比率が極端なときをパルス波と言うこともあります。矩形波をフーリエ級数を使い倍数nの時の強度Aを式で表すと、

A=(1/n)*sin(nπ/T) (Tは凸部分の長さを1としたときの周期。1:1なら2、1:3なら4。)

となります。この比率が1:1の時を特に方形波といいます。方形波は奇数倍の倍音のみを持ち、その倍率は(1:1/3:1/5:1/7:1/9...)となり、ちょうど三角波は方形波の倍音強度を2乗したものと一致することがわかります。癖のない透き通った音になるのが特徴で、MIDIではP5 SquareなどがFCの方形波と似ているようです。

ファミコンの矩形波の種類は?

FCの矩形波は4種類あり、私が聞いた限りでは凸部分の割合が 12.5%(1:7) 25%(1:3) 50%(1:1) 75%(3:1) だということです。25%と75%は聴く分には全く同じに聞こえるはずなので、実質3種類ということになります。そして、MIDIでは何の音を使えばいいかを書きますと、

が波形的に類似していて良好な音を出してくれています。で、見てわかるとおり1:3矩形波が存在しないことがわかります。よって、これを合成しようとしたわけです。

1:3矩形波とは?

これは方形波よりも若干癖があり、それでいてくどくないと言う結構メロディで使われている音です。この音の代用としてElecPiano2等が使用されているようですが、これは三角波のノイズように使われていることからもわかるとおりノイズが邪魔でメインではどうしても使うのにためらってしまいます。この音がないために完成度の低いFC曲は数多くあるはずです。実は三角波より重要かもしれませんね。

合成できないの?

1:3矩形波の倍音は上式に周期4を代入することにより、4n倍の倍音を抜かした整数倍の倍音を持つ事がわかります(1,2,3,5,6,7,8,9,10,11,13,...)。そして、倍音の強度比は(1:0.707:1/3:0:1/5:0.236:1/7:0:1/9:0.141...)で、ちょうどボールがはねていくような具合に減衰していきます。まあ強度比がわかっているのですから合成は出来るのですが、問題があります。それは、減衰が三角波に比べてゆっくりと言うことです。9倍音の所を見比べると9倍矩形波の方が強いことになります。つまり、それだけ高周波数成分が多いと言うことになりますから、よほど高倍音まで再現しないと音がこもることになりますし、実際再現した音は非常にこもった音になってしまいました。

それでは再現は不可能?

実は、別なアプローチで再現が可能なのです。1:3の倍音強度式は、

A=(1/n)*sin(nπ/T) [T=4] より

n=2m-1のとき A〜1/(Sqrt(2)*n) ,n=2(2m-1)のとき A〜1/(2*n)

となり(符号は無視)、書き直すと、

n=2m-1のとき A〜1/n ,n=2(2m-1)のとき A〜Sqrt(2)/n

となります。

つまり、1:3矩形波の奇数倍数成分は方形波とまったく同じ(1:1/3:1/5:1/7...)なのでOB Squareがそのまま利用できます(P5 Squareではきれいに鳴らないようです)。そして、残りの(2,6,10,...)成分も方形波の成分分布と同じで、それにルート2を掛けた倍音強度になります。

倍率の方形波を2倍、つまり1オクターブあげた時とぴったり一致するためにオクターブ上に方形波をしかるべき強度(この場合0.707倍)でならせばめでたく1:3矩形波が再現できるわけです。それも、理論的には完全に一致するのです(実際は理想的な方形波ではないのでどうしてもずれる)。

どんな割合?

Sqrt(1:0.707)→(1:0.861)というわけでもとのOB Squareの音量の0.861倍でオクターブ上のOB Squareを重ねればいいわけです。v.120ならv.101くらいですね。実際ならすと、相当いい近似になっていることがわかると思います。

ほかのSquareWaveではだめなの?

いろいろ試してみましたがどうもほかのSquareWaveには余分な倍音が入っているらしくきれいに響きませんでした。よって今のところ88proを使用してもらうしかないと思います。

ファミコン音色考察

今までの波形合成で、変調矩形波4つと三角波とノイズが何とかなることがわかりました。これによってわかったことや解決できない事を書いてみます。

DQ2の変な音

ネット上に存在するドラクエ2のMIDIデータではよくアタックの音をオクターブ上の方形波で再現しています。今まではなんでこんなことをしているのか(原曲が聴けないのでわからない)と考えてましたが、もしかしたら1:3矩形波をアタック部分に一瞬鳴らしてから方形波に切り替えているのではないかということに気がつきました。一瞬なった後に方形波に変わるので融合した音と耳が感じなくてオクターブ上の音とみんなは聞いているのではないかと考えたわけです。これは実際にサンプリングすればわかると思いますが、誰か持っている人確かめてくれませんかね(笑)。ちなみに1:3矩形波のほうが倍音数が多いのですから方形波に比べて音量を落としてあげる必要がありますね。

FF3の変な音

FF3を作っていると時々出現する変なアタック音。ノイズがかかっているようでそうでもない、非常に不思議な音です。波形を見てみたのですが、どうやら一度鳴らした音を急に音量絞ってその後また増加させるという手法のようです。急に音量を絞ることによりどうやらあのような音になっているようです。

FF3のビブラート

うちにFF3のCDくらいしかないのでよくわからないのですが、少なくともFF3のビブラートはサインカーブのビブラートではないようですね。どうも矩形波のビブラートのようです。MMLだと比較的簡単に出来たんですけど、ほかのシーケンサではどうなのでしょう?

三角波のノイズ

ファミコン音色のもっとも重要な味わいともいえる三角波のノイズ。今回はElecPiano2を利用しましたが、実はノイズの波長がオクターブばかし高いのです。かといってオクターブ下げるとElecPiano2の本体の音が気になります。今のところは現状が最善ですがどうにかならないもんでしょうか・・・

のこぎり波

FCには矩形波と三角波しかないと書きましたが、ネット上にはのこぎり波(SawWave)を利用したデータがよく見かけられます。ではこれは勘違いなのかというとそうでもないのです。矩形波のパルスの部分と基底の部分の比率を大きくしていくとだんだんのこぎり波の倍音比率に近づく(といっても無限大にするとそもそも音が出なくなりますが)ので、違う方向からの近似音と考えることが出来ます。また、後述のClavi3には無い利点(いくらでも音が伸ばせる)もあるので、音色よりバランスを重視する人には有用な選択だとも言えます。

Clavi3の問題点

くどいあの音を作るために欠かせない音、Clavi3(誰が使えることを見つけたんですかね?)。なかなかいい感じで鳴ってくれるので重宝してます。ただ、実際の波形が1:5の矩形波に正弦波を足したような波形をしているため、波形レベルでは相当違います。また、つかったことのある人ならわかると思いますが、減衰するのが大問題なんです。今のところディケイ127でアフタータッチで音量持ち上げて何とかしてはいますが、きれいな伸びた音が作れないのはメロディ関連では致命的にもなります。誰か何とかできないもんですかね。ちなみに矩形波の合成ではどうしてもうまく行きません(うまく分解できない)でした。なんかもっと違う方法で攻めないといけないようです。1:7の矩形波用のJP8 Clav.2も同じ減衰系なのでこちらも大変です。

TMIDIを使った88pro音色方形波使用の定義方法

さて、何とか音色はそろいました。しかし自分で作るのは相当な労力が必要です。ネット上にはたくさんの人がファミコンの音楽データを作っていますが88pro専用のデータを作る気合の入った人はそんなにいないことも事実です。手動で音色を切り替えるのも膨大なデータを聴くのには不都合です。そこでTMIDIを使って自動で音色を切り替えてもらおうと考えました。といっても変えられるのは方形波のみです。さすがに三角波や矩形波を変更するのは無理がありますが、これを変えるだけでも相当違う出来になります。実際どうやるかといいますと、エミュレーションの定義ファイルを書き換えればいいわけですね。エミュレーションやフィルタ機能でバンク切り替えをすればどんなデータも88pro用にすることが出来るわけです。定義ファイルいじるのはそんなに難しくないと思いますが、とりあえず私が直した定義ファイルを掲載しときます。

ダウンロード:TMIDI用定義ファイル(Ver 3.6.5β用)

このファイルをTMIDIにエミュレーションの定義ファイルとして読み込ませてあげると、フィルター機能の中に[88pro-PSG]という項目が出てくるのでそれを選べば多分方形波が全部88pro用になると思います。ただ、GMリセットの入っているやつとかXGのやつとかはだめっぽいです。音色はP5 Squareにしていますが、これはエンベロープ特性が他の方形波と似ているからです。


目次

りんく