------------------------------------------------------------------------------
【  名  称  】 BMS Decoder
【ファイル名】 kbbms.kpi
【バージョン】 0.04
【対応拡張子】 bms/bme/bml/ems/pms
【 Platform 】 x86(32bit)/x64(64bit)
【 公 開 日 】 2017/04/09
【 動作環境 】 KbMedia Player 本体の設定で
               kbdshow.kpi (WAV を使う BMS に必要)
               kbmpg123.kpi(or kbmad.kpi)(MP3 を使う BMS に必要)
               kbvorbis.kpi(OGG を使う BMS に必要)
               を有効にしておくことを推奨
-------------------------------------------------------------------------------

【概要】

  BMS を再生するためのプラグインです。

  Mamiya 氏制作 bmse.kpi v1.0r13：http://www.purose.net/befis/download/kmp/
  (v2.80beta40a 以前まで同梱させて頂いていました)

を KbMedia Player の新仕様に対応させた後継バージョンです。

  本プラグインではゲームをプレイすることは出来ません。BGA を表示することも出来
ません。音楽の再生のみとなります。


【WAV/MP3/OGG を使う BMS】

  本体のデコーダプラグインを使用します。プラグインに設定項目がある場合は反映さ
れます。また、本体側で無効にしているプラグインは使用されません。

  例えば kbmpg123.kpi を無効、kbmad.kpi を有効にしていれば kbmad.kpi が使用さ
れます。(標準同梱のプラグインの他に追加プラグインを導入していない場合)

  本体の仕様上の制限により、kbbms.kpi をプラットフォームが反対の本体で使用する
ことは出来ません。x86 版の kbbms.kpi を x64 版の本体から使用(またはその逆)する
ことは不可となります。デコーダプラグインから別のデコーダプラグインを使う機構へ
の対応が不完全(kbrunkpi.exe 経由が未対応)であるためです。

  デコーダプラグイン自体はプラットフォームが反対でも使用出来ます。例えば x64 版
の本体で x86 版しか提供されない MP3 対応プラグイン(otmpg123.kpi 等)を BMS 再生
で使うことが出来ます。

  bmse.kpi とは異なり、WAV の読み込みもデコーダプラグインを使用します。再生に必
要なプラグインが存在しなかったり無効にしていると何も再生出来ませんのでご注意下
さい。本体標準同梱のデコーダプラグインのうち、

  kbdshow.kpi
  kbmpg123.kpi or kbmad.kpi(どちらかは好みで)
  kbvorbis.kpi

は有効にしておくことをお勧めします。


【MIDI を使う BMS】

  MIDI を使う場合、本体で選択中の MIDI デバイスがデコーダプラグインの場合は、選
択中の MIDI 対応デコーダプラグインが使用されます。

  MIDI 対応デコーダプラグインの中には、再生位置のズレが大きいものがあります。
Kobarin が手がけた MIDI 対応プラグインだと、

  kbemidi.kpi (標準同梱)
  kbgxscc.kpi (プラグイン置き場で配布)

が該当します。これらのプラグインで MIDI を使用する BMS はうまく再生出来ないと考
えて下さい。曲の後半にいくほどずれていきます。kbemidi.kpi は特に顕著です。

  再生位置のズレがほとんどないプラグインでも、データによってはズレます。制作の
段階でのズレ、例えば使用音源の発音遅延などが原因として考えられます。その場合は
回避不可能です。

  midiOut デバイス(「Microsoft GS Wavetable Synth」等)や MIDI 対応演奏プラグイ
ン(「kbdmusic.kpi」「kbqt.kpi」等)を使用してMIDI を使用する BMS を再生すること
は出来ません。v2.63a とは異なり、midiOut デバイスとの同期再生は行いません。

  本体で選択中の MIDI デバイスが midiOut デバイスや演奏プラグインの場合は、有効
にしている MIDI 対応デコーダプラグインのうち、使用優先度が最も高いもの(「デバイ
ス設定」の「MIDI Device」-「Decoder」に表示されてる中で一番上のもの)が使用され
ます。


【WAV/MP3/OGG/MIDI 以外を使う BMS】

  #WAV コマンドに .wav/.mp3/.ogg 以外の拡張子を含むファイル名が指定されている場
