新着表示
タイトル
記事No
投稿日
投稿者
参照先
kbfmp7.kpi v0.02
314
2024/04/30(Tue) 00:35:06
Kobarin

https://kobarin.sakura.ne.jp/kpi/kbfmp7_002.7z

FMP7 SDK をそのまま使うと64bit版が動作しなかったので v0.01 は32bit版のみの配布
でしたが、64bit版のプラグインも動作するようになりました。

FMP7 を再生中に他の曲データの情報を取得すると演奏が止まるのは仕様です。
FMP7 の API 呼び出しをフックすることで対処出来そうですが v0.02 ではやめておきました。

FMP7 の起動時に一瞬だけ音が鳴る場合は FMP7 の設定画面を開いて「ドライバ」タブを
選択、「起動ジングル演奏」のチェックを外して下さい。

v0.02 での変更点

・64bit版のプラグインが動作するようになった
 ・FMP7API::Send が動作しなかったのが解決
・FMP7 の終了に関する設定を追加
 ・プラグインアンロード時に終了、曲を閉じる都度終了、終了しない


kbfmp7.txt より

-------------------------------------------------------------------------------
【 名 称 】 FMP7 Player
【ファイル名】 kbfmp7.kpi
【バージョン】 0.02
【対応拡張子】 owi
【 Platform 】 x86(32bit)/x64(64bit)
【 公 開 日 】 2024/04/30
-------------------------------------------------------------------------------

【概要】

Guu さん制作の FM/SSG/PCM音源 音楽ドライバ FMP7 を用いて FMP7 形式の曲データを
再生するための演奏プラグインです。対応拡張子は owi です。

FMP7 の曲データは

http://archive.fmp.jp/

にあります。

【FMP7.exe】

本プラグインを使用するためには FMP7.exe が必要です。
動作確認したバージョンは v7.10g です。

http://archive.fmp.jp/archives/category/program

で FMP ver7.10g をダウンロードし、kbfmp7.kpi のプラグイン設定で FMP7.exe のパス
を設定して下さい。

【既知の不具合】

・再生中に他の FMP7 データの情報を取得すると再生が停止する

再生中に Media エクスプローラで FMP7 データのタイトルを表示したり演奏リスト上で
曲長計算したときなどに停止します。

FMP7.exe の仕様上、再生中とは異なる曲データの情報を取得しようとすると曲データの
再生が停止します。停止させない為には、再生中は他の曲データの情報を取得しないよ
うにするしかありませんが、検討の結果、再生を停止させることにしました。
曲データの取得が終わったら再開するようになっています。

・曲の長さとシーク後の再生位置が不正確

FMP32_GLOBALWORK::Count の値とミリ秒単位の位置の関係性が不明です。この値を 10倍
した値をミリ秒単位の曲長としていますが、実際は違うようです。
同じ理由でシーク後の再生位置も不正確です。

シークについては FMP7.exe の振る舞いも少し変です。(シークバーの位置より手前に
シークされることがある)

【アーカイブ内の曲データの制限】

曲データによっては pwi ファイルが必要になる場合があります。必要な pwi ファイル
名の取得方法が不明な為、再生する owi ファイルと同じフォルダの pwi ファイルを検
索し、最初に見つかった 10 個まで実ファイルを作成します。

アーカイブ内の同一フォルダに多数の曲データと pwi ファイルが置いてあると、必要な
pwi ファイルを認識出来なくなり、ファイルオープンに失敗して再生することが出来な
くなります。不要な pwi ファイルを何個も展開して実ファイルを作成することにもなる
為、ファイルを開くのにも余分な時間がかかります。

同一アーカイブ内に複数の owi/pwi が含まれていても、フォルダが異なっていれば問題
ありません。

foo.zip>bar/aaa.owi
foo.zip>bar/bbb.pwi
foo.zip>baz/ccc.owi
foo.zip>baz/ddd.pwi

この場合、bar/aaa.owi と baz/ccc.owi は異なるフォルダとなりますので、
bar/aaa.owi を再生時に baz/ddd.pwi が実ファイルに展開されることはありません。

【更新履歴】

Version 0.02(2024/04/30)

・64bit版のプラグインが動作するようになった
 ・FMP7API::Send が動作しなかったのが解決
・FMP7 の終了に関する設定を追加
 ・プラグインアンロード時に終了、曲を閉じる都度終了、終了しない

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

Version 0.01(2024/04/27)

・初版
pagetop
タイトル
記事No
投稿日
投稿者
参照先
KbMedia Player Version 3.13.2024.0430(正式版)
313
2024/04/29(Mon) 23:34:25
Kobarin

