-------------------------------------------------------------------------------
【  名  称  】 FPD Decoder
【ファイル名】 kbfpd.kpi
【バージョン】 0.21
【対応拡張子】 fpd/fm
【 Platform 】 x86(32bit) のみ / x64(64bit) なし
【 公 開 日 】 2017/04/09
-------------------------------------------------------------------------------

【概要】

FPD 再生プラグインです。対応拡張子は FPD/FM です。
FPD について詳しくは

    http://www.rat.co.jp/fpd98/

を参照して下さい。


【fpd98.dll】

kbfpd.kpi の動作に必要になります。
2017/01/09 現在の最新バージョンを同梱しています。kbfpd.kpi の仕様上、同梱のとは
異なるバージョンの fpd98.dll では正常動作しない可能性がありますので、新しいバー
ジョンの fpd98.dll が公開されていたとしても、dll は差し替えない方が良いかもしれ
ません。


【fpd98sub.dll】

KYU 氏制作の fpd98sub.dll を導入することにより、FPD の演奏時間を取得出来るよう
になり、無限ループにも対応出来ます。kbfpd.kpi に最初から同梱されています。

最新の fpd98sub.dll は

    http://www7b.biglobe.ne.jp/~kyutech/

にあります。FPD98 や開発キットに同梱されている fpd98sub.dll では動作しません。

fpd98sub.dll がない場合、表示上の演奏時間は KbMedia Player の設定の「デフォルト
の曲の長さ」になります。（実際には２回だけループした後、演奏終了します）

fpd98sub.dll は kbfpd.kpi と同じフォルダに置いて下さい。kbfpd.kpi と同じフォル
ダに置かないと動作しません。


【FPV ファイル】

ダウンロードしてきた FPD/FM ファイルを再生するために FPV ファイルが必要になる
ことがあります。必要な FPV ファイルは FPD/FM ファイルと同じフォルダに置くか、
専用の FPV フォルダに置いて下さい。FPV 検索フォルダは設定することが出来ます。

    http://www.rat.co.jp/fpd98/

にある FPD98 本体をインストールした後、FPD98 のインストールフォルダに作成される

・PCM95
・PCM97

フォルダにある FPV ファイル群が必要となるデータが多いです。少なくともこの２つ
のフォルダは必ず FPV フォルダに置いて下さい。

FPV フォルダはサブフォルダも検索します。階層は無限です。
例えば

C:\PcmDir\FPV\PCM95
C:\PcmDir\FPV\PCM97

のように

C:\PcmDir\FPV\

の下に PCM95/PCM97 のフォルダをコピーしておき、設定では FPV 検索フォルダを

C:\PcmDir\FPV\

のように設定しておけば良いです。


【著作権】

・同梱の fpd98.dll の著作権は株式会社ラットが保有します。
・同梱の fpd98sub.dll の著作権は KYU 氏が保有します。


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

【更新履歴】

Version 0.21(2017/04/09)

・コンパイラを VS2017 に変更

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

Version 0.20(2017/02/26)

・ソースコード公開に伴う細かい修正

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

Version 0.19(2017/01/09)

・kbfpd.kpi を KbMedia Player 以外から利用出来ないように細工するのをやめた
・開発元の株式会社ラット様より、WAV ファイル出力するアプリケーションの配布
　は問題ないとの確認を取ることが出来ました
・kbwavefile.kpi 公開時点で既に WAV ファイル出力出来てしまっていたけど

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

Version 0.18(2016/08/16)

・v2.80beta21 のプラグイン新機能に対応
　・General/Temporary 各セクションの説明を追加
　・Temporary セクションの表示名を「一時的な設定」に変更
　・著作権表示で改行を使用

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

Version 0.17(2016/08/01)

・v2.80beta19 のプラグイン仕様に対応(インターフェースのみ)

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

Version 0.16(2016/07/25)

・v2.80beta18 の新プラグイン仕様に対応
・設定ダイアログ自動生成に対応
・kbfpd.ini を廃止
・本体をバージョンアップして置き場所が変わっても設定が引き継がれる
・設定可能な項目
　・FPV 検索フォルダ
　　・今まで本体で設定していたが廃止。保存場所が変わるため、設定し直す必要
　　　がある
　・常に別プロセスで使用
　　・プラグインが不安定で本体が巻き込まれないようにするための設定
　　・パフォーマンスが低下するが本体が巻き込まれないので規定では true
　　　(v0.15 以前では false 相当)
　　・本体が 64bit 版の場合は設定値に関わらず常に別プロセスで使用される
　・再生周波数(44100/33075/22050/16538/11025)
　・ステレオ(false 時はモノラル)
　・エフェクト(なし/リバーブ/リバーブ・コーラス)
　・システムエフェクト(なし/リバーブ/リバーブ・コーラス)
　・ここから下は常用に適さないため、最後に設定変更してから 24 時間以上経過後
　　に初期値に戻す(戻さないように設定することも出来る)
　・テンポ
　　・プレイヤー本体の速度変更機能より高音質低負荷だが、再生位置の進み方が
　　　速度に連動せず、曲長計算で取得される曲の長さが変わってしまう
　　・データや設定値によっては再生出来なかったり強制終了してしまうことがある
　　　・fpd98sub.dll 内でゼロによる除算エラーが発生。プラグイン側で強引に回避
　　　　を試みるが失敗したら強制終了(FPD98 でも同じ現象が発生する)
　・トランスポーズ(音程)
　　・プレイヤー本体の速度変更機能より高音質低負荷
・モノラル(kbfpd.ini の op_v=1)だと正しく再生出来ていなかったのを修正

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

