新着表示
タイトル
記事No
投稿日
投稿者

Re^3: KbMedia Player Version 3.15beta2.2024.0627
358
2024/06/29(Sat) 15:49:32
You
> 以前は正常に再生できていた 3.11c 等でも発生したので、WindowsUpdate等が原因かも?
今確認すると 3.11c では発生しなかったので、何か勘違いしていたのでしょう。

更新が無いプログラムをAPIフックで改造するのは常套手段ですが、
グローバルフックで全プロセスにやるのではなく1プロセスだけ、
それも自プロセスに対して行うのは誤検出された経験は有りませんね。

DirectDrawをフックするのはかなりの手間でしょうし、
このオプションも無効化されるのでしょうね。
描画内容はGDIでも大した負荷ではないでしょう。

DPWWRD.DPX のウィンドウをサブクラス化して
コンテキストメニューに手を入れたりもできるかも?
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^2: KbMedia Player Version 3.15beta2.2024.0627
357
2024/06/29(Sat) 14:45:02
Kobarin

> 3.15beta2 で演奏プラグインを使用してMIDIファイルを再生した場合、正しく再生終了しないようです。
> kbGuru2SMF.kpi と kbdmusic.kpi で現象を確認しました。

ありがとうございます。現象確認出来ました。

> 「曲長より WRD の方が長いと~」の対応の影響のような気がしますが、

まさにこれが原因です。

> 以前は正常に再生できていた 3.11c 等でも発生したので、WindowsUpdate等が原因かも?

これは何かの勘違いではないでしょうか。
3.14beta あたりのクロスフェード関係の修正から発生するなら別の要因であるかもしれないです。

3.11c で起こるなら kbdmusic.kpi のバグもあるのかな。
よく考えたら kbdmusic.kpi では連続再生のテストはあまりしてなかったです。


MWRD はウィンドウサイズの変更にも対応出来そうです。
もう DPWWRD.DPX の色んな API をフックしまくりです。(笑)
ウイルス対策ソフトに怒られる確率が上がる?
pagetop
タイトル
記事No
投稿日
投稿者

Re: KbMedia Player Version 3.15beta2.2024.0627
356
2024/06/28(Fri) 22:15:04
You
※2024/06/28 22:27編集
下記内容は取り下げます。
以前は正常に再生できていた 3.11c 等でも発生したので、WindowsUpdate等が原因かも?

--------------------------------------------------------------------------------
3.15beta2 で演奏プラグインを使用してMIDIファイルを再生した場合、正しく再生終了しないようです。
kbGuru2SMF.kpi と kbdmusic.kpi で現象を確認しました。
midiOut やデコーダプラグインでの再生時は発生しません。
3.15beta でも同様のようです?

MIDIファイルを再生して曲の末尾に達すると再生位置が 0:00 に戻りますが、
停止したと判定されていないのか?[一時停止][再開]ボタンが有効のままになっています。
演奏リストから再生している場合は、そのままの状態で止まり次の曲に進みません。

「曲長より WRD の方が長いと~」の対応の影響のような気がしますが、
「表示 → WRD」のチェックを外した状態でも発生します。
再生しているMIDIファイルにはWRDは有りません。
pagetop
タイトル
記事No
投稿日
投稿者
参照先
KbMedia Player Version 3.15beta2.2024.0627
355
2024/06/26(Wed) 21:45:45
Kobarin

https://kobarin.sakura.ne.jp/test/kbmed315_beta2.exe
https://kobarin.sakura.ne.jp/test/kbmed315_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.15beta2 での変更点

