GuruGuruSMFのDirectMusicを無効にする

(2014.10.7)
問題が発生する環境について追記 (2014.10.8)

 先日、フリーのアドベンチャーゲームである『真夜中の人形使い』をプレイしたところ、BGMが出力されていなかった。最後までプレイはできたがどうも寂しい。実況動画を見る限りでは本来BGMが出力されるのが正しいはずである。SEは出力されているので音量などの設定がおかしいわけではないようだ。
 調べてみたところ、このゲームの開発に使用されているツールである「WOLF RPGエディター」でゲームをビルドするとき、デフォルト設定(強く推奨されている設定でもある)では、DirectMusicを使用してMIDIフォーマットの音楽を出力するようにビルドされるのだが、このDirectMusicという技術がとっくにobsoleteとなっており、筆者の環境を含む比較的新しい環境(Vista以降の64bit環境?)ではサポートされていないようなのだ。WindowsでMIDIを再生するAPIとしては、DirectMusicのほかに昔ながらのWinMMというAPIもあり、こちらは依然としてサポートされているようで、WOLF RPGエディターでもこちらを使用するようにビルドすることもできるのだが、ビルド済みのものしか手元にないプレイヤーにはそれを切り替える術がない。
 WOLF RPGエディターで生成されたゲームは、実際には「GuruGuruSMF」という外部ライブラリを使用してMIDIを出力している。ありがたいことにこれはソースが公開されているので、それを改造してしまえばDirectMusicでなく常にWinMMを使用するようにできるのではないか。
 そう考えて少々試行錯誤したところ、一応上手くいったようなので、その成果をここで公開しておく。

ダウンロード

GuruGuruSMF.zip (ソース付き)

 使用するには、上手くBGMが出ないゲームのGurugurusmf4.dllを、同梱のもので上書きするだけでよい。

追記(環境について)

 その後、この問題が起こる環境として、64bit環境というより、Windows Serverの場合が怪しいらしいと判ってきた。以下のページにあるように、これらの環境ではDirectMusicを無理やり追加しないとならないらしい。

MS DirectMusic Core Services
http://www24.atwiki.jp/server2003/pages/4.html#id_d466c3d5

 この手順を踏めば拙作のDLLは要らなくなるものと思われるが、サポート外のコンポーネントをインストールするのには少々抵抗を感じないでもない。

コンピュータ関連記事一覧へ