-------------------------------------------------------------------------------
【  名  称  】 GuruGuruSMF Player
【ファイル名】 kbGuru2SMF.kpi
【対応拡張子】 mid
【 Platform 】 x86(32bit) のみ / x64(64bit) なし
【 公 開 日 】 2024/03/??
-------------------------------------------------------------------------------

【概要】

  GuruGuruSMF4.dll を使用して、DirectMusic で MIDI を再生するプラグインです。
  kbdmusic.kpi よりはるかに高品質な MIDI 再生が出来ます。

  「デバイス設定」で kbGuru2SMF.kpi を選択することで、GuruGuruSMF4.dll で MIDI
  を再生することが出来ます。

  You 様が KbMedia Player のサポート掲示板にて公開された kbGuru2SMF.kpi v0.01
  の開発を Kobarin が引き継ぐ形を取ることにしました。

  GuruGuruSMF については

  http://gurugurusmf.migmig.net/

  を参照して下さい。

【GuruGuruSMF4.dll】

  本プラグインの動作に必要になります。本プラグインに同梱しています。
  (Kobarin による改造版)
  ベースにした DLL のバージョンは v4.0.7 です。

  プラグイン設定で DLL の場所を設定することで、公式版の DLL を使うことも出来ま
  すが、公式版の v4.0.7 では一度でも再生すると DLL をアンロードするタイミングで
  フリーズします。v4.0.6 ならフリーズしないようです。

  同梱の DLL は私の環境ではフリーズしません。原因となりそうな箇所を修正済ですが
  根本的には DLL に API を追加し、その DLL を使用する側が適切なタイミングでその
  API を呼ぶようにしないと解決出来そうにありません。公式版の DLL を使用するアプ
  リケーションに不具合があったとして、同梱の DLL に置き換えてもフリーズは改善し
  ないかもしれません。

【既知の不具合】

  ・公式版の GuruGuruSMF4.dll v4.0.7 だと DLL のアンロード時にフリーズする。
  ・公式版を使いたい場合は v4.0.6 をお使い下さい。ただし、公式版 v4.0.6 は COM
    の初期化の関係上、本体や他のプラグインの動作に支障が出る可能性があります。

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

【更新履歴】

Version 0.03(2024/03/??)

・タイミングによってデバイスを開けずに再生開始出来ないことがあるのを修正
・複数のインスタンスを同時に作成出来るようになった
　（プラグイン情報の Reentrant が Yes(MultipleInstance=∞) になった)
　・GuruGuruSMF4.dll の API を新設
　・公式版 GuruGuruSMF4.dll も使用可能(Reentrant が No になる)
　・大変だった割にはメリットがほとんどない
　・互換性は残してあるので、公式版の GuruGuruSMF4.dll を使用する他のアプリケー
　　ションからも使用可能(公式版同様アンロード時にフリーズする可能性はある)
・CC111 を使用したループ曲を開いたときは KPI_MEDIAINFO::qwLoop に -1 を設定する
　ようにした
　・v3.12beta3 の仕様変更によるもの
　・qwLoop を設定しないと本体はループ非対応のプラグインと見なして単曲リピート時
　　でも本体の設定に応じた回数とフェード時間の SMF を生成して渡す
　・その場合、プラグインがループ再生しようとしてもフェードアウトが終わってから
　　ループポイントに戻ることになって無音になってしまう

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

Version 0.02(2024/03/01)

・You さん製作の kbGuru2SMF.kpi v0.01 の開発を Kobarin が引き継ぐ
・GuruGuruSMF4.dll を v4.0.6 から v4.0.7(を VS2022 でビルドしたもの)に変更
・GuruGuruSMF4.dll を LoadLibrary して使うようにした
・GuruGuruSMF4.dll に対する以下の修正
　・VS2022 でビルド
　・メモリリーク修正
　・スリープ時にデバイスを閉じる処理が原因と思われる不具合(FreeLibrary 時にフ
　　リーズ)の修正
　・↑の為、GuruGuruSMF4.dll に後始末用API(GGS4Uninialize_k) を追加(他に方法が
　　思いつかなかった)
・GuruGuruSMF4.dll のパスを設定出来るようにした
　・オリジナルの v4.0.7 は正常動作しない(v4.0.6 なら動作する)

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

Version 0.01(2024/01/31)

・初版

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