・MWRD の再生に関する以下の修正
 ・DPWWRD.DPX のパスが未指定(空白)のときは DECOP のインストールフォルダを検索
  するようにした
  ・v3.15beta の更新履歴にその旨記載していたが実際は検索していなかった
 ・拍子が変化するデータの表示がずれるのを修正
 ・テンポが変化するデータでシークすると表示がずれる(or 止まる)のを修正
  ・シークが高速なプラグインを使用していた場合
 ・再生開始直後にちらつくのを修正(冒頭の1小節分が2回再生されていた)
 ・MWRD を含む曲の切り替え時に DPWWRD.DPX をロードし直さないようにした
  ・切り替えが高速化
 ・MWRD の再生中に本体が異常終了すると kbrunkpi.exe がフリーズするのを修正
 ・MIDI 以外(MP3/WAV 等)でも、同一フォルダ内に同名の .mid/.rcp があれば再生出
  来るようになった
  ・kbwavefile.kpi で .mid/.rcp を .wav に変換した曲データで動作確認
  ・.mid/.rcp はテンポと拍子の情報の為に必要
  ・.mid/.rcp がないと MWRD を再生することは出来ない
  ・両方ある場合は .rcp を優先(rcpcv.dll がない場合は .mid を参照)
  ・MWRD だけでなく、SWRD/NWRD でも対応(以前から)
 ・DPWWRD.DPX の以下の設定を設定画面で行っても反映されないようにした
  ・「640x400画面を使う」「GiveIO を使う」「DPEV_STEP16 を使う」
  ・レジストリを書き換えても無視、設定画面上で変更しても反映されない
 ・バージョン情報ダイアログで DPXWRD.DPX を表示するようにした
・WRD(MWRD/SWRD/NWRD) に関する以下の修正「
 ・曲長より WRD の方が長いと WRD の最後が再生されないのを修正
  ・対象 MIDI データの末尾の無音除去前の曲長(+1000ms)までは再生するようにした
  ・演奏プラグイン(kbGuru2SMF.kpi 等)を使用時は、プラグインが演奏終了を返した
   後の時間の進み方が不自然になる場合がある
  ・MIDI 以外を再生時は同名の *.mid/.rcp の曲長(+1000ms)まで再生
  ・WRD を非表示(「表示」->「WRD」が無効)のときは曲長までしか再生しない
・バージョン情報ダイアログに関する以下の修正
 ・DPWWRD.DPX の情報を追加
 ・インストールされているプログラム(情報取得時に参照する DLL/EXE 等)のパスを表
  示するようにした
 ・動作中の本体と反対のプラットフォームの DLL の情報(タイムスタンプ等)を正しく
  取得出来ていなかったのを修正
  ・VS2022 ランタイム、RCPCV.DLL がシステムフォルダに置いてある場合等


MWRD 対応は冒頭のちらつきが解消されて結構良い感じになって来ました。
あとは DPWWRD.DPX の BitBlt あたりをフックして StretchBlt してウィンドウサイズ
変更に対応、とかやってみたいですが、タイトルバーの部分も自前で描画してるみたい
なのでうまく行くかどうか…。

WRD の方が曲より長い場合に最後まで再生出来ない問題は良い対処法を思いついたので
何とかなりました。演奏プラグイン(kbGuru2SMF.kpi 等) を使用時の対応が難しくて
少し問題はあるのですが、支障はあまりないと思います。

テンポが変化するデータで表示がずれるのはもう大丈夫だと思いますが、拍子の方は
あまり自信がありません。拍子の変化に対応することでタイミングがばっちり合うよ
うなデータが手元にないからです。あくまで DECOP+DPWWRD.DPX で再生した結果と明
らかに違ってたのが同じに見えるようになっただけです。

拍子(メタイベント0x58)を変えながらドレミファソラシドを繰り返す(DECOP+DPWWRD.DPX
でタイミングもバッチリ合ってる) MID/WRD データがあれば確認出来るのですが、私は
そういうのを作る方はサッパリで…。

MIDI 以外の形式(.mp3 等)での .wrd 再生は .mid や .rcp を kbwavefile.kpi で
.wav に変換したもので動作確認しました。
正しく再生するには、元になった .mid や .rcp を残しておく必要があります。ないと
タイミングが取れないので再生出来ません。そこまでやる人は少ないとは思いますけど。
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^10: MWRD 対応協力者(開発者)募集
354
2024/06/21(Fri) 22:39:31
Kobarin

