新着表示
タイトル
記事No
投稿日
投稿者
参照先
KbMedia Player Version 3.13beta2.2024.0421
307
2024/04/20(Sat) 23:59:58
Kobarin

https://kobarin.sakura.ne.jp/test/kbmed313_beta2.exe
https://kobarin.sakura.ne.jp/test/kbmed313_beta2.7z

.exe と .7z はどちらも中身は同じです。
.7z の展開の仕方が分からない方は .exe をダウンロードして下さい。

.exe だと Microsoft Edge でブロックされる方は .7z をダウンロードして下さい。
Microsoft Edge にブロックされる方は安全だと報告してくれると助かります。

起動時にエラーメッセージが表示されてプラグインが認識されない場合は
Microsoft Visual C++ 2022 再頒布可能パッケージが必要です。
https://visualstudio.microsoft.com/ja/downloads/#other-ja-family
x64 版ランタイムファイル直リンク
https://aka.ms/vs/17/release/VC_redist.x64.exe
x86 版ランタイムファイル直リンク
https://aka.ms/vs/17/release/VC_redist.x86.exe
(x64 版の動作には vc_redist.x64.exe と vc_redist.x86.exe の両方が必要です)

VS2019 のランタイムでも動作はするようですが、念のため VS2022 の
ランタイムを入れて下さい。

β版は Windows XP のサポートを打ち切りました。XP 環境だと一部のプラグインが
動作しません。Windows XP で使いたい方は正式版をお使い下さい。


v3.13beta2 での変更点

・各種プラグイン/DLL の開発環境を VS2022 17.9.6 に更新
・kbGuru2SMF.kpi に関する以下の修正
 ・以下、GuruGuruSMF4.dll に関する修正
 ・リズムパートの SysEx を使用する曲データが正常に再生されないのを改善
  ・ピアノになってしまうことがある曲データ
  ・チャンネルボリュームが利かないことがある曲データ
  ・最初の発音までの時間の進み方が遅くなった(MIDI イベントによっては送信前後
   にウェイトを置く為)
  ・根本的な原因(ピアノになるデータとならないデータの違い、チャンネルボリュー
   ムが利くデータと利かないデータの違い)が分からず、対症療法的な措置
 ・冒頭の空白をスキップ、シークに関する以下の修正
  ・リズムパートの SysEx を使う曲データで正常に再生されなくなることがあるのを
   改善(冒頭の空白をスキップ、シークをしなければ正常に再生出来るデータ)
 ・たまに再生がおかしくなるデータはまだ存在するがその確率は低くなった
 ・演奏スレッドと同じスレッド内で処理するようにした
 ・処理に時間がかかるようになった
  ・MIDI イベントによっては送信前後にウェイトを置く為
  ・特に冒頭付近が時間かかるので曲データによっては冒頭の空白スキップがあまり
   機能しなくなった
  ・処理中は進捗状況に応じた位置を返すようにした
 ・以下の SysEx を無視するようにした
  ・テキスト表示、ドット絵、PatchName、XG のSysEx(マスターボリュームはチャン
   ネルボリュームに置換)
 ・非ループ曲(CC111 を含まない曲)でリセットを含む曲データのループ時は先頭に戻
  ったときにリセットを送信するようにした
  ・非ループ曲の2周目以降が不自然になる曲データの改善
  ・「非ループ曲のループ再生」を true にするデメリットが少なくなった
  ・リセットを含まない曲データでは2週目以降が不自然になる可能性があるが、
   GuruGuruSMF の仕様に合わせて敢えてリセットは送信しない
・kbmac.kpi に関する以下の修正
 ・Monkey's Audio SDK 10.71(2024/04/19) に更新
・kbmpg123.kpi に関する以下の修正
 ・libmpg123 を 1.32.6(2024/04/04) に更新
・kbopus.kpi に関する以下の修正
 ・libopus を 1.5.2(2024/04/12) に更新


GuruGuruSMF でリズムパートの SysEx を使うデータを正常に再生出来ないことがある不具合が
改善しましたがまだ完全ではありません。

根本的にはどう対処したら良いか分かりません。SysEx の送信前に(送信後ではない)少し待てば
改善するデータがありますが、いくら待っても全く改善されないデータもあります。

確認出来たデータでは大分改善されましたが、まだ10回に1回程度の割合で演奏がおかしくなる
ものがあります。
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^5: KbMedia Player Version 3.13beta.2024.0408
306
2024/04/20(Sat) 21:55:29
Kobarin

You さんのテストプログラム相当の処理を KbMedia Player 本体に組み込んで実験してみました。