https://kobarin.sakura.ne.jp/kbmedia/kbmed313.exe (Vista 以降版)
https://kobarin.sakura.ne.jp/kbmedia/kbmed313.7z (Vista 以降版)
https://kobarin.sakura.ne.jp/kbmedia/kbmed313_xp_x86.exe (XP 対応版)(32bit 版のみ)
https://kobarin.sakura.ne.jp/kbmedia/kbmed313_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.13beta3 からの変更点

・本体の開発環境を更新(RAD Studio 12.1 Patch 1 を適用)
・kbpsf2.kpi に関する以下の修正
 ・boost ライブラリを 1.85.0.0 に更新


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

・本体と各種プラグイン/DLL の開発環境を最新に更新
・各種プラグイン/DLL のライブラリを最新に更新
・kbGuru2SMF.kpi で複数ポート使う MIDI データに対応
・kbwsr.kpi でエミュレーションコアを選択出来るようになった
・その他不具合修正・改善


そろそろやることがなくなって来ました。
次はプラグイン置き場のプラグインの更新ですかね。
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re: kbfmp7.kpi v0.01
311
2024/04/28(Sun) 02:00:54
Kobarin

kbfmp7.kpi の 64bit 版は KbMedia Player 本体のリンカオプションで
「高エントロピー64ビットアドレス空間のランダム化(ASLR)のサポート」
を false にすると動作しますが true だと動作しませんでした。

なので kbfmp7.kpi は 32bit 版のみの配布としていましたが、本体のリンカオプション
を変えずに解決することが出来ました。

回りくどい処理が必要で、効率面で少し心配ですがうまく行ったので良しとしますか。

あとは複数の曲データを同時に扱えない件をどうするか。

kbfpd.kpi とか kbgxscc.kpi とかでやっている API 乗っ取り方式でも試してみるかな。
CreateMutexW, CreateFileMappingW, RegisterClassW あたりを乗っ取れば FMP7.exe を
多重起動出来たり、グローバルワーク(共有メモリ)を曲データごとに区別出来そうな気が
します。

ウイルス対策ソフトに怒られる確率が高くなりますけど。
pagetop
タイトル
記事No
投稿日
投稿者
参照先
kbfmp7.kpi v0.01
310
2024/04/27(Sat) 17:01:49
Kobarin

https://kobarin.sakura.ne.jp/kpi/kbfmp7_001.7z

32bit版のみです。演奏プラグインなので Plugins ではなく Player フォルダに
置いて下さい。

kbfmp7.txt より

-------------------------------------------------------------------------------
【 名 称 】 FMP7 Player
【ファイル名】 kbfmp7.kpi
【バージョン】 0.01
【対応拡張子】 owi
【 Platform 】 x86(32bit) のみ / x64(64bit) なし
【 公 開 日 】 2024/04/27
-------------------------------------------------------------------------------

【概要】

Guu さん制作の FM/SSG/PCM音源 音楽ドライバ FMP7 を用いて FMP7 形式の曲データを
再生するための演奏プラグインです。対応拡張子は owi です。

FMP7 の曲データは

http://archive.fmp.jp/

にあります。

【FMP7.exe】

本プラグインを使用するためには FMP7.exe が必要です。
動作確認したバージョンは v7.10g です。

http://archive.fmp.jp/archives/category/program

で FMP ver7.10g をダウンロードし、kbfmp7.kpi のプラグイン設定で FMP7.exe のパス
を設定して下さい。

【既知の不具合】

・再生中に他の FMP7 データの情報を取得すると再生が停止する

再生中に Media エクスプローラで FMP7 データのタイトルを表示したり演奏リスト上で
曲長計算したときなどに停止します。

FMP7.exe の仕様上、再生中とは異なる曲データの情報を取得しようとすると曲データの
再生が停止します。停止させない為には、再生中は他の曲データの情報を取得しないよ
うにするしかありませんが、検討の結果、再生を停止させることにしました。
曲データの取得が終わったら再開するようになっています。

・曲の長さと再生が終了する時間が全然違う
・シーク後の再生位置が不正確

FMP32_GLOBALWORK::Count の値とミリ秒単位の位置の関係性が不明です。この値を 10倍
した値をミリ秒単位の曲長としていますが、実際は違うようです。
同じ理由でシーク後の再生位置も不正確です。

シークについては FMP7.exe の振る舞いも少し変です。(シークバーの位置より手前に
シークされることがある)

【アーカイブ内の曲データの制限】

曲データによっては pwi ファイルが必要になる場合があります。必要な pwi ファイル
名の取得方法が不明な為、再生する owi ファイルと同じフォルダの pwi ファイルを検
索し、最初に見つかった 10 個まで実ファイルを作成します。