v3.15beta を公開後、DECOP+DPWWRD.DPX や TMIDI、WFP と比べて明らかに表示
がずれるデータがあることに気づきました。

MIDI データを調べると途中で拍子情報が何度か変わるもので、DPWWRD.DPX は
hpDataTop32 の拍子情報も参照してることが分かりました。

このデータは動作確認中何度も再生していたのですが、むしろ hpDataTop32 に拍子情報を
含めない方がタイミングがばっちり合ってしまう(だから気づかなかった)のですよね。
なので修正すると前よりむしろタイミングがずれてしまうのですが、他のソフトと比べて
ずれるのは良くないので。

本家の MIMPI で再生するとどうなるのかは分かりません。

WFP の MIMPI WRD 設定の「拍子変更を無視する」とか「拍子変更時の動作を真似る」を
変えたら v3.15beta と同じタイミングになることを期待しましたが、そうはならない
ようでした。
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re: KbMedia Player Version 3.15beta.2024.0621
353
2024/06/21(Fri) 00:43:54
Kobarin

>   ・既定では DPWWRD.DPX は DECOPLAY のインストールフォルダから検索
>   ・HKEY_LOCAL_MACHINE\SOFTWARE\Deco\Decoplay for Windows\ExeDir
>    から DPW.EXE のパスを取得、同じフォルダ内の DPWWRD.DPX

公開直前にこの仕様はやめましたが更新履歴に反映させるのを忘れていました。
実際は DECOP のインストールフォルダは検索しません。

演出くんメカを使用するデータを再生するにはフォントの設定が必要です。
設定していないと漢字以外の文字が・になります。

「演出くんメカコマンドを有効に」のチェックを外せば漢字以外の文字も
表示されますが、コマンド文字列みたいなのが表示されるようになる
データがあります。

再配布可能な演出くんメカのフォントがあるなら本体に同梱してしまいたい
ところですが…。

私が持っているのは、ある WRD データに含まれていた

BU_MARU1.FON

というファイルのみです。
pagetop
タイトル
記事No
投稿日
投稿者
参照先
KbMedia Player Version 3.15beta.2024.0621
352
2024/06/21(Fri) 00:26:50
Kobarin

https://kobarin.sakura.ne.jp/test/kbmed315_beta.exe
https://kobarin.sakura.ne.jp/test/kbmed315_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.15beta での変更点

・各種プラグイン/DLL の開発環境を VS2022 17.10.3 に更新
・MIMPI WRD(*.wrd) に対応
 ・DECO さん制作「DECOPLAY」の MIMPI WRD 再生プラグイン「DPWWRD.DPX」(戸上山さ
  ん制作)を使用
  ・http://cgi.members.interq.or.jp/ox/izu/
 ・「ツール」->「環境設定」->「MWRD」で DPWWRD.DPX のパスを設定
  ・既定では DPWWRD.DPX は DECOPLAY のインストールフォルダから検索
  ・HKEY_LOCAL_MACHINE\SOFTWARE\Deco\Decoplay for Windows\ExeDir
   から DPW.EXE のパスを取得、同じフォルダ内の DPWWRD.DPX
 ・DPWWRD.DPX のパス以外の設定も本体の環境設定画面で行えるようにする予定だが未
  実装
  ・現状はウィンドウを右クリック->「設定」で表示されるダイアログで設定
 ・DPWWRD.DPX の設定は以下のレジストリに保存(DECOPLAY とは異なる場所)
  ・HKEY_CURRENT_USER\Software\Kobarin's Soft\KbMidi Player\Dpx\DpwWRD\
 ・「最大化」「最小化」「閉じる」ボタンは無視される
  ・「最大化」と「最小化」はレジストリを直接編集しても無視
 ・以下の設定は無視される(常に無効、レジストリを直接編集しても無視)
  ・640x400画面を使う
  ・GiveIO を使う
  ・DPEV_STEP16を使う(時間の進み方がおかしくなる、有効化しても次回再生時に無
   効に戻す)
 ・拡張子.dv/.dvs を MWRD として扱うようにした(DPWWRD.DPX が対応している為)