SetProcessInformation を使わない場合、最小化時にタイマーの精度が悪くなっていることは
確認出来ましたが、デバイスを開いている間は問題ないようです。

> Windows 11以降、ウィンドウ所有プロセスがエンド ユーザーに完全に隠された、最小化された、またはその他の方法で目に見えない、
> または聞き取れなくなる場合、Windows は既定のシステム解像度よりも高い解像度を保証しません。

デバイスを開いていると「聞き取れなくなる場合」に該当しなくなるのでしょう。
うまく出来ていますね。

ただし、例えば 64bit 版で 32bit 版のデバイスプラグインや演奏プラグインを使う場合、本体とは
別プロセスでデバイスを開くことになる為、最小化時にタイマーの精度が低くなることが確認出来ます。

ですが、最小化時においてもタイマーの精度が高くないと困るのはデバイスプラグイン/演奏プラグイン
が実際に動作しているプロセス内においてであって、本体は困りません。

したがって本体が常時タイマーの精度を高くしておく必要はなさそうです。
kbrunkpi.exe の方も、デバイスを開いている間は精度が保証されるのであればやはり
SetProcessInformation を呼び出す必要はなさそうです。

> 本体でも同じことをしておけば kbrunkpi.exe の方では何もしなくても良さそうです。

これは勘違いですね。
Win10 2004 以降では kbrunkpi.exe の方でも timeBeginPeriod は必要ですね。

You さんのテストプログラムのおかげで SetProcessInformation の使い方が簡単に理解出来た
のでとても助かりました。結果的に必要がないことが分かりましたが。
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^4: KbMedia Player Version 3.13beta.2024.0408
305
2024/04/16(Tue) 20:43:46
Kobarin

すみません。実行後に表示されるダイアログの意味を勘違いしていました。

私の環境でも同じような感じになりました。

最小化するとタイマーの精度が保証されなくなるが SetProcessInformation で
それを回避することも出来るということですね。

本体でも同じことをしておけば kbrunkpi.exe の方では何もしなくても良さそうです。
本体が動作中、タイマーの精度を常時高くするのは行儀が悪いのかもしれませんが
音楽の再生を目的とするソフトなのですからやむを得ないですよね。
pagetop
タイトル
記事No
投稿日
投稿者

Re^3: KbMedia Player Version 3.13beta.2024.0408
304
2024/04/14(Sun) 14:08:27
You
対処無しでもタイマー精度が落ちない、と言うのは謎ですね。

こちらの環境では、テストAPPを再起動せずにオプションを色々変更して実行していると、
SetProcessInformation をコールしなくてもタイマー精度が落ちなくなることが有りました。
その場合でもテストAPP再起動のみでまた再現するようになります。


テスト環境での動作結果を貼っておきます。
全て、1回実行するごとにテストAPPを再起動しています。

・①②③ ウィンドウを最小化した時のみタイマー精度が落ちる
・④⑤ timeBeginPeriod(1) のコールは必須
・⑥ SetProcessInformation と timeBeginPeriod(1) をコールすると最小化してもタイマー精度が落ちない

pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^2: KbMedia Player Version 3.13beta.2024.0408
303
2024/04/14(Sun) 00:16:41
Kobarin

> GuruGuruSMF は何だか良いオモチャになっているようですね。

DirectMusic でここまで MIDI をきちんと再生出来ると思ってなかったので
とても面白かったです。

そろそろやることがなくなって来ていますがここへ来て行き詰っています。

> Win10 2004 以降では timeBeginPeriod がプロセス内に限定されるのは知りませんでした。

フェードアウト時間を長めにしたとき、64bit版の本体で実行するとフェードアウトが
終わるまで設定時間より長くかかることに気づいて調べてたら timeBeginPeriod が
関係してることが分かりました。

フェードにかかる時間はタイマーの精度が低くても問題なく動作するように出来ました
がフェード中のモタりは精度が低いと発生する可能性があります。

> ウィンドウ最小化時にタイマー精度が15ms程度に戻るようです。
> ウィンドウを持たないプロセスだと設定した精度が維持されていたので、
> kbrunkpi.exe 経由で実行されるプラグインは問題が起きないと思いますが、

kbrunkpi.exe 自体はウィンドウを作成しませんが、GuruGuruSMF4.dll は内部で
隠しウィンドウを作成します。

改造版 GuruGuruSMF はフェードアウト時のモタリ以外はタイマーの精度の影響は
少ないです。公式版だとモタり以外にフェードにかかる時間にも影響します。

本体の midiOut での MIDI 再生時は Sleep(1) を多用しているので、
最小化時にタイマーの精度が下がったら影響が大きいです。

