トップページ > 記事閲覧
Android版:音系デッドロックその3?
名前:ギウ 日時: 2017/03/21 23:40

お世話になっております。 前回のPlaySoundMemと似た感じの「応答なし」になりました。 まだどれが原因か分からないのですが、 感じとしては、効果音の読み込み数を10個から44個に増やした時に止まるようになった気がします。 あとは、メモリに読み込んだ効果音を設定する感じで使ってます↓ ===========  暗号化されたファイルから、oggデータをメモリに読み込み、  曲(ogg, 2分10秒くらい)  SetCreateSoundDataType(DX_SOUNDDATATYPE_MEMPRESS); // 圧縮された状態のまま再生  効果音(ogg, 数秒程度)※44個くらい読み込む  SetCreateSoundDataType(DX_SOUNDDATATYPE_MEMNOPRESS); // メモリに展開し再生  を行った後、↓でハンドルを取得。  id = LoadSoundMemByMemImage(data,size);  取得後、元のoggデータは解放。(ここは問題ないでしょうか?)  音量を、各1回だけ設定。  ChangeVolumeSoundMem(vol,se_id[no]);  曲は↓でループ再生。  PlaySoundMem(bgm_id,DX_PLAYTYPE_LOOP,TRUE);  効果音は↓で通常再生。  PlaySoundMem(se_id[no],DX_PLAYTYPE_BACK,TRUE); =========== という感じです。 がっつりゲーム側の処理も入ってるので、そこで止まってる可能性もあるのですが、、 止まり方が前の同じでしたので、ここに書き込みました。 「ここをもう少し調査してほしい」などありましたら教えてください。 もう少し原因を絞り込めたらまた書き込みます。
メンテ

Page: 1 |

Re: Android版:音系デッドロックその3? ( No.1 )
名前:ギウ 日時:2017/03/21 23:41

それと、止まった時ですが、BGMが1秒くらいの範囲でループしてました。
メンテ
Re: Android版:音系デッドロックその3? ( No.2 )
名前:ギウ 日時:2017/03/22 11:38

もう少し絞り込んでみました。 箇条書きします。 ============ ・BGMを読み込まない&再生しない状態でも、SE再生時に止る(なのでBGMは関係ない) ・1個の音をいろんなタイミングで鳴らしてると、10秒〜1分以内くらいに止まる。(複数の音でも止まる) ・前回のように音を毎フレーム1000回とか再生しても止まらない。(タイミングが影響?) ・SEの読み込みまでを行い、再生だけを行わない場合は止まらない。(なのでゲーム側の問題ではない、はず) ============ SEのハンドル取得後に、元のoggデータを解放してることが問題ないなら、 再生するタイミングによって止まるのかなという気がしてます。
メンテ
Re: Android版:音系デッドロックその3? ( No.3 )
名前:ギウ 日時:2017/03/22 11:55

追記。 ・リリースモード、デバッグモード、どちらも止まる。 あと、一部訂正で、止まらない時は暫く止まらなかったので、「10秒〜3分くらいで止まる」に修正します。
メンテ
Re: Android版:音系デッドロックその3? ( No.4 )
名前:管理人 日時:2017/03/23 01:10

バグのご報告に加え詳細な再現の方法まで教えていただきありがとうございます すぐにでも対応したいのですが、今週は週末まで作業の時間を確保できそうにないので、 申し訳ありませんが週末までお待ちください m(_ _;m
メンテ
Re: Android版:音系デッドロックその3? ( No.5 )
名前:ギウ 日時:2017/03/23 22:07

ご返信有難うございます。お時間のある時で大丈夫です。 追加報告です。 0.3秒から1秒程度の効果音を、画面をタッチしたらランダムで鳴らす、ということをすると止まりやすかったです。 例) ================ while(ProcessMessage()!=-1) { if( GetMouseInput()&MOUSE_INPUT_LEFT ) { if( GetRand(200)<10 ) PlaySoundMem(id[10],DX_PLAYTYPE_BACK); if( GetRand(200)<20 ) PlaySoundMem(id[20],DX_PLAYTYPE_BACK); if( GetRand(200)<30 ) PlaySoundMem(id[30],DX_PLAYTYPE_BACK); } ScreenFlip(); } ================ このプログラムを実行し、画面をタッチしたり離したり、連打したりする感じです。 (止まるタイミングは、効果音が終わる前後で再生とか?) よろしくお願いいたします。
メンテ
Re: Android版:音系デッドロックその3? ( No.6 )
名前:管理人 日時:2017/03/26 03:57

簡単に再現できるコードを載せていただきありがとうございます お陰で直ぐに手元でデッドロックを再現することができました 原因はDXライブラリ内部で行っている『複数のクリティカルセクションのロックを取る』処理の際に ロックを取る順番が誤っていたために StopSoundMem を実行するタイミングによってはデッドロックが 発生するというものでした 修正版をアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用
メンテ
Re: Android版:音系デッドロックその3? ( No.7 )
名前:ギウ(解決) 日時:2017/03/28 08:46

こちらも問題なく再生できるようになりました。 有難うございます!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存