アーカイブ内の同一フォルダに多数の曲データと pwi ファイルが置いてあると、必要な
pwi ファイルを認識出来なくなり、ファイルオープンに失敗して再生することが出来な
くなります。不要な pwi ファイルを何個も展開して実ファイルを作成することにもなる
為、ファイルを開くのにも余分な時間がかかります。

同一アーカイブ内に複数の owi/pwi が含まれていても、フォルダが異なっていれば問題
ありません。

foo.zip>bar/aaa.owi
foo.zip>bar/bbb.pwi
foo.zip>baz/ccc.owi
foo.zip>baz/ddd.pwi

この場合、bar/aaa.owi と baz/ccc.owi は異なるフォルダとなりますので、
bar/aaa.owi を再生時に baz/ddd.pwi が実ファイルに展開されることはありません。

【更新履歴】

Version 0.01(2024/04/27)

・初版
pagetop
タイトル
記事No
投稿日
投稿者
参照先
WSR データ用ツール
309
2024/04/27(Sat) 16:32:58
Kobarin

create_extm3u

kbwsr.kpi の動作確認用に名前が Z で始まる某サイトの曲データを入手しましたが、
曲番号ごとに個別に m3u が入っていて、このままだと KbMedia Player では開けない
ので1つにまとめるツールを作りました。

https://kobarin.sakura.ne.jp/test/create_extm3u_20240427.7z

某サイトとか、何のことだか分からない人はダウンロードしても無意味です。

コマンドラインで複数の wsr ファイルを渡すことが出来ます。
コマンドプロンプトを起動してエクスプローラからファイル名をドロップする感じで
やれば良いかと思います。

フォルダ名を渡して一括で処理することも考えましたがやめておきました。

スキルのある人なら簡単にバッチファイルを作れてしまうのかもしれません。


以下、readme.txt より抜粋

某サイトにある m3u ファイルには、Shift-JIS では正しく表示されない文字が含まれて
いるもの(Copyright のマーク(0xa9)とか ,(0x2c) に似た記号(0x82)とか)が多いです。
その為、本ツールでは m3u ファイルをコードページ1252として読み込み、aaa.m3u は
BOM 付 UTF-8 で保存します。

バッチファイルだとこれは難しいのでは、と思いますが出来る人は出来ちゃうの
でしょうかね。
pagetop
タイトル
記事No
投稿日
投稿者
参照先
KbMedia Player Version 3.13beta3.2024.0427
308
2024/04/27(Sat) 16:01:24
Kobarin

https://kobarin.sakura.ne.jp/test/kbmed313_beta3.exe
https://kobarin.sakura.ne.jp/test/kbmed313_beta3.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.13beta3 での変更点

・kbwsr.kpi に関する以下の修正
 ・ベースを foo_input_wsr v0.30 に変更
 ・foo_input_wsr に準じた設定に対応
  ・エミュレーションコアを選択出来るようになった
   (mednafen/oswan/in_wsr)
  ・エミュレーションコアごとに再生周波数と音量を設定出来るようにした
  ・ChannelMuting に対応(各コア共通)
 ・wsr_player_mednafen.dll と wsr_player_oswan.dll に対する以下の修正
  ・再生時に落ちるデータがあったのを修正
  ・名探偵コナン 西の名探偵最大の危機!(SWJ-BAN027.wsr)
 ・wsr_player_mednafen.dll と wsr_player_oswan.dll で音が鳴らない曲データを確
  認
  ・With you~みつめていたい~(SWJ-SHLC01.wsr)
  ・修正は出来ていない
  ・wsr_player_in_wsr.dll では音が鳴る
・kbvgm.kpi に関する以下の修正
 ・libvgm を 2024/04/24 の版に更新(Resampler.c)
・kbunarc.kpi に関する以下の修正
 ・unrarsrc を 7.0.8(2024/04/25) に更新
・kbungca.kpi に関する以下の修正
 ・kbungca.dll の IGca の呼び出し規約を __cdecl から __stdcall に変更
・「ツール」=>「PLS/TAGファイル作成」の「NEZplug 拡張 M3U/PLS を TAG に変換」を
 実行すると落ちるのを修正(M3U を開いたとき)
 ・レジストリを書き換えないと機能が使えないので誰も気づいてないだろうけど

特に問題なければ次を正式版にしようと思います。
ゴールデンウイークが終わる前にそうしてしまうかもしれません。

本当はこの版を正式版にしてしまおうかとも思いましたが kbwsr.kpi がとても大きな
修正だったので一応β版にしておきました。
pagetop
タイトル
記事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

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