新着表示
タイトル
記事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
タイトル
記事No
投稿日
投稿者
参照先
Re^6: MWRD 対応協力者(開発者)募集
348
2024/06/18(Tue) 19:15:09
Kobarin

hpDataTop32 の仕様が分かればそれに越したことはありませんが、最悪分からなくても
DPW.EXE から取得することが出来ます。

出来れば DPW.EXE は介さずに DPWWRD.DPX だけを使用したいですけど。

なので、ここまで来れば原理的には MWRD に対応出来ると思います。
You さんのおかげで何とかなりそうです。本当にありがとうございます。
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^5: MWRD 対応協力者(開発者)募集
347
2024/06/18(Tue) 02:25:41
Kobarin

> dpxGetEventEx で DPEV_STEP16 を返す頻度で再生の進み方が変わる感じですね。

これはプラグインの設定で DPEV_STEP16 を使うのチェックを入れてたからのようです。
チェックを外せば試したデータではタイミングもバッチリですね。

ちなみに DPWWRD.DPX の設定画面はウィンドウ上で右クリックメニューからです。

演出くんメカを使うデータはフォントも設定しておかないとひらがなとかを表示
出来ないみたいです。

演出くんメカコマンドを有効に

のチェックを外せばフォントを設定しなくても表示されます。

関係ない曲データの hpDataTop32 と dwDataLen を使っても見かけ上は問題なく
表示されてるっぽい。

もっと色んなデータでテスト出来るように本体と連携出来るようにします。
かなり希望が見えて来た気がします。
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^4: MWRD 対応協力者(開発者)募集
346
2024/06/18(Tue) 02:19:13
Kobarin

ありがとうございます。

こんなやり方があるんですね。流石です。

m_pSongProp->dwDataLen
m_pSongProp->hpDataTop32

NULL でも落ちなかったから無関係だと思ってましたがこの2つが関係してそうですね。
dwDataLen は hpDataTop32 のサイズのようです。なのでどちらも 0 なら落ちません。

試しに hpDataTop32 の中身をファイルにダンプしてそれを kbrundpx.exe で読み込ませると
時間の進み方はおかしいですが、最後まで表示することが出来ました。
サイズだけ確保しておいて hpDataTop32 の中身をゼロクリアすると再生が進みません。

dpxGetEventEx で DPEV_STEP16 を返す頻度で再生の進み方が変わる感じですね。

hpDataTop32 は開いてる MIDI データによって変わりますが MIDI データそのものとは
違うようです。この仕様が分かれば対応出来るかもしれませんが非公開では難しいかも
しれません。プラグインが参照してるなら公開されてた時期があるのかな。

おかげでかなり前進しましたが、逆に対応が難しいことが分かった気もします。
hpDataTop32 の仕様を解析しなければならなそうなので。

デルタタイムと MIDI イベントを並べたもののような感じがしないでもないですが…。
私の解析力では無理かもしれない…。

まだタイミングは出鱈目ですが、一応最後まで表示出来るようにはなったので、本体と
kbrundpx.exe を連携出来るようにして色々なテストデータで試せるようにしてみるかな。

もう少し頑張ってみます。ここまで来たら何とか対応させたい。
pagetop
タイトル
記事No
投稿日
投稿者

Re^3: MWRD 対応協力者(開発者)募集
345
2024/06/18(Tue) 00:27:24
You
古いSDKは多分構造体のいくつかのメンバが Reserved に戻っているだけのような気がしますね。

参考になるか分かりませんが、こちらで作成したテスト用プラグインを添付しておきます。
(DPW.EXE や *.DPX, *.DLL の転載要件を満たしていませんが、テスト用なのでご容赦を…)

このプラグインは、内部で DPWWRD.DPX をロードして独自に作成した CDpx を渡して動作させる物です。
DPWWRD.DPX に渡す CDpx はSDK(2.2)の物ですが、DPWWRD.DPX は正常に動作しているように見えます。

DPW.EXE に返す idExtension を 5 にしてみたりもしましたが DPWWRD.DPX の動作は特に変わりません。

DpwWrdProxy.cpp と CDpxProxy.cpp を見てもらえば大体わかると思います。
CDpxProxy にロギングを仕込めば値を追跡したり出来そうですが、そこまでは手が回りませんでした。

(271KB)

pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^2: MWRD 対応協力者(開発者)募集
344
2024/06/17(Mon) 19:12:47
Kobarin

