-------------------------------------------------------------------------------
【  名  称  】 DirectShow Decoder
【ファイル名】 kbdshow.kpi
【バージョン】 2.04
【対応拡張子】 wav/aif/aiff/aifc/au/snd/avi/mpg/m1v/mpe/mpeg/asf/wmv/mpv2/mpa/
               mov/qt/3gp/3g2/m4v/mp4
【 Platform 】 x86(32bit)/x64(64bit)
【 公 開 日 】 2021/07/04
-------------------------------------------------------------------------------

【概要】

  DirectShow を使用して Windows Media Player が対応する様々な形式を再生するため
のプラグインです。既定では

  .wav/.aif/.aiff/.aifc/.au/.snd/.avi/.mpg/.m1v/.mpe/.mpeg/.asf/.wmv/.mpv2/
  .mpa/.mov/.qt/.3gp/.3g2/.m4v/.mp4

に対応しています。

  既定の拡張子以外にも再生したい拡張子がある場合は本体の「ツール」->「プラグイ
ン設定」で対応拡張子を追加することが出来ます。ただし、適切な DirectShow フィル
タを導入している必要があります。

  拡張子を追加しても再生出来ない場合は必要な DirectShow フィルタが導入されてい
ません。K-Lite Codec Pack や LAV Filters 等の DirectShow フィルタを導入すること
で対応拡張子を増やすことが出来ます。

  なお、.wav については中身が PCM であれば DirectShow を使わずに内蔵ルーチンで
再生します。

  MediaFoundation にも対応していますが、現時点では動画の映像と音声の同期処理に
不具合があり、映像と音声がずれることがあります。再生速度を等速にするなど、通常
使用であればほぼ問題ないと思いますが、DirectShow で再生可能なら DirectShow で再
生することをお勧めします。拡張子ごとに DirectShow/MediaFoundation どちらで再生
するか細かく設定することが出来ます。

  MP4 関係(3gp/.3g2/.m4v/.mp4)は LAV Filters 等の DirectShow フィルタを導入して
いないと再生することが出来ませんので、既定では MediaFoundation で再生するように
なっていますが DirectShow で再生出来るなら DirectShow で再生することをお勧めし
ます。


【動画の再生】

  v2.00 から動画の映像部分に対応しましたが、デコーダプラグインの仕様上、本体か
ら動画ウィンドウのサイズ等を制御することが出来ません。「演奏2」=>「Video」から
制御しても無視されます。「プラグイン設定」から制御することが出来ます。

  映像と音声がずれたり、映像の動きが kbmov.kpi と比べるとぎこちないかもしれませ
ん。気に入らない場合は動画の拡張子を対応拡張子(DS/MF)から外して kbmov.kpi を使
用して下さい。


【既知の不具合】

  動画を再生時、映像と音声がずれることがあります。DirectShow 使用時は madVR を
使用時に発生しやすいようです。MediaFoundation 使用時は .mpg 再生時にずれるデー
タが多いです。その為 .mpg はデフォルトでは MediaFoundation の拡張子から外してあ
ります。kbmov.kpi では問題ありませんが、ずれやすいデータを kbmov.kpi で再生する
と、再生開始直後やシーク直後の映像の動きがぎこちなかったり音声が途切れたりしま
す。音声に合わせて映像を遅らせたり、映像に合わせて音声を遅らせてるような感じで
す。

  「LAV Audio Decoder」を使用して 32bit float の wavpack データを再生すると
32bit int と見なしてしまい、爆音ノイズになります。「LAV Audio Decoder」の設定画
面の「Formats」タブの「Output Formats」で 32bit int のチェックを外すことで現象
を回避することが出来ますが、標準同梱の kbwv.kpi を使えば良いだけです。

  ファイル形式によってはシークが不正確な為、１ファイルに全曲まとめた .cue ファ