> 一応この現象のテストAPPのソースを添付しておきます。

わざわざありがとうございます。

私の環境だと最小化しても 1ms の精度で動作しているみたいです。v3.13beta を
公開前、timeBeginPeriod の実験の為に色々試していたら、何かの拍子に OS を
再起動するまで 1ms の精度のままになってしまうことがあるようでした。

なので一度再起動してみましたが結果は変わりませんでした。
pagetop
タイトル
記事No
投稿日
投稿者

Re: KbMedia Player Version 3.13beta.2024.0408
302
2024/04/13(Sat) 19:07:13
You
GuruGuruSMF は何だか良いオモチャになっているようですね。

Win10 2004 以降では timeBeginPeriod がプロセス内に限定されるのは知りませんでした。
確かにドキュメントに明記されてましたが、こんな簡単なAPIのドキュメントは今更見ないし…

timeBeginPeriod のドキュメントにはこんな記述も有りますね。
> Windows 11以降、ウィンドウ所有プロセスがエンド ユーザーに完全に隠された、最小化された、またはその他の方法で目に見えない、
> または聞き取れなくなる場合、Windows は既定のシステム解像度よりも高い解像度を保証しません。
> この動作の詳細については、「 SetProcessInformation 」を参照してください。

実際に試してみましたが、確かにWin11だと timeBeginPeriod(1) をコールしても
ウィンドウ最小化時にタイマー精度が15ms程度に戻るようです。
ウィンドウを持たないプロセスだと設定した精度が維持されていたので、
kbrunkpi.exe 経由で実行されるプラグインは問題が起きないと思いますが、
32bit版の本体から直接実行される kbGuru2SMF.kpi は、本体を最小化した時に影響が出るかもしれません。

一応この現象のテストAPPのソースを添付しておきます。
※2024/04/13 22:26 : 添付ファイル内の誤記を修正

(70KB)

pagetop
タイトル
記事No
投稿日
投稿者
参照先
KbMedia Player Version 3.13beta.2024.0408
301
2024/04/08(Mon) 00:38:56
Kobarin

https://kobarin.sakura.ne.jp/test/kbmed313_beta.exe
https://kobarin.sakura.ne.jp/test/kbmed313_beta.7z

.exe と .7z はどちらも中身は同じです。
.7z の展開の仕方が分からない方は .exe をダウンロードして下さい。

.exe だと Microsoft Edge でブロックされる方は .7z をダウンロードして下さい。
Microsoft Edge にブロックされる方は安全だと報告してくれると助かります。

起動時にエラーメッセージが表示されてプラグインが認識されない場合は
Microsoft Visual C++ 2022 再頒布可能パッケージが必要です。
https://visualstudio.microsoft.com/ja/downloads/#other-ja-family
x64 版ランタイムファイル直リンク
https://aka.ms/vs/17/release/VC_redist.x64.exe
x86 版ランタイムファイル直リンク
https://aka.ms/vs/17/release/VC_redist.x86.exe
(x64 版の動作には vc_redist.x64.exe と vc_redist.x86.exe の両方が必要です)

VS2019 のランタイムでも動作はするようですが、念のため VS2022 の
ランタイムを入れて下さい。

β版は Windows XP のサポートを打ち切りました。XP 環境だと一部のプラグインが
動作しません。Windows XP で使いたい方は正式版をお使い下さい。


v3.13beta での変更点

・本体の開発環境を C++Builder 12 v29.0.51961.7529 に更新
・kbGuru2SMF.kpi に関する以下の修正
 ・「同梱の GuruGuruSMF4.dll を使う」設定を追加
  ・true のときは「GuruGuruSMF4.dll のパス」を無視
  ・公式版を使いたいときにパスを設定し直すのを省ける
 ・キーシフトの設定に対応
  ・GuruGuruSMF4.dll の機能の動作確認用。通常は 0 にする
 ・マスターピッチの設定に対応(playopt のと名前が被るので表示は「ピッチ」)
  ・GuruGuruSMF4.dll の機能の動作確認用。通常は 0 にする
 ・フェードインの設定に対応
  ・GuruGuruSMF4.dll の機能の動作確認用。通常は 0 にする
 ・フェードアウトの設定に対応
  ・0 以外にすると本体の演奏停止ボタン押下時及び「演奏」メニューの「フェード
   アウト」時に指定時間かけてフェードアウトさせる
  ・現在の演奏プラグインの仕様では「演奏メニュー」の「フェードアウト」時だけ
   フェードアウトさせることが出来ない(その為の API が存在しない)
 ・GuruGuruSMF4.dll に関する以下の修正(DirectMusic 使用時)
  ・複数ポート(メタイベント0x21)に対応
   ・最大4ポート
  ・フェードイン/フェードアウト(以下フェード)中にモタるのを修正
   ・フェード中はポーリングの Sleep 時間を短くした(5ms => 1ms)
  ・フェードの終了までかかる時間が不正確なのを修正
   ・Sleep の回数で判定していたのを実際の経過時間で判定
  ・フェードアウト中にフェードアウトが呼ばれても無視するようにした
   (最初のフェードアウトが続行されるのみ)
  ・フェードイン中にフェードアウトが呼ばれた場合は同時に進行するようにした
   (フェードインしてる分だけ直ぐには音量が下がらず、音量が下がり始めるのが
   遅くなるがフェードアウトが終わるのは呼ばれてから指定時間経過後)