ありがとうございます。

私も VC6 でのビルドは試していました。
サンプルプラグインを動かした結果から、もしかして開発環境の違いのせいで
プラグイン <=> DECOP 相互の API を正しく呼べてないのかもしれないと思ったので。
ですが、VS2022 でビルドしたときと動作は変わりありませんでした。

プラグインの仕組みはある程度理解出来ました。 むしろ他のプラグインより MWRD/SWRD
のプラグインを動かすのが最も簡単そうに思えるくらいなのですが、何をきっかけにして
再生が始まるのかが未だに理解出来ません。

サンプルプラグインを動かした結果が絶望的に意味が分からないんですよね。
なぜこの動作で MWRD/SWRD が再生出来るのかが…。

諦めようかとも思うのですが、SWRD を再生出来てしまったせいで諦めきれません。

関係ないのかもしれないけど DECOP 1.2 の頃の SDK を見てみたい。
DPWWRD.DPX と DPWSWRD.DPX の _ExtProp::idExtansion の値が 5(SDK では 6) なのが
とても気になります。

サンプルプラグインで値を 5 にしても特に何も変わりない気がするので
DECOP 側でプラグインに対して何かしてるということもなさそう。
pagetop
タイトル
記事No
投稿日
投稿者

Re: MWRD 対応協力者(開発者)募集
343
2024/06/17(Mon) 00:51:01
You
とりあえず触ってみて、テストプログラムの画面が最初の文字が出ただけで変化しないことと、
ちゃんと動くようにするのが大変そうだなと言う事は確認しました。

DPW.EXE は古いプログラムなので、WinXP&VC++6.0の開発環境を作って
テストプログラムをビルドしてみましたが、結果は同じでした。

状態確認用にプラグインを作成したりもしましたが、すぐに把握できる規模ではありませんね…
これはちょっと今は手が出せません。
pagetop
タイトル
記事No
投稿日
投稿者
参照先
MWRD 対応協力者(開発者)募集
342
2024/06/10(Mon) 20:33:32
Kobarin

DECOPLAY(以下、DECOP) のプラグインを使用しての MWRD 対応、色々試してみました
がやはりうまく行きません。

SWRD の再生が出来てあと一歩と思ったのですが、その後ほとんど進展していません。
なんかもうお手上げと言う感じです。

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

こちらにテストプログラムのソースコードを置いておきます。
ソースコードのみですので、開発者でない方はダウンロードしても無意味です。

このテストプログラムで MWRD を最後まで再生させる方法を教えて頂けませんか。

http://cgi.members.interq.or.jp/ox/izu/

こちらで DPWMWRD.DPX と DPWSWRD.DPX、および DECOP がダウンロード出来ます。

MWRD の再生には DPWWRD.DPX が必要ですがまだ動作しません。

DPWSWRD.DPX があれば SWRD の再生は出来ます。GuruGuruSMF4.DLL を使った簡易
MIDI プレイヤーで再生するとタイミングもばっちりです。
(途中でテンポが変わるデータはタイミングがずれるかもしれないです)

DECOP はテストプログラム自体の動作には必要ありませんが、本テストプログラム
に同梱の DECOP のサンプルプラグインの動作確認に必要です。

サンプルプラグインを DECOP 上で動作させるとなんか変です。うまく説明出来ません
が、テストプログラムの動作結果と辻褄が合わない感じがするのですよね。

SWRD を再生出来たのは良いけど、その為にしたこととも矛盾してるんですよね。
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^2: DECOPLAY の MWRD プラグイン
341
2024/06/08(Sat) 01:25:00
Kobarin

やっぱり挫折しそうです。

DPWSWRD.DPX の方では SWRD を最後まで表示出来るのですが、肝心の DPWWRD.DPX の
方は最初の1~2秒だけそれっぽい表示がされるだけ。

DECOP のサンプルプラグインを VS2022 でビルドして DECOP の動作(プラグインに
対して何をするか、DECOP が公開している変数がどうなってるか等)を確認してみた
けど、サンプルプラグイン自体が正常に動作しないし、なんか DECOP の挙動が変な
んですよね。

DPWSWRD.DPX で SWRD 再生出来たときはついに念願の MWRD 対応実現出来るかも、と
思いましたが、まだのようです。


もう少し調べてみてどうしても分からなかったらテストプログラムとそのソースを
公開するので、誰か協力して欲しいです。
pagetop

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