QUASI88 のサウンド出力機能 (以下、サウンドドライバと呼びます)
は、mame/xmame (以下、xmame と呼びます) から移植されています。xmame
のサウンドドライバ部分を切り出して、強引に QUASI88
と結合させることにより、xmame
相当のサウンドが鳴るようになりました。
もっとも、xmame のサウンドドライバは当然 xmame
自身で使うように設計されているため、これを強引に QUASI88
で使うようにした結果いくつかの不具合が出るかもしれません
(し、問題ないかもしれません)。なので、QUASI88
のサウンド出力がおかしいからといって、xmame
のサウンドドライバがおかしいということにはなりませんので、悪しからずご了承ください。
特に、サウンドのテンポについては完全に QUASI88
側で制御していますので、xmame
ではサウンドのテンポがまともなのに、QUASI88
ではおかしい、なんてことはよくあると思います。
さて、QUASI88 が xmame のサウンドドライバを最初に移植したのは、ver
0.3.0 (リリースは1999年8月) の時です。相当前のことですね。当時の xmame
は バージョン 0.36b1.2 でした。この時は YM2203 (サウンドボードI)
関連の部分だけを移植しました。
その後、xmame
のほうはどんどんバージョンが上がっていきましたが、QUASI88
のサウンドドライバのほうはあいかわらずそのままでした。最新のに追従するのが面倒だったからです。x_x;
でもさすがに最初のサウンドドライバの移植から3年以上が経過しており、このままではいかんじゃろ、ということで再び最新の
xmame からサウンドドライバを移植することにしました。結果、QUASI88 の ver
0.5.0 では当時最新の xmame バージョン 0.61.1
のサウンドドライバが組み込まれました。この時の xmame の YM2608
はリズム音が鳴らなかったのですが、リズム音が鳴るように勝手に改造しました。ただし、リズム音の音源用のWAVファイルが必要です。
しかし、このバージョン (QUASI88
ver0.5.0)、どうもサウンドの出力がいままでとは違うのです。
気づいたのは以下の点。
うーん、なんでだろ ??? 以前 (xmame バージョン 0.36b1.2あたりからの移植) ではそんなことはなかったのですが………。
その後も、xmame はバージョンアップを繰り返しバージョン 0.65.1あたりからは、YM2608 のリズム音も鳴るようになりました。リズム音の音源用の WAVファイルなども不要です。さっそく、QUASI88 ver 0.5.1 で、このサウンドドライバを移植しました。しかし、それでもやっぱりサウンド出力の感じがおかしい。
うーん、困った。
そうこうしている間に xmame はバージョン 0.71.1 になり、ADPCM周りのコードが書き換えられました。これを QUASI88 ver 0.5.2 で取り入れようとしたところ、さらに以下の点に気づきました。
だんだんと収拾がつかなくなってきた…
とりあえず過去のxmameのFM部のソースと比較しながらいろいろとソースをいじってみました。
結果、
というわけで、最新の QUASI88 ver 0.5.2 では、xmame 0.71.1
をベースに、何個所か手を加えています。
もしかするとこれにより、他でおかしなサウンドが出てくるかもしれません。
ちなみに、QUASI88 ver 0.5.3 以降では、あの有名な fmgen
も組み込んであります。(起動時のオプション -fmgen で
fmgenが有効になります)。 fmgen を使う場合は
YM2608のリズム音の音源用にWAVファイルが必要となりますが、xmame
よりも音質がいいという話です。
もっとも、作者の貧相な耳では劇的な違いは分からないです…… x_x。fmgen は
C++ 言語でかかれているのですが、作者は C++
を知らないため、もしかすると実装に間違いがあるかもしれません。(というか、すでにちゃんと音がでていない箇所が見つかってしまった……どうしよう……またそのうちに直しておこう。)