・WRD(MWRD/SWRD/NWRD) に関する以下の修正
 ・「表示」->「WRD」のチェックが有効時は WRD を再生/無効時は WRD を再生しない
  ように仕様変更
  ・今まではウィンドウが閉じられて非表示になったときに表示させるだけで、内部
   では常に再生していた
 ・本体がフォーカスを持っていなくても WRD を表示&再生するようにした
  ・「表示」->「WRD」が無効時は再生しない
  ・今まではフォーカスがないときは表示しなかった(内部では再生していた)
・kbmod.kpi に関する以下の修正
 ・libopenmpt を 0.7.8(2024/06/09) に更新
・kbGuru2SMF.kpi に関する以下の修正
 ・GuruGuruSMF4.dll に関する以下の修正
  ・64bit 版の本体から使うと再生中 DDE がまともに機能しなくなるのを修正
   ・関連付け起動時にファイルを開くまで異常に時間がかかる等
 ・設定画面のヘルプを修正


You さんの協力のおかげで MIMPI WRD に対応することが出来ました。
まだやるべきことが残っていますが、それなりに完成度が上がって来たので一先ず
公開することにします。

DECOP + DPWWRD.DPX の組み合わせと再生結果が異なるものがあったら教えて下さい。
試した限りでは大丈夫そうです。

DV2WRD32.DLL が必要なデータは手元に1つしかありませんが、再生が出来ることは
確認しました。同一フォルダに .wrd がなくても .dv か .dvs があれば再生出来ます。


「表示」メニューの「WRD」の仕様変更により、「WRD」のチェックが入っていないと
WRD は表示されませんので注意して下さい。

今までは表示/非表示を切り替えるというより、非表示状態だったのを表示させるものでした。

本バージョンからは「WRD」のチェックマークを外すと WRD データを再生しません。
WRD を含む曲データを BGM として連続再生したい場合などはチェックを外して下さい。


あと SWRD/NWRD でもそうでしたが、WRD データの長さが MIDI の曲長より長いと最後が
再生されません。

midiOut で再生したときのみ、MIDI の方の演奏が終わっても 5 秒程度時間が進むように
してありますので MIDI より 5 秒長い程度までなら最後まで再生されます。

最後のノートオン/オフより後の MIDI イベントを捨てる仕様になっている為、このような
動作になってしまいます。

いずれ対応したいと考えていますが意外と難しいです。


今回の MWRD 対応のせいで、もしかしたら 32bit 版の kbrunkpi.exe がウイルス対策ソフト
に誤検知されやすくなったかもしれません。

再生に必要な WRD 関連ファイルの取得の為、 DPXWRD.DPX の CreateFileA という API
の呼び出しをフックする為です。

他にも LoadLibraryA とレジストリアクセス関係の API もフックします。

CreateFileA のフックはアーカイブ内の MWRD を再生する場合に WRD の内容を本体側では
調べず、再生に必要なものだけを展開して対応するようにする為に必要です。

データによっては .COM や .EXE を開きに来るようですが PC98 用に作られたこれらの
実行ファイルを DPWWRD.DPX がエミュレートするんでしょうか。
(そのデータのアーカイブには .COM も .EXE も含まれてはいませんでした)
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^9: MWRD 対応協力者(開発者)募集
351
2024/06/19(Wed) 23:16:24
Kobarin

hpDataTop32 の詳細は分かりませんが、DPWWRD.DPX が見てるのは各 MIDI イベントの
Tick 値のようです。エンドオブトラックの値だけでも良いことが分かりました。

要するに曲の長さですね。

見てるとしてもセットテンポ(0x51)と拍子(0x58)のメタイベントとデルタタイムだけ
だろうと思ってましたが、デルタタイムだけのようです。そもそもセットテンポは
入ってないっぽい。