イルを正常に再生出来ません。(「LAV Audio Decoder」による Monkey's Audio 等)
  また、ノンストップミックスされた曲のギャップレス再生がうまく繋がらないことが
あります。(mp3 等)

  確認出来た形式はどれも標準でプラグインが同梱されていて、そちらでは問題ない為
実害はありません。

  「ストリームから開く」を有効時、DirectShow で WMV を再生出来なかったり、映像
と音がずれる現象を確認しています。「ストリームから開く」を無効にすることで現象
を回避することが出来ます。「ストリームから開く」とアーカイブ内のデータを開くと
きに若干のパフォーマンス向上がありますが、アーカイブ内のデータを再生することが
ないのであれば、無効にしても実害はありません。


【QuickTime】

  QuickTime 形式の動画(拡張子 mov/qt) は、標準同梱の kbdshow.kpi や kbmov.kpi
と拡張子が競合しています。プラグイン設定で拡張子またはプラグイン自体を有効化/
無効化するなどして使用するプラグインを選んで下さい。

  kbqt.kpi を使用するには QuickTime のインストールが必要です。QuickTime の Wind
ows 版は開発元の Apple がサポートを打ち切っており、セキュリティ上、使用はお勧め
出来ません。今後 kbqt.kpi の配布は中止することを検討しています。

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

【更新履歴】

Version 2.04(2021/07/04)

・環境によって(VMware上のXPで確認)は動画をまともに再生出来なくなっていたのを修
　正
・動画のフルスクリーンでの再生に対応
　・プラグイン設定で「最大化時フルスクリーン」を true にする
・設定項目追加
　・「最大化時フルスクリーン」
・「動画の映像を再生」の設定が false のとき、MediaFoundation で動画を再生すると
　フリーズするのを修正

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

Version 2.03(2021/06/21)

・ビデオレンダラーに関する以下の修正
　・Enhanced Video Render(EVR) に対応
　・Windows Vista 以降のときの既定値を VMR9 から EVR に変更
　・選択肢の「Video Renderer(システムの既定)」を「Default Video Renderer」に変
　　更
　・選択肢に「Enhanced Video Render(EVR)」と「Old Video Renderer」を追加
　・VMR7/VMR9 使用時に Windowless Mode で再生するようにした
　・VMR7 と Default Video Renderer 使用時、
　　HKEY_CURRENT_USER\SOFTWARE\Microsoft\Direct3D\Shims\EnableOverlays に
　　本体のパスが書き込まれていたら削除するようにした
　　・既に本体のパスが書き込まれていて値が 1 だと削除しても本体を再起動するまで
　　　映像が真っ黒になることがある
　　・削除してもしばらくするとまた書き込まれるのでやるだけ無駄かも
　・DirectShow を使用して動画再生時、ウィンドウのタイトルバーに使用中のビデオレ
　　ンダラー名を表示するようにした(未知の場合は CLSID)

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

Version 2.02(2021/06/15)

・MediaFoundation 使用時、動画の映像部分の再生に対応
　・映像と音声の同期に改善すべき点あり(再生速度変更時の動作が不自然など)
・設定に関する以下の修正
　・「QuickTime無効化」を追加(true にすると対応拡張子から .qt/.mov を外す)
　・「MediaFoundationを使う」の既定値を true に変更
　・「動画位置初期化」が true でもサイズは他の設定に従うようにした
　・「演奏停止」の「演奏停止時ウィンドウ閉じる/ウィンドウ閉じると演奏停止」を廃
　　止
　・DirectShow での動画再生時の映像と音声の同期に関する設定追加
・動画を最大化状態で再生時、シークや曲の切り替え時に元のサイズに戻るのを修正

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

Version 2.01(2021/06/01)

・動画ウィンドウのクライアント領域の縦横比を設定出来るようにした
　・動画ウィンドウのサイズを(幅だけでなく高さも)固定したい場合に設定する
・演奏が停止したら動画ウィンドウを閉じる設定を追加
・データによってはマルチチャンネルを返して再生出来ないことがあったのを修正
・対応拡張子(DS)の既定値から MP4 関係(.3gp/.3g2/.m4v/.mp4) を外した
　・追加の DirectShow フィルタ未導入の環境では再生出来ない為
・「ストリームから開く」の既定値を false に変更
　・Splitter フィルタ(LAV Splitter 等)がないと WMV を開けないため
・選択可能なビデオレンダラーに VMR7 を追加
　・WindowsXP では既定値とした
　・Windows10(7, 8も?) では、レジストリに実行ファイルのパス情報が書き込まれて一
　　部の動画形式(.mpg で確認)において映像部分が表示されなくなる現象が確実に発生
　　するので推奨しない(詳細はプラグイン設定のヘルプを参照)
・「ストリームから開く」有効時、対象データのファイル名が要求されたら通知する(パ
　スを除いた部分のみ)ようにした(効果は不明)
　・LAV Splitter からは要求が来るが LAV Splitter 無効時は要求が来ない
・設定項目追加
　・DS/MF優先(拡張子が DS/MF ともに有効時に DS/MF どちらで再生するか)
　・動画縦横比(動画ウィンドウの幅と高さを固定したいときに指定)
　・演奏停止(演奏停止時に動画ウィンドウを閉じるかどうか)

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

Version 2.00(2021/05/21)

・大幅にバージョンアップ（ほぼ作り直し）
・対応拡張子を64bit版と32bit版で区別するのをやめた
　・どちらか一方でしか再生出来ない形式が見当たらない為
・動画の映像部分の再生に対応
　・ある程度完成度が上がって来たら kbmov.kpi を廃止予定
　・単曲リピート時、先頭に戻った直後にプラグインに対して返す再生位置情報が不正
　　確なため、終端付近の映像が止まってしまう＆冒頭の映像が正しく表示されなかっ
　　たり、止まったまま動かなくなってしまうことがある
　・サイズや「常に手前に表示」等の設定は本体の「演奏2->Video」からでは制御出来
　　ない(プラグイン設定で設定可能)
　・ビデオレンダラーに VMR9 と madVR を選択可能(madVR は別途インストール必要)
・非推奨のインターフェース(IAMMultiMediaStream)の使用をやめて Renderer Filter
　を内蔵することにより各種不具合修正・改善
　・LAV Filters 導入時にビット数を正しく取得出来ずに爆音ノイズが発生するのをほ
　　ぼ修正(wavpack の 32bit float だけ int と区別出来ない為、爆音ノイズになる)
　・山岡忠夫氏の wavext v1.05 のソースコードを参考
・Source Filter を内蔵することによりストリームから開けるようになった
　・アーカイブ内の曲を一時ファイルを作成しないで展開しながら、またはメモリ上に
　　展開しての再生に対応
　・アーカイブを実際にどう処理するかはアーカイブプラグインによる
　・Gandharva 151108 版(作者名不明)のソースコードを参考
・Media Foundation(DirectShow の後継とされるもの) に対応
　・映像には未対応(対応したら追加の DirectShow フィルタなしで mp4 に対応予定)
　・追加の DirectShow フィルタなしで再生出来る形式が少し増えるが、音楽系(mp3/
　　aac/m4a/flac等)は標準同梱の専用プラグインがあり、動画系(mp4/3gp等)は映像に
　　未対応なので現状ではほぼ無意味
　・有効時は Media Foundation => DirectShow の順に開く
　・K-Lite Codec Pack 等のコーデックパックを入れても再生可能な形式は増えない
　　(増えるのは DirectShow の方)
　・プラグイン設定で有効/無効の切り替え可能。既定は無効
・設定項目追加
　・対応拡張子
　　・編集不可。「対応拡張子(DS/MF)」 と「DirectShow/MediaFoundationを使う」の
　　　設定により決定される
　・対応拡張子(DS)
　・対応拡張子(MF)
　・DirectShow を使う
　・Media Foundation を使う(今のところ利用価値なし)
　・ストリームから開く
　・動画関係
　　・動画の映像を再生
　　・常に手前に表示
　　・動画のサイズ
　　・動画位置初期化
　　・ビデオレンダラー
・既定の対応拡張子に動画関係追加

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

Version 1.30(2017/04/09)

・コンパイラを VS2017 に変更

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

Version 1.29(2017/01/09)

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

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

Version 1.28(2016/12/25)

・WAV を内蔵ルーチンで再生出来ないことがあるのを修正

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

Version 1.27(2016/12/19)

・WAV の終端付近にタグ等を含む場合、その部分もオーディオデータとして再生して
　いた(終端でノイズが鳴っていた)バグを修正

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

Version 1.26(2016/12/18)

・WAV 再生に(可能なら)DirectShow を使わないようにした
　・中身が PCM 以外の場合は従来通り DirectShow を使う
　・32bit float/64bit float の WAV に対応

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

Version 1.25(2016/12/11)

・設定ダイアログリソースの削除し忘れ修正

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

Version 1.24(2016/08/01)

・v2.80beta19 の新プラグイン仕様に対応
・対応拡張子の指定の仕方を変更( '.' を付けずに指定=> '.' を付けて指定)
・GUID を変更(↑の仕様変更のため)

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

Version 1.23(2016/07/25)

・v2.80beta18 の新プラグイン仕様に対応
・GUID を元に設定の保存場所が決まるようにした
・x86/x64 版で設定が共有されるようになったが、使用可能な DirectShow フィルタ
　が x86/x64 で異なる可能性があるため、対応拡張子の設定はキーを異なる値にして
　区別するようにした

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

Version 1.22(2016/07/11)

・コンパイラを VS2015 update3 に変更
・IKpiConfig(本体による設定画面の自動生成)に対応(v2.80beta17 以降)
　・バージョンアップ時に(本体の置き場所が変わっても)設定が引き継がれるようにな
　　った

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

Version 1.21(2016/06/26)

・フォーマット(サンプル周波数・ビット深度等)の取得部分がまずかったのを修正
・無駄に非同期な処理を行っていたのを修正
・メモリリーク修正

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

Version 1.20(2016/03/13)

・細かい修正(alpha を外す、GUID 付加等)

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

Version 1.20alpha(2015/11/30)

・2.70alpha8 のプラグイン仕様変更に対応


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

Version 1.19alpha6(2015/11/03)

・設定ダイアログを修正(「KBWMA.DLL を使う」を廃止)

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

Version 1.19alpha5(2015/10/25)

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

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

Version 1.19alpha4(2015/10/18)

・コンパイラを VisualStudio2015 に変更
・64bit 版を作成

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

Version 1.18alpha(2015/09/29)

・KbMedia Player Version 2.70alpha の新プラグイン仕様に対応。ただし「ストリーム
　からファイルを開く機構」には未対応なので、アーカイブ再生時は一時ファイルが作
　成される
・WMA を標準の対応拡張子から外した(kbwma.kpi が担当)
・「設定」の「WMA 再生に KBWMA.DLL を使う」を廃止（拡張子 WMA を有効にした場合
　は DirectShow の機能を使って WMA 再生）

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

Version 1.17(2015/08/30)

・Open を呼び出したのとは異なるスレッドから Close を呼ぶと、Open を呼び出した
  スレッドが終了するまでフリーズするのを修正
・SetPosition を呼ばずに Render すると失敗するのを修正
・kbwma.dll を FreeLibrary するようにした(Version 1.14 の当時の問題は解決した
　と思われるため)
・実際は 2008年5月頃に修正していたが公開し忘れていた(^^ゞ

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

Version 1.16(2005/01/31)

・設定ダイアログの表示に対応（KbMedia Player Version 2.38beta2 以降が必要）
・再生時に落ちることがあるバグを修正(kbwma.dll)

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

Version 1.15(2003/01/21)

・作成した ini ファイルをメモ帳で開くとコメント（セミコロンで始まる行）に改行
  が入らないのを修正（CR LF とするべきところを LF しか入れてなかった）

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

Version 1.14(2003/01/14)

・24 bit データを再生するとノイズになるバグを修正
・kbwma.dll の Windows Media Format SDK を Version 9 に差し替え（version 9 固
  有の機能は使用していない）
・↑により、なぜか kbwma.dll を FreeLibrary すると落ちるようになってしまった
  （旧版の kbwma.dllでも落ちるようになってしまった。wmvcore.dll の問題か？）の
  で、kbdshow.kpi のアンロード時は kbwma.dll を FreeLibrary しないようにした。
  （初回のみ LoadLibrary し、２回目以降は GetModuleHandle するように修正）
・kbdshow.kpi/kbwma.dll ともにファイルサイズが小さくなった

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

Version 1.13(2002/06/16)

・kmp_GetTestModule が複数回呼ばれると KMP_MODULE::ppszSupportExts が壊れるの
  を修正

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

Version 1.12(2001/11/08)

・DllMain で DisableThreadLibraryCalls() を呼ぶようにした
・KBWMA.DLL を使わずに WMA を再生するとき、演奏が途中で終了してしまうことがあ
  ったのを修正（再生速度を変更したときに発生しやすい）

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

Version 1.11(2001/10/09)

・KBWMA.DLL に関する以下のような修正
  ・WMA のオープンに失敗したときにメモリリークするのを修正
  ・音とびと CPU 負荷が少し軽減（気休め程度）
  ・演奏終了の約 5 秒前に CPU 使用率が 100% になるのを修正

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

Version 1.10(2001/10/03)

・KBWMA.DLL を使用して WMA を再生しているときの音とびが軽減

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

Version 1.09(2001/09/27)

・KBWMA.DLL に関する以下のような修正
  ・ファイルオープン時にメモリリークしていたのを修正
  ・演奏終了後に CPU 使用率が 100% になるのを修正
  ・細かい修正

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

Version 1.08(2001/09/26)

・WMA の再生に DirectShow ではなく、KBWMA.DLL（Windows Media SDK 7.1 ベースの
  WMA デコーダ）を使用するかどうか設定できるようにした。KBWMA.DLL を使用する
  と、
  ・再生速度を速くしても音とびしない
  ・通常再生時に CPU に負荷がかかった場合の音とびはむしろ発生しやすくなる
  ・シークが高速になる
  ・シークが不安定になる（シークすると固まる）かもしれない

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

Version 1.07(2001/09/04)

・最後まで演奏した後に演奏を再開しても再開できないことがあったのを修正（根本的
  な解決は出来ていない）
・WMA でシークすると演奏が終わってしまう確率が下がった（根本的な解決は出来てい
  ない）
/*---------------------------------------------------------------------------*/

Version 1.06(2001/08/15)

・INI ファイルで再生したい拡張子を設定できるようにした
・（デフォルトでは）拡張子 AC3 を認識させないようにした（再生したい場合は INI
  を書き換えて下さい）

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

Version 1.05(2001/08/02)

・AC3 に対応

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

Version 1.04以前

・不明

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