一括表示Re^2: kbGuru2SMF.kpi v0.02
記事No 258
投稿日 2024/03/02(Sat) 11:45:17
投稿者 Kobarin
参照先 https://kobarin.sakura.ne.jp/
> ただ、64bit版本体で起動直後の kbGuru2SMF.kpi の再生や、kbdmusic.kpi → kbGuru2SMF.kpi の切り替え後の再生が出来ないことが有りました。

検証ありがとうございます。
私も確認していて、手元の最新版では解決済みでした。原因となる箇所はご指摘の通りです。

後で気づきましたが FreeLibrary 時のフリーズは、スリープ時にデバイスを閉じるスレッドだけ
でなくて Port.cpp 内で作成したスレッドも関係してますね。

> 解放処理用の関数をexportし、FreeLibrary() の前に呼ぶのは解決法として間違っていないと思います。

何度考えても他に良いやり方が思いつきませんでした。
あえてやるなら、GGS4CloseDevice を呼ぶ度に内部で作成したインスタンスを破棄すること
でしょうか。そうすると GGS4CloseDevice を呼び出した後は GGS4GetSmfInformation 等の
結果も破棄されてしまうので、そうならないようにきちんと対応しようとすると結構大変
そうです。

VS2022 でビルドしたものだとフリーズは確認出来ないのですが、多分偶然だと思うのですよね。
API の新設以外に解決手段がないなら、公式版 GuruGuruSMF4.dll のパスを設定して使用出来る
ようにする現在の仕様は危険なのかもしれません。


手元の最新版では複数のインスタンスを同時に作成可能な作りにしてみました。
それ用の API を DLL に新設しなければなりませんが。

公式版があえてインスタンスを1つしか作らずに使い回すようにしてるのは、
デバイスを開く処理が何度も行われなくする為なのだろうとは思いますが、
ちょっと使い辛いんですよね。

インスタンスの使い回しは DLL を使う側で工夫してやれば良いかと思って。

でも苦労した割にほとんどメリットがないことが分かってしまいました。(笑)
64bit 版の本体から使う分には意味ないですし、32bit 版でも今の本体の仕様だと
やっぱりほとんど意味がないです。

演奏プラグイン仕様にフェードアウト用の API を追加するか本体が SetVolume を
駆使してフェードアウトを行ってクロスフェードに対応すれば 32bit 版でだけ意味
が出てくるかもしれないです。
記事編集 記事編集
関連一覧ツリー 一括表示 をクリックするとツリーを一括表示します)
一括表示 KbMedia Player Version 3.12beta2.2024.0301 - Kobarin 2024/03/01(Fri) 02:05 No.255
  kbGuru2SMF.kpi v0.02 - Kobarin 2024/03/01(Fri) 10:47 No.256
  Re: kbGuru2SMF.kpi v0.02 - You 2024/03/02(Sat) 10:41 No.257
    Re^2: kbGuru2SMF.kpi v0.02 - Kobarin 2024/03/02(Sat) 11:45 No.258
      Re^3: kbGuru2SMF.kpi v0.02 - You 2024/03/03(Sun) 11:43 No.259
        Re^4: kbGuru2SMF.kpi v0.02 - Kobarin 2024/03/03(Sun) 14:26 No.260
  ASIO が使えない - Kobarin 2024/03/03(Sun) 14:29 No.261
返信フォーム ( 記事に返信する場合はこのフォームから投稿して下さい )
おなまえ
Eメール
タイトル
メッセージ
参照先
添付
暗証キー (英数字で8文字以内)
投稿キー (下画像の数字を入力)

投稿キー

  


- Web Forum v8.0 -
++ Edited by Hamel ++