from 和ジオ

FM音源で遊ぼう (WindowsでFMPデータのコンパイルをする)

ソフトを使う

FM音源で遊ぼう (WindowsでFMPデータのコンパイルをする)

シンセサイザーから、パソコン、携帯電話と渡り歩く すばらしい FM音源の世界で遊んでみましょう。

近頃では、省メモリ用の音源として使われていることも 多いですが、その出音は涙すら誘う豊かな音です。 是非、シンセサイザーとして FM音源の音を聞いてみてください。

FM音源を鳴らす環境

YAMAHA DX7 を買ってくる・・・。 というのはなかなか難しいので PC98時代に一世風靡した FMP の Windows版を使って FM 音源を楽しんでみることにします。

MIDI シーケンサーと VST プラグインという手もありますが 準備が大変なので、まずは FMPで FM音源の音を出してみましょう。

WinFMP.dll(Ver 0.16 updated 2003.09.28) Windows版 FMP (DLL)
KbMedia Player WinFMP をドライブするメディアプレイア
FMC (FMC316z.LZH) FMP用シーケンスコンパイラ

WinFMP.dll をダウンロードし、KbMedia Player のディレクトリに 格納すれば、 FMP のファイルを鳴らす準備ができます。 まずは、インターネットからダウンロードした FMPファイルを 聞いて、しばし感動します。 : o)

FM音源で曲を作ってみる

せっかくなので、自分で FM音源を鳴らしてみましょう。 MML という文法にしたがい曲を書き、FMC でコンパイル し、KbMedia Player で再生するという流れです。

FMC は、DOS版のソフトウェアです。コマンドラインツール なのではなく、純粋に DOSのソフトウェアです。 当然、ロングファイル等には対応していないので 注意して環境を作ります。

FMC に渡すファイル名は、 . mvi という拡張子で作成します。 作成した .mvi ファイルを、

FMC.EXE [ファイル名].mvi

とすると、

[ファイル名].OVI

というファイルが作成されます。これが、FMP で再生可能なファイルです。

まず、どこかしらにフォルダを作成し、下記のように FMC のファイルを 配置しましょう。

DATA/
FMC.EXE
FMC.TXT
MML.TXT
NEIRO.TXT
README.TXT

DATA フォルダを作成し、この中に .mvi ファイルを作成する 事にします。

ロングファイルパスが使えないので、ここで若干裏技をつかいます。 まず、この FMP を格納したフォルダを「共有」設定します。 その後、エクスプローラから、ツール→ネットワークドライブの割り当て、 で、自分自身の先ほど共有したフォルダを 「Q」ドライブあたりに設定します。 これで、「Q:」でアクセスできるのでロングファイルパスが関係なくなります。 (相対パスで起動してもエラーで動かないのでこのようにしました。 ネットワークを使わずに、同じ事をするような「DOSコマンド」も あったような気がするのですが忘れました。。)

Virtual Drive Extension でもいけると思います。(未確認)

コンパイル環境ができたので、実験してみます。 上で作った、DATA/ フォルダの中に、「piano.mvi」ファイルを メモ帳などのテキストエディタで新規作成し、下記の内容を記述します。

'A @200o4v15l4
'A cder cder gedc dedr
'A cder cder gedc decr
'A ggeg aagr eedd c1

'B @200o3v12l8
'B cgegcgeg cgegcgeg cgegcgeg <b>gdg<b>gdg
'B cgegcgeg cgegcgeg cgegcgeg <b>gdgcgeg
'B cgegcgeg <a>fcf<b>gdg <a>fcf<b>gdg cgegc2

'C @1o3v15l4Qq4
'C c4.c8c2 c4.c8c2 c4.c8c2 g4.g8g2
'C c4.c8c2 c4.c8c2 c4.c8c2 g4.g8c2
'C c4.c8c2 f4.f8g2 f4.f8g2 c4.c8c2

;E.(Bell)Piano#5
'@ 200
'@ 31,  7,  0,  9,  5, 35,  0,  6,  3
'@ 31, 11,  7, 14,  4,  5,  1,  2,  3
'@ 31, 10,  9,  9,  5, 35,  0, 12,  7
'@ 31, 11,  7, 14,  4,  5,  0,  2,  7
'@ 4,7

;AnalogBass
'@ 1
'@ 31,  0,  0,  0,  0, 41,  0,  1,  0
'@ 20,  0,  0, 10,  0,  0,  0,  1,  1
'@ 24,  0,  0,  8,  0,  0,  0,  1,  2
'@ 20,  0,  0, 10,  0,  0,  0,  1,  3
'@ 5,6

ええとこれは、ぼくが作った「チューリップ」の MMLです。: o) MMLの詳細は、FMC に同梱されている「MML.TXT」を参考にしてください。 C がド。Dがレ。音の後に長さ。というのが基本の書き方です。