hpDataTop32 に入ってるデルタタイムは累積値のようです。

hpDataTop32 は曲データに対して16の倍数でそれなりに大きなサイズになりますが、
DPWWRD.DPX に見せる分には 16 バイトあれば十分なのが分かりました。

hpDataTop32 は関係ない曲データのものでもほとんど問題なく再生出来てしまうの
ですが、途中で再生が止まってしまうデータがあったんですよね。

4分くらいの曲データの hpDataTop32 を使っても 20分の曲が最後まで再生出来てたり
するのは TimeBase が違うからだったんですね。

そういう訳で hpDataTop32 の件は無事に解決出来たっぽいです。

曲の長さを見るなら m_pSongProp->dwTime の方にしてくれてたらこんなに苦労しな
かったのに…。
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^8: MWRD 対応協力者(開発者)募集
350
2024/06/19(Wed) 00:45:00
Kobarin

> 解決に繋がりそうで何よりです。

とても助かりました。

お蔭様で本体との連携もうまく行って手元の最新版では MWRD を再生出来るように
なりました。アーカイブ内の曲データにも対応、64bit 版の本体でも動作します。

kbrundpx.exe の処理は kbrunkpi.exe の 32bit版に組み込むことにしました。


まだ調査が十分ではありませんが、hpDataTop32 は関係ない MIDI データのものを
使っても問題なく再生出来てしまう感じがします。

セットテンポメタイベントを複数回使うデータのタイミングが合いませんでしたが
m_pPlayStat->dwTempoTime/dwTempoTick を参照してるようで、適切な値を入れる
ようにしたら解決出来ました。hpDataTop32 は関係ありませんでした。

関係ない曲データの hpDataTop32 を使用して色々試していますが、今のところ正常に
再生出来ないデータが見つかりません。

適当に作成した MIDI から生成した hpDataTop32 のバイナリデータをリソースにする
かファイルとして同梱するだけで良かったりしたら楽なんですが…。

hpDataTop32 を DPW.EXE から取得するのはパフォーマンスを考えても出来れば
避けたいです。

> もう必要ないでしょうが、テストプログラムを一部修正したので添付します。
> プラグインの拡張子が .DPX ではない場合、設定画面を表示できない等の現象が発生するようです。

本当に何度も協力して下さってありがとうございます。
右クリックに気づいてないのかと思ってましたが設定画面が出なかったんですね。
pagetop
タイトル
記事No
投稿日
投稿者

Re^7: MWRD 対応協力者(開発者)募集
349
2024/06/18(Tue) 21:06:53
You
解決に繋がりそうで何よりです。

hpDataTop32 の仕様はさすがに私にはどうしようもないですね。
仕様が出ていたとしても NIFTY SERVE だったのではないでしょうか。
解析するなら自前で単純なMIDIファイルを作ってみて…でしょうか?

ちゃんとしたデータを設定したいなら DPW.EXE から取得するのかなとは私も考えていました。
・hpDataTop32 取得用のプラグインを作成し、プロセス間通信や共有メモリで kbrundpx.exe に送信する
・DPW.EXE から ReadProcessMemory() 等を使用して直接読み取る

ReadProcessMemory() は対象のアドレスが変動するかもしれないので、プラグイン方式でしょうかね。
・kbrundpx.exe で共有メモリ1を確保して「DPW.EXE "****.mid"」を起動
・プラグインの dpxChangeSong() がコールされたら共有メモリ2を確保して hpDataTop32 を設定
・kbrundpx.exe で共有メモリ2を読んだらプラグインで dpxCmdExit() をコール
※共有メモリ1は同期用のイベントハンドル等通知用、共有メモリ2は hpDataTop32 のデータ設定用
※パイプで hpDataTop32 を送信するのも有り?


もう必要ないでしょうが、テストプログラムを一部修正したので添付します。
プラグインの拡張子が .DPX ではない場合、設定画面を表示できない等の現象が発生するようです。

(272KB)

pagetop

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