System4.0 Tips

  

System4.0 のmidiの再生

 

 System4.0では通常midiファイルを再生することはできません。しかし、System4.0をDLLによって拡張することにより再生することは可能です。

midi再生用のmciPlayライブラリをダウンロード

以下の3つのファイルが入っています。

main.cpp
   これは、mciPlay.dllのソースファイルです。独自に機能を追加したい場合はこれを拡張して付けることも可能です。

mciPlay.dll
   これは、midiを再生させるDLLです。

mciPlay.hll
   これは、System4.0でのコンパイル時に必要なHLL定義です。

 

※ なお、このライブラリは、曲の終わりで自動でループします。

 

HLLの登録方法

 知っている方は読み飛ばしてくれても構いません。

 まず、プロジェクトをIDEで開きHLLのところを右クリックし、「HLLを追加」を選びます。でてくるダイアログで、mciPlay.hllを読み込ませます。(ダイアログが標準で開いているフォルダにHLLファイルD&Dしてコピーしてから読み込ませると便利です)
 名前はそのままにしておいてください。

 次に実行フォルダを開き、DLLフォルダの中に、mciPlay.dllをコピーします。
また、実行フォルダの中にある、「System40.ini」のLoadDLLのところに、mciPlay.dllを書き込みます。
例:

......

; DLLファイル設定
LoadDLL = {
"SACT_DLL.inc",
"mciPlay.dll",
}

.......
 

 これでHLLファイルを使用する準備が整いました。

 

使用方法

 素でmciPlayを触ってくれても構いませんが、少し難しいのでラッパー関数(簡単に使えるようにする関数)を用意しました。
以下のソースをどこかに貼り付けておきます。

//
//MIDI_PLAY midi再生関数(要:mciPlay.hll mciPlay.dll)
// file.. System40.exeからのファイルパス
// wait.. trueにすると、再生が開始されるまでウェイトする。
// nowloading.. waitがtrueの時に限りtrueであると、NowLoading...を左上に表示する。
//
void MIDI_PLAY(string file,bool wait=false,bool nowloading=true){
    if(wait && nowloading){
        //Wait + loading
        int nSp=SP_GET_UNUSE_NUM();
        SP_CREATE(nSp,160,30,255,255,255,160);
        SP_SET_Z(nSp,100);
        sact_text_metrics_t tm;
        tm.nColorR=0;tm.nColorG=0;tm.nColorB=0;
        tm.nSize=22;
        SP_TEXT_SET(nSp,0,0,"Now Loading...",tm);
        SACT_UPDATE();
        mciPlay.PlayMidi(file);
        while(mciPlay.PlayWait()==1){
            system.Sleep(5);
            system.Peek();
        }
        SP_DEL(nSp);
        
    }else if(wait){
        //Wait
        mciPlay.PlayMidi(file);
        while(mciPlay.PlayWait()==1){
            system.Sleep(5);
            system.Peek();
        }
    }else{
        //Non-Wait
        mciPlay.PlayMidi(file);
    }
}
void MIDI_STOP(){
    mciPlay.StopMidi();
}
 

 多少の固まりがあってもいいから、適当に使いたい場合は、
 


  MIDI_PLAY("test.mid",true);
 

 とします。この場合は、midiの読み込みという少し時間のかかる恐れのある処理が完了するまでは、NowLoading...という文字を画面に表示します。たぶん環境依存で、時間がかかったりかからなかったりします。

 

言うまでも無いことですが、停止は


  MIDI_STOP();
 

です。

 

 

さて、NowLoading...という時間に別の処理を行いたいという場合は、


  MIDI_PLAY("test.mid");
 

とします。
 

 

 

余談ですが、実行フォルダの下にmidiというフォルダを作り、その中にmidiファイルを置く場合は以下のようにします。


  MIDI_PLAY("midi\\test.mid",true);