-------------------------------------------------------------------------------
【  名  称  】 Z-MUSIC Decoder
【ファイル名】 kbzmdrive.kpi
【バージョン】 0.12alpha3
【対応拡張子】 zms/zmd
【 Platform 】 x86(32bit) のみ / x64(64bit) なし
【 公 開 日 】 2016/10/03
【 動作環境 】 KbMedia Player v2.80beta23 以降
               v2.80beta29 より古いと動作しません。
-------------------------------------------------------------------------------

Z-MUSIC 再生プラグインです。対応拡張子は zmd/zms です。
内蔵音源のみに対応します。MIDI と内蔵音源の両方を含む場合、MIDI 部分は再生され
ません。MIDI のみの場合、無音が再生されます。

いずれ ZtoM などと組み合わせて同期再生が出来るようにするかもしれませんが、きち
んと対応するのは難しいと思います。

kbzmdrive.kpi を使用するには、FIXER さん制作の ZMDRIVE 0.4C が必要です。
ZMDRIVE 0.4C は kbzmdrive.kpi に同梱されています。

このプラグインには m_puusan 氏制作の X68Sound.dll の RuRuRu 氏による改造版
(2013/08/03版)が組み込まれています。通常、ZMDRIVE.exe の動作には X68Sound.dll 
が必要となりますが、kbzmdrive.kpi 自体に組み込まれているので X68Sound.dll は
不要です。

このプラグインは ZMDRIVE.exe だけでなく X68Sound.dll の内部実装にも依存するため
kbzmdrive.kpi から X68Sound.dll を切り離すことは出来ません。

組み込まれてるよりも新しい X68Sound.dll を ZMDRIVE.exe と同じフォルダに置いたと
しても無視されます。ZMDRIVE.exe が X68Sound.dll をロードしようとするのを横取り
して kbzmdrive.kpi が X68Sound.dll のフリをするような処理をしています。

そういうわけで、このプラグインは極めて特殊です。ZMDRIVE.exe のバージョンは動作
確認に用いたもの（同梱されているもの）と「全く同じ」バージョンをお使い下さい。

動作確認した ZMDRIVE のバージョンは 0.4C です。
動作確認した ZMDRIVE.exe の更新日時は 2002/06/15 00:35 となっています。

このバージョンより古くても新しくても駄目です。
同梱しているものよりも新しい ZMDRIVE(タイムスタンプが 2013/05/16 が最新？)もあ
りますが、残念ながら動作しません。内部動作がかなり変わっているようなので、対応
するにはプラグインを大幅に修正する必要があります。

対応してもまた新しいバージョンが出たらその都度作り直しとなりますので、ちょっと
手を出しづらいです。

このプラグインは永久にα版です。自己責任で使用して下さい。

【zmsetup.ini】

音源の設定をするためのファイルと演奏ファイルが分かれているものがあります。
例えば foo.zmd を再生するために bar.zmd が必要になることがあります。
ZMDRIVE では先に bar.zmd を再生してから foo.zmd を再生させなければならないよう
なデータです。

このようなデータを正しく再生するためには、演奏ファイルと同じフォルダに 
zmsetup.ini というファイルを作成し、

[foo.zmd]
SetupFile=bar.zmd

のように記述します。同じフォルダにある全ての演奏ファイルが bar.zmd を必要とす
る場合は、[Default] セクションに記述することも出来ます。

例：
[Default]
SetupFile=bar.zmd


例えば、

http://www27.tok2.com/home/studioMM/MusicRoom/zmusic_data.html

にある「LAST FORCE」の ZMD を正しく再生するためには、

[Default]
SetupFile=LastForce [00] SET UP.ZMD

という内容の zmsetup.ini を LastForce [00] SET UP.ZMD と同じフォルダに作成しま
す。

同様に、「Royal Squash」を正しく再生するためには

[Default]
SetupFile=RoyalSquash(YM2151) [00] SetUp_ZPD_BlockData.ZMD

という内容の zmsetup.ini を RoyalSquash(YM2151) [00] SetUp_ZPD_BlockData.ZMD 
と同じフォルダに作成します。

SetupFile に指定できるファイルの拡張子は ZMD/ZMS のいずれかのみです。


同様に、再生するために ZPD ファイルが必要なのに自動的に ZPD が読み込まれないよ
うな曲データを再生するには、「SetupFile」キーではなく、「ZPDFile」キーに必要な
ZPD ファイル名を記述します。

例：
[Default]
ZPDFile=aaa.zpd

ZPDFile に指定できるファイルの拡張子は ZPD のみです。


SetupFile と ZPDFile の両方を指定しないと正しく再生出来ない曲があります。

例えば、

http://www.xacs.jp/works.html (2016/1/23現在リンク切れ)

にある「Cylips」の曲データを正しく再生するには、

[Default]
SetupFile=CY_VOICE.ZMD
ZPDFile=VA.ZPD

のように記述します。

圧縮ファイル内に zmsetup.ini が存在する場合にも正常に再生されます。


【更新履歴】

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

Version 0.12alpha3(2016/10/03)

・v2.80beta29 のプラグイン仕様に対応(インターフェースのみ)
・インターフェースのみの対応なのでバージョン番号変更せず

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

Version 0.12alpha2(2016/08/22)

・v2.80beta23 のプラグイン仕様に対応(インターフェースのみ)
・インターフェースのみの対応なのでバージョン番号変更せず

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

Version 0.12alpha(2016/08/16)

・v2.80beta21 のプラグイン仕様に対応(インターフェースのみ)
・コンパイラを VS2015 update 3 に変更

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

Version 0.11alpha(2016/01/25)

・新プラグイン仕様に対応
・ZMDRIVE の新バージョン(2013/05/16 版が最新?)には未対応
・アーカイブ内の zmsetup.ini や zpd ファイル等にきちんと対応
・X68Sound.dll を 2013/08/03 版相当に差し替え
　・ZMDRIVE.exe が X68Sound.dll を LoadLibrary するのをフックして kbzmdrive.kpi
　　が X68Sound.dll のフリをする。そのルーチンの差し替え
　・X68Sound.dll の内部実装にも依存するため、X68Sound.dll をプラグインから切り
　　離す(kbzmdrive.kpi の修正なしに X68Sound.dll を差し替える)ことは出来ない
・本体が 2.70alpha 以降だと再生位置を戻すと演奏が止まる現象等を回避
　・ZMDRIVE.exe がファイルを開くときの共有モードと新プラグイン仕様(に伴う本体
　　の仕様変更)との相性問題
　・再生するファイルとその関連ファイルのコピーをテンポラリフォルダに作成して
　　コピーを開くことで対処
　・v0.10alpha(公開し忘れ?) の対処法は Windows10 では機能しない

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

Version 0.10alpha(2005/11/??)(公開し忘れ?)

・CreateFileA の共有モードを強制的に FILE_SHARE_READ|FILE_SHARE_WRITE にする
　ようにした
　・再生中のファイルを同時に開けない(＆2.70alpha 以降ではシークすると演奏が止ま
　　る)のを回避するため
　・MFC42.dll のバージョンによっては kernel32.dll の CreateFileA のフックが出
　　来ないため機能しない(少なくとも Windows10 では NG)

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

Version 0.09α(2005/03/15)

・曲を切り替えるとき（ファイルを閉じるとき）に落ちることがあるバグを修正
・zmsetup.ini に関する以下の修正
  ・SetupFile キーではなく、ZPDFile キーで ZPD を指定するように仕様変更
・細かい修正

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

Version 0.08α(2005/03/13)

・zmsetup.ini に関する以下のバグを修正
  ・SetupFile を指定するとフリーズすることがあるのを修正
  ・ZPD を指定しても反映されないのを修正
  ・ファイル名によっては反映されないことがあるバグを修正

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

Version 0.07α(2005/03/13)

・ZMDRIVE.exe の終了処理を修正
・ZMDRIVE.exe のプロセス優先を「高」ではなく「通常」にした
・CreateRemoteThread が使える環境（NT 系）では CreateRemoteThread を使うように
  した
・音源設定用に事前にファイルを開いておかないと正常に再生出来ないデータに対応

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

Version 0.06α(2005/03/11)

・データによっては演奏開始後直ちに演奏終了してしまうバグを修正

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

Version 0.05α(2005/03/10)

・曲長計算が高速化
・演奏終了の検出結果がタイミングに依存しなくなった
・ZMDRIVE.exe の midiOut 系 API 呼び出しを防止するようにした

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

Version 0.04α(2005/03/08)

・プロセス・スレッド間の同期処理を改良して動作が少し高速化
・ループしない曲の演奏終了を検出するようにした
・FIXER 氏（の代理人？）の許可を頂いたので、ZMDRIVE 0.4C を同梱することにした
・kmp_Config を廃止（ZMDRIVE の同梱により、パスを設定する必要がなくなったため）

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

Version 0.03α(2005/03/07)

・音とびやテンポよれを大幅に改善
・等速以外の速度でもきちんと再生されるようになった

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

Version 0.02α(2005/03/05)

・再生周波数要求に応じるようにした（48000Hz, 44100Hz, 22050Hz のみ）
・X68Sound.dll の細かいバグ（稀に演奏が始まらないことがある）を修正して 
  kbzmdrive.kpi に内蔵。これにより、
  ・X68Sound.dll が導入されていなくても動作するようにした
  ・稀に演奏が始まらずにいきなり演奏終了してしまうことがあるのを修正

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

Version 0.01α(2005/03/05)

・初版

-------------------------------------------------------------------------------
Kobarin(hidkob@pb.highway.ne.jp)
http://hwm5.gyao.ne.jp/kobarin/