合は、本体に対応するプラグインが存在すればそれを使用します。例えば WMA や M4A
や FLAC などを使用することが出来ます。WAV/MP3/OGG 以外を使用するデータを見たこ
とはありませんので、動作確認はしていません。


【BGA を使う BMS】

  本プラグインでは BGA は再生出来ません。kbwinamp + in_bm.dll で BGA を再生する
ことが出来ます。kbwinamp はプラグイン置き場にあります。in_bm.dll は公式サイトが
消滅しているようです。Internet Archive でないと見つからないかもしれません。


【既知の不具合】

  曲長計算が不正確です。BMS ファイル自体から取得可能な範囲までしか計算せず、再
生に使用する参照ファイルの曲長までは調べないためです。

  データが存在しない筈なので支障はほぼありませんが、演奏終了を返さないプラグイ
ンを使用するとメモリを使い果たしてアプリケーションが強制終了するまで演奏終了す
ることなく再生し続けます。SPC のような形式を使用した場合です。


【使用上の注意】

  本プラグインでは、最終的にはオーディオデータを全てメモリ上に展開します。長い
曲などでは大量のメモリを消費しますのでご注意下さい。

  ノンリエントラントなプラグインやプラットフォームが反対のプラグインを使うと大
量の kbrunkpi.exe が起動し、パフォーマンスが著しく低下します。x64 版の本体で
x64 版の kbdshow.kpi を無効にして x86 版の kbdshow.kpi を有効にした場合などが該
当します。

  BMS 再生時に使用するデコーダプラグインや MIDI デバイスを変更した場合、変更が
適用されるのはファイルを開き直した後となります。そのうち本体側で自動的にファイ
ルを開き直すように改善されるかもしれません。


【ライセンス】

  元にした bmse.kpi のライセンスが不明です。(PDS?)

  kbbms.kpi のソースコードは準備が整い次第公開する予定です。私が書いた部分は自
由に使って頂いて構いません。


-------------------------------------------------------------------------------

【更新履歴】

Version 0.04(2017/04/09)

・コンパイラを VS2017 に変更

/*---------------------------------------------------------------------------*/

Version 0.03(2017/01/16)

・MultiByteToWideChar の使い方がまずい箇所があったのを修正
　(バッファサイズが足りない場合の処理)

/*---------------------------------------------------------------------------*/

Version 0.02(2017/01/09)

・正式版公開に向けての細かい修正(ドキュメント/ソースコードの整理等)

/*---------------------------------------------------------------------------*/

Version 0.01(2016/12/25)

・初版(v2.80beta40a 以前まで同梱していた bmse.kpi の後継版)
・プラグインのファイル名を bmse.kpi から kbbms.kpi に変更
・ベースは bmse.kpi v1.0r13
・新プラグイン仕様に対応
・アーカイブ内の BMS にきちんと対応
・WAV や MP3 等の読み込みにプレイヤー本体のプラグインを使用するようにした
　・kbbms.kpi 自身がプラグインを検索するのではなく、本体が提供する機能を使う
　・#WAV コマンドによる指定ファイルの拡張子が .wav の場合は、.wav を開けなか
　　ったら同名の .mp3 -> .ogg をこの順に開いてみる
　・#WAV コマンドによる指定ファイルの拡張子が .wav 以外の場合は、指定ファイル
　　をそのまま開く。本体が対応する全ての形式に対応可能
　・使用プラグインに設定がある場合は反映される
　・使用プラグインの有効/無効の設定も反映される
　・bmse.kpi とは異なり、.WAV ファイルもプラグインを使うため、.wav を再生可
　　能なプラグインが無効な場合は再生出来なくなる
・MIDI を使う BMS を再生時は MIDI 対応デコーダプラグインを使うようにした
　・本体選択中の MIDI デバイスがデコーダプラグインならそれが使用される
　・本体選択中の MIDI デバイスが midiOut デバイスや演奏プラグインの場合は、
　　有効にしている MIDI 対応デコーダプラグインの中で使用優先度が最も高いもの
　　が使用される
・対応拡張子に .bml を追加
・64bit 版を作成

-------------------------------------------------------------------------------
Kobarin(hidkob@pb.highway.ne.jp)
https://kobarin.sakura.ne.jp/
