-Q ‥ QUIT(シングルインスタンスモード時)
シングルインスタンスモードのVIEWERを終了させます。
シングルインスタンスモード時以外では意味がありません。
注意:倍率などに無茶な数値を指定すると変になります。
TIPS:
・パスを通しておけばDOS窓からでテストできます。
・BMSファイルは、フルパス指定するのが吉。拡張子はなんでもOK。
・非BGMモード かつ シングルインスタンスモード の場合、ロストフォーカスで演奏を停止します。
凡例1:(一連の操作として読んでください。)
BMVIEW -S -P DATA.BMS ←データの読み込みと演奏開始を指示
BMVIEW -S ←演奏終了
BMVIEW -S -R -N10 ←データの再読み込みと表示位置の制御
BMVIEW -S -P ←演奏開始
BMVIEW -S -D ←詳細表示ON
BMVIEW -S -P DATA2.BMS ←演奏開始
BMVIEW -S -D- ←詳細表示OFF
凡例2:(一連の操作として読んでください。)
BMVIEW -S -B -W- -P DATA.BMS ←データの読み込みと演奏開始を指示(非表示)
BMVIEW -S ←演奏終了
BMVIEW -S -P ←演奏開始(Nを指定した実績がないので、先頭より再生される)
BMVIEW -S -N5 ←5小節目に移動(0から数えるので6小節目ともいう)
BMVIEW -S -P ←演奏開始(先のN5はまだ有効)
BMVIEW -S -P DATA2.BMS ←別ファイルの読み込み および 演奏開始(この場合は先頭から再生)
こんな感じでコマンドラインオプションにより簡単にBMS VIEWERの動作を外部から制御できます。
シングルインスタンスモードとは?:
シングルインスタンスモードは、実のところエディタ作成者殿向けのプレビュー表示/プレビュー演奏補完機能です。
ShellExecute()などのAPIや、エディタマクロから制御できるよう考えてあります。
C+APIでバキバキに書きたい人は、こんな感じで扱うこともできます...
:
HWND hTargetWnd = FindWindow("BMS Viewer.SI", NULL);
if (hTargetWnd){
COPYDATASTRUCT cds = { 0 };
cds.lpData = lpcmd; // あらかじめ制御文字列をlpcmdに格納しておく。
cds.cbData = strlen(lpcmd)+1; // NULL終端分を+1する必要がある。
SetForegroundWindow(hTargetWnd); // 演奏するときはフォアグラウンドにする必要あり。
SendMessage(hTargetWnd, WM_COPYDATA, hwnd, (LPARAM)&cds );
}
:
演奏終了はタイトルバーの文字列で判断してください。(この時点でマクロ等では無理かも‥)
"IDLE"で演奏終了、"PLAY"が演奏中、"STOP.."が演奏停止要求待ち、"LOAD.."がファイル読み込み中です。
コマンドの発行は、"PLAY"または"IDLE"の期間を狙ったほうがよいかもしれません。
# 別に狙わなくてもまぁ動くはずです。(未確認)
おまけ:
エディタの他にもジュークボックスとか、ファイル整理用のツールとかも考えられますね。
そのうち -BGMオプションとか、-WINDOW作るかも?
てなことを書いてたら、某コンパネ製作者殿(笑)よりリクエストがありましたので実装しました。
きっと誰かがスクリーンセーバとか作ってくれることでしょう。(笑)
おまけ2:
Version1.5
・テンポ制御のバグを修正した版
Version1.4
・-Aオプション対応公開版。が、テンポ制御にバグを作りこんでしまったので公開中止
Version1.3
・アニメ表示対応初版(非公開)
Version1.2
・-Sオプション指定時は、ウィンドウ位置を記憶するよう修正しました。(非表示の場合を除く)
Version1.1
・-Sオプション指定時は、ファイルオープンダイアログを開かないよう仕様変更しました。
・-Wオプションでウィンドウ表示状態に復帰しないバグ修正
・WINAMP等が常駐している場合、DirectSound初期化失敗すると一般保護例外が発生するバグ修正
Version1.0
・-B/-W オプションをサポート
Version0.9
・-J/-Q オプションをサポート
・-D オプションにパラメータを渡すよう修正[+|-]
Version0.8
・-S/-D/-P/-N/-M/-R オプションを作成
Version 1.5(98/11/02)
Copyright(C) Kazutoshi A. Takata