・kbrunkpi.exe に関する以下の修正
 ・Windows 10 バージョン 2004 以降の環境でタイマーの精度が低かったのを修正
  (Sleep 等の API を使用するプラグインの動作改善)


本体の開発環境を更新しましたがまだ XP でも動作するようです。
本バージョンからβ版は XP のサポートを打ち切ったので本バージョンでは関係ありませんが。


GuruGuruSMF で複数ポートに対応出来ました。かなり広範囲に渡って修正が必要でした。

複数ポートに対応した関係で今まで未対応だった GuruGuruSMF の機能の動作確認が必要に
なったため設定項目を増やしました。常用するべきものでないものも含みますが、お遊び
程度には面白くて良いのではないかと思います。

フェードイン/フェードアウトのモタりは DLL の呼び出し元アプリが timeBeginPeriod で
それなりの精度(出来れば1ms)に設定しておかないと解決出来ない可能性があります。

なので kbGuru2SMF.kpi に同梱の GuruGuruSMF4.dll を他のアプリで使っても、モタり
は改善してないかもしれません。公式サイトのテストプレイヤーしか対応アプリを知り
ませんが、それも含めて動作確認はしていません。
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^2: KbMedia Player Version 3.12.2024.0404(正式版)
300
2024/04/07(Sun) 09:34:17
Kobarin

> XPでの動作確認の結果を。

ありがとうございます。想定通りの動作で安心しました。

プラットフォームツールセットが最新だと 64bit 版は XP 64bit版では
全てのプラグインが動作しないのですね。

あとはプラグイン置き場のプラグインを今後どうやって配布するかですね…。

GuruGuruSMF は複数ポートの MIDI (メタイベント0x21) にも対応出来そうです。
pagetop
タイトル
記事No
投稿日
投稿者

Re: KbMedia Player Version 3.12.2024.0404(正式版)
299
2024/04/06(Sat) 16:14:12
You
XPでの動作確認の結果を。
起動してプラグイン設定を確認し、数曲再生しただけですが。
使用したランタイムは VS2019 16.7 です。

・WinXP(32bit) + kbmed312(x86)
 [kbvsti_x86.kpi, kbviv.kpi, kbunarc.kpi]がロードNG

・WinXP(32bit) + kbmed312_xp_x86
 全プラグインロードOK

・WinXP(64bit) + kbmed312(x86)
 [kbvsti_x86.kpi, kbviv.kpi, kbunarc.kpi, x64の全プラグイン]がロードNG

・WinXP(64bit) + kbmed312(x64)
 本体起動不可

・WinXP(64bit) + kbmed312_xp_x86
 全プラグインロードOK

想定通りの結果になっているのでは、と思います。
pagetop
タイトル
記事No
投稿日
投稿者
参照先
KbMedia Player Version 3.12.2024.0404(正式版)
298
2024/04/03(Wed) 23:12:01
Kobarin

https://kobarin.sakura.ne.jp/kbmedia/kbmed312.exe (Vista 以降版)
https://kobarin.sakura.ne.jp/kbmedia/kbmed312.7z (Vista 以降版)
https://kobarin.sakura.ne.jp/kbmedia/kbmed312_xp_x86.exe (XP 対応版)(32bit 版のみ)
https://kobarin.sakura.ne.jp/kbmedia/kbmed312_xp_x86.7z (XP 対応版)(32bit 版のみ)

exe と 7z はどちらも中身は同じです。
7z の展開の仕方が分からない方は exe をダウンロードして下さい。

exe だと Microsoft Edge でブロックされる方は 7z をダウンロードして下さい。
Microsoft Edge にブロックされる方は安全だと報告してくれると助かります。

起動時にエラーメッセージが表示されてプラグインが認識されない場合は
Microsoft Visual C++ 2022 再頒布可能パッケージが必要です。
https://visualstudio.microsoft.com/ja/downloads/#other-ja-family
x64 版ランタイムファイル直リンク
https://aka.ms/vs/17/release/VC_redist.x64.exe
x86 版ランタイムファイル直リンク
https://aka.ms/vs/17/release/VC_redist.x86.exe
(x64 版の動作には vc_redist.x64.exe と vc_redist.x86.exe の両方が必要です)

Windows XP で使用したい場合は XP 対応版をダウンロードして下さい。
XP 対応版は 32bit版のみです。64bit版の本体が XP で動作しない為です。
XP で使用する場合、ランタイムは

VS2017 のランタイム
https://aka.ms/vs/15/release/VC_redist.x64.exe (x64)(XP対応版は 64bit 版を含まないので実際は不要)
https://aka.ms/vs/15/release/VC_redist.x86.exe (x86)

または

https://visualstudio.microsoft.com/ja/vs/older-downloads/

で VS2019 16.7 のランタイムを入れて下さい。16.7 より新しいものだと動作しません。


v3.12beta8 からの変更点

・Vista 以降版と XP 対応版(32bit版のみ)を分けて配布するようにした
 ・本体(Kbmplay.exe) は Vista 以降版も XP 対応版も同じ
 ・本体の 64bit版が XP 64bit版で動作しない為、XP 対応版は 32bit版のみ配布
 ・今後、XP 対応版は正式版でのみ配布
 ・開発環境の更新により XP 対応が困難になった時点で XP 対応を打ち切る
 ・Vista 以降版は XP では一部のプラグインが動作しない
 ・XP 対応版より Vista 以降版の方が高速に動作
・kbasio.kpi に関する以下の修正
 ・IASIO::init に渡すウィンドウを作成する為の専用のスレッドを廃止
  ・IASIO のインスタンスを作成/破棄するのと同じスレッドで作成
 ・再生位置の取得方法を修正
・x64フォルダに plugin.txt 等がなかったのを修正
・M3U を開いたとき必要以上にプレイリストが「updated」になるのを修正
 ・「updated」になる条件は「ツール」->「その他の設定」->「M3U の保存形式」の
  「拡張M3U」の設定に従う
  ・拡張M3U が無効の場合
   ・タイトル/アーティスト/曲長のいずれが変わっても「updated」にならない
  ・拡張M3U が有効の場合
   ・タイトル/アーティストが変われば「updated」になる
   ・曲長についてはミリ秒単位で不一致でも秒単位で一致してれば「updated」にな
    らない
  ・曲を追加・削除した場合は拡張M3Uの設定に関わらず「updated」になる
 ・開いた M3U が拡張M3Uなのかではなく、設定で判断
・先頭行が # で始まるが #EXTM3U でない M3U の先頭行をファイル名として扱っていた
 のを修正


v3.11c(1つ前の正式版)からの主な変更点

・本体と各種プラグイン/DLL の開発環境を最新に更新
・各種プラグイン/DLL のライブラリを最新に更新
・Windows Vista 以降版と XP 対応版を別配布(XP 対応版は 32bit 版のみ)
 (64bit 版のプレイヤー本体が XP 64bit 版で動作しない為、XP 対応版は 32bit 版のみ配布)
 (今後、XP 対応版は正式版でのみ配布、開発環境の更新により XP 対応が困難になった時点で XP 対応を打ち切り)
 (Vista 以降版は XP では一部のプラグインが動作しません。XP 対応版より Vista 以降版の方が高速に動作します)
・GuruGuruSMF による MIDI 再生プラグイン追加(kbGuru2SMF.kpi)
・64bit版 WinFMP.dll に対応(kbfmp.kpi)
・その他不具合修正・改善


そろそろキリがないので正式版にしました。
またいつものように公開してすぐに v3.12a とかにならなければ良いのですが…。

迷いましたが Vista 以降版と XP 対応版を分けて配布することにしました。
Vista 以降版が Vista で動くのかは分かりません。
もし動かないプラグインがあるようなら32bit版だけになりますが XP 対応版を使って下さい。

Vista 以降版と XP 対応版の違いは VS2022 で作成したプラグイン/DLL のプラットフォームセットを

Vista 以降版:Visual Studio 2022 (v143)
XP 対応版: Visual Studio 2017 - Windows XP (v141_xp)

としているだけです。Vista 以降版の方が高速に動作するようですが、もしかしたら
ある程度新しい CPU でないと動作しないかもしれません。
pagetop

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