Version 0.15(2016/07/11)

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

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

Version 0.14(2016/01/31)

・タイトルがない曲のタイトルに不定な値(ゴミ)が入るのを修正
・日本語のファイル名を正しく扱えないことがあったのを修正

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

Version 0.13(2016/01/18)

・新プラグイン仕様に対応
・本体からのループ回数要求に応じるようにした
　・「デフォルトのループ回数」で指定した回数になる
　・ループ回数を fpd98.dll に渡すのではなく、fpd98sub.dll から得た曲長分だけ
　　再生する
　・データによってはループ回数を変えた場合の演奏終了の位置にばらつきがある
・ループ曲でない場合の曲長にフェード時間が加算されないようになった
・アーカイブ内の FPV にきちんと対応
　・新仕様の機能を使用
　・今までは本体がアーカイブ内の FPV の抽出処理を行っていたが、FPD のファイル
　　フォーマットが分からないため抽出に失敗する可能性があった
　・この版からは fpd98.dll が要求してきた FPV ファイルを確実に処理するため失
　　敗の可能性はほぼなくなった
・可能な限り UNICODE に対応
　・FPV の検索パスに UNICODE でしか表現出来ない文字を使用したフォルダ名を指定
　　しても再生出来るようになった
・ループしない曲を再生すると曲の終端付近でフリーズするのを修正
・終了処理(fpd98.dll の PlayEnd 呼び出し)でフリーズすることがあるのを回避する
　方法がどうしても分からないため、本体を巻き込まないように常に kbrunkpi.exe
　経由で再生させるようにした

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

Version 0.12(2015/10/25)

・プラットフォームツールセットを Visual Studio 2015 - Windows XP (v140_xp) に
　変更(Windows XP でも動作するように)

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

Version 0.11(2015/10/18)

・コンパイラを VisualStudio2015 に変更

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

Version 0.10(2015/8/30)

・fpd98sub.dll を v1.05 に差し替え
・スレッドの同期周りを改善
　・音が途切れることがあったのを修正
　・フリーズすることがあったのを修正
　・シークが高速化

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

Version 0.09(2012/10/18)

・ファイルを開くときの共有モードを強制的に FILE_SHARE_READ|FILE_SHARE_WRITE に
  するようにした
・kmp_GetTestTagInfo に対応
  ・"title" のみ

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

Version 0.08(2005/01/31)

・kbfpd.ini の編集により、エフェクトやループ回数等を設定出来るようにした（設定
  ダイアログには未対応）

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

Version 0.07(2003/05/21)

・曲長取得に失敗することがあるのを今度こそ修正（読み取り専用属性がついたファイ
  ルで失敗していた）

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

Version 0.06(2003/05/18)

・エラーダイアログ表示時、約 5 秒程度経過したら自動的に閉じるようにした
・曲長取得に失敗することがあるのを修正（？）

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

Version 0.05(2003/05/12)

・FPV の検索フォルダを無限階層検索するようにした

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

Version 0.04(2003/05/05)

・fpd98.dll/fpd98sub.dll を kbfpd.kpi と同じフォルダに存在するものしかロードし
  ないように仕様変更
  ・fpd98.dll のバージョン違いによる誤動作を回避するため（kbfpd.kpi は
    fpd98.dll の内部実装に強く依存するため、将来的に公開される最新の fpd98.dll
    で動作することを保証出来ない）
  ・FPD 本体や開発キットに同梱の fpd98sub.dll では動作しないため
・fpd98sub.dll がない場合の演奏時間を 0xFFFFFFFF（デフォルトの曲の長さ）に変更
・検索パス指定に関するバグを修正
・細かい修正

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

Version 0.03(2003/04/30)

・FPD98.DLL に関する以下のバグを強引に回避
  ・PlayEnd 呼び出し時に落ちることがある（まだ終了していないスレッドのハンドル
    を CloseHandle するのが原因）
  ・一度でも FreeLibrary すると次回以降 Play で落ちる（UnregisterClass してい
    ないため、次回以降適切な WndProc が呼ばれないのが原因）
  ・リソースリーク回避（CreateEvent したハンドルを CloseHandle し忘れている、
    InitializeCriticalSection したクリティカルセクションオブジェクトを
    DeleteCriticalSection し忘れている）
  ・タイミングに依存して発生する（と思われる）不具合
・↑の修正により、プラグインのロード・アンロードを繰り返しても落ちなくなった
  （はず）
・タイトル取得に対応（KbMedia Player Version 2.31α3 以降でのみ使用可能）

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

Version 0.02(2003/04/27)

・fpd98.dll のバイナリを書き換えなくても動作するようにした
・fpd98sub.dll の API を呼び出し時に落ちる可能性があったのを修正
・fpd98sub.dll が導入されている場合は無限ループに対応
  （「演奏」メニューの「単曲リピート」有効時）
・必要な FPV ファイルがない場合などのエラーダイアログ表示時、出来るだけ前面に
  表示する＆タスクバーに表示されるように修正
・曲長計算用のテンポラリファイルをカレントフォルダに作成していたバグを修正（エ
  ラーが発生して落ちた場合、タイミングによってはカレントフォルダにゴミファイル
  が残ったかもしれない）

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

Version 0.01(2003/04/24)

・初版

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