次の「コマンドプロンプト」を起動し、次コマンドを投入でコンパイルします。 割り当てたネットワークドライブを「Q」にした例です。

Q:
cd DATA
..¥FMC piano.mvi

これで DATAフォルダに、

PIANO.OVI

が作成されます。 KbMedia Player で再生してみましょう! 「チューリップ」はへたくそですが、ハートウォームなFM音源の音色が 聞けると思います。

一応、mp3 にしたものをおいておきます。圧縮してしまうので ハートウォーム加減がいまいちになりますが、感触だけどうぞ。 → PIANO.mp3

FM 音源ではありませんが、PSG でつくったものもあります。 MML の参考(なるのか? :-) にリンクしておきます。 PSG音源で遊ぼう (ファミリーベーシック・オリジナルロックンロール)

FM音源の音色

FM音源は、音源に対していろいろなパラメータを与えることで ギンギンのシンセ音から、暖かいエレピの音までいろいろだすことが できます。 ・・・が、このパラメータを作成するのは非常に 高度な技術が必要です。

いろいろ探していると、 FM音源のパラメータを沢山公開している 方がいらっしゃいました。

VAL-SOUNDさん の、FM-Libralyには、沢山の良い音色があります。(上のチューリップでも 使わせて頂きました。 VAL さんありがとうございます!)

そこで、VAL-SOUND さんでで公開されている、FM音源パラメータ を FMC用に整形する Perl スクリプトを書いてみました。 たぶんあっていると思いますが、使う場合はご確認を。

#
# VAL-SOUND さん FM音源パラメータを
# FMC用にコンバートする Perl スクリプト
#
# VAL-SOUND さん URL
#   http://www.valsound.com/
#

# FM-Library さん の 音色を保存したテキストファイル名
$filename = "fmlib.txt";
# FMP 音色番号の最初値
$num = 0;

open(IN, $filename) or die "$!";

while ($line = <IN>) {

# trim する
$line =s/^¥s*(.*?)¥s*$/$1/;
# スペース削除 (全角注意)
$line =s/¥s/$1/g;
$line =s/ /$1/g;

# 無関係行処理
if ($line =/^#/ || $line eq "") {
    next;
}

# パラメータ行ではなかったら音色名
if ($line !/^[0-9]/) {
    print ";$line¥n";
    print "'@ $num¥n";
    $al = 0;
    $num++;
    next;
}

# アルゴリズム、フィードバックありパラメータ行
if($line =/(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+)/) {
    $alg = $1;
    $fb = $2;
    $line = "$3,$4,$5,$6,$7,$8,$9,$10,$11,$12";
}

# パラメータ行
if($line =/(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+),(-*[0-9]+)/) {
    $ar[$al] = $1;
    $dr[$al] = $2;
    $sr[$al] = $3;
    $rr[$al] = $4;
    $sl[$al] = $5;
    $tl[$al] = $6;
    $ks[$al] = $7;
    $mul[$al] = $8;
    $dt[$al] = $9;
    $ams[$al] = $10;
    $al++;
}

# パラメータそろったら FMC用に整形して表示
if($al == 4) {
    for($al=0; $al<4 ;$al++) {
        printf("'@ %2d, %2d, %2d, %2d, %2d, %2d, %2d, %2d, %2d¥n",$ar[$al],$dr[$al],$sr[$al],$rr[$al],$sl[$al],$tl[$al],$ks[$al],$mul[$al],$dt[$al]);
    }
    print "'@ $alg,$fb¥n¥n";
}

}

close(IN);

パラメータを音色名ごと「ブラウザからコピー」(複数可)して、 「fmlib.txt」テキストファイルに保存して、 この Perl を実行してください。 FMC用に整形したパラメータが標準出力に書き出されます。

一部、デチューンのパラメータで負数をとっているものは FMP では対応できないようです。 コンパイルエラーに なるので、適宜修正すると良いと思います。

VAL-SOUND さん:各種パラメータより

DT1(デチューン1):
 DT1(デチューン1)音程の微調整。音源ドライバによって記述する数値が違うが
 0-7が一般的。0-3で0- +3、4-7で0- -3。

FMC 同梱の MML.TXT をあわせて確認すると良いと思います。

おわり

DX7 ではなく、PC8801mk2SR から FM音源にはいったくちですが、 現在になり、PC オーディオ環境が異常に進化したため PC でもノイズもなくクリアに FM音源を楽しめるように なりました。 昔の曲とかを聴くと、こんなことしてたのかー、 と感動します。

WinFMP.dll の作者さんの FMPMD2000 プレイヤを使うと .wav にも はき出せるので、MIDI とあわせて Audio 貼り付けするのも おもしろそうです。

懐かしさとあいまって、泣けと言われれば泣くことのできる、 すばらしいFM音源の世界をお楽しみください。