yreeen/dxlibp

CheckSoundMem() が常に0を返してしまう

Opened this issue · 5 comments

概要

BBSより。

RCGF:

ストリーミング再生に設定して読み込んだサウンドハンドルの場合は正常に値を返しますが、
メモリ上にデータを展開して再生に設定して読み込んだサウンドハンドルの場合、再生中でも0を返してくるように思います。

@yreeen が「恐らくバグである」というレスをしている。

元記事

ストリーミング再生中にメモリ上に展開しておいた効果音を鳴らすときに
同じ効果音が連続して鳴らないようになっているかCheckSoundMemでチェックしてから再生しようとしたところ
指定したサウンドハンドルを再生していない状態でも1が返ってくるようです。

9d58b69 で該当箇所に少し手をつけてみました。
恐らくこれで直ったと思いますが、現在手元にテスト環境が無いので、正常に動作したか分かりましたら教えて頂ければ幸いです。

修正箇所を反映したもので確認したところ
CheckSoundMemの結果に変化が無く
Homeキーからの終了をしようとしたところ
DeleteSoundMemでサウンドスレッドの終了待ちで無限ループしているようで
「しばらくお待ちください」と出たままXMBに戻れなくなりました。

修正を取り入れる前は、Homeキーからの終了でも問題なくXMBに戻れました。

handle[i] = -1;
dxpSoundArray[handle[i]].playing = 0;
のところですが
配列の-1番目の値を書き換えることになるので
dxpSoundArray[handle[i]].playing = 0;
handle[i] = -1;
ではないかと思い、試してみたところ問題なくXMBに戻れました。

が、CheckSoundMemの結果は変わらずです。

効果音はDX_SOUNDDATATYPE_MEMNOPRESSで正常にロードしただけで
1度も該当効果音を再生していない状態で
CheckSoundMemが1を返してきます。

返答遅れてすいません。

指摘の点はまったくその通りで、私の凡ミスでした。でもそれを直した上では結局は既存のバグを1個潰してることになると思うので結果オーライ……なのかなぁ。
しかしサウンド周り通して見た限りでは原因ちょっと分かんないです……恐らくメモリの初期化ミスか*_PLAYや *_STOPのフラグの立て方の簡単なミスだと思うのですが、該当箇所が分かりません。

最近忙しく、しばらく手を付けられないと思います。忘れてるわけじゃないです。申し訳ないです……