トップページ > 記事閲覧
Android版にて、非同期読み込み中のサウンドを操作するとクラッシュする
名前:TAKU 日時: 2022/03/28 01:49

非同期の読み込み中のサウンドを再生する、再生開始時間を変更する、などの操作をするとクラッシュしてしまいます。 非同期読み込みを無効にするとクラッシュは再現しません。 環境は AndroidStudio です。 // クラッシュ時のスタックトレースです。 art_sigsegv_fault 0x000000700ab085f8 art::FaultManager::HandleFault(int, siginfo*, void*) 0x000000700ab08b0c art::SignalChain::Handler(int, siginfo*, void*) 0x0000005af0c5cf58 <unknown> 0x000000730204a678 見ての通り、スタックトレースからクラッシュ原因が一切特定できません。 プロジェクトの規模が小さいときは、怪しい個所をすべてしらみつぶしで解決できましたが、(DxLib でハンドルで操作している個所をすべてチェックした感じです。) 現在はプロジェクトの規模が大きくなったため不具合の調査修正にかなりの時間を要するようになってしまいました。 読み込み中に不正に操作されたものを特定したいのですが、何か方法はないでしょうか?
メンテ

Page: 1 |

Re: Android版にて、非同期読み込み中のサウンドを操作するとクラッシュする ( No.1 )
名前:TAKU 日時:2022/03/28 22:59

一応自己解決できましたが、修正にかなりの時間がかかってしまいました。 問題点の詳細は、非同期読み込み中のサウンドに GetCurrentPositionSoundMem を行うと Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xa8 in tid 11002 (Thread-31), pid 10914 (.example.rhythm) などの例外が投げられて、アプリが異常終了します。 この時に大抵の場合はスタックトレースの取得が出来ません。5〜6時間ほどデバッグをしていて一度だけ、スタックが拾えたので今回の問題修正が出来ました。 管理人さん Android版 DxLib で非同期読み込み中のサウンドに対して GetCurrentPositionSoundMem を行った場合の仕様はどのようになっていますか? 例外を投げる形でしょうか? 例外を投げてアプリが異常終了した場合は、スタックトレースが拾えないため問題の修正が難しいです。 問題個所の特定が簡単になる方法はないでしょうか?(非同期読み込み中にアクセスされたら、スタックトレースなどを logcat に出力して例外を投げるなど。。。)
メンテ
Re: Android版にて、非同期読み込み中のサウンドを操作するとクラッシュする ( No.2 )
名前:管理人 日時:2022/03/29 02:45

原因調査が大変だったようで申し訳ありません > Android版 DxLib で非同期読み込み中のサウンドに対して GetCurrentPositionSoundMem を行った場合の仕様はどのようになっていますか? > 例外を投げる形でしょうか? すみません、『非同期読み込み中のサウンド』というのは SetUseASyncLoadFlag( TRUE ); で非同期読み込みを ONにした状態で LoadSoundMem で非同期読み込みを実行して、且つその LoadSoundMem の非同期読み込みが終わる前の状態の サウンドハンドルのことでしょうか? GetCurrentPositionSoundMem に非同期読み込みが終了する前のサウンドハンドルを渡した場合は 何もせずに -1 を返すようになっている筈ですが…
メンテ
Re: Android版にて、非同期読み込み中のサウンドを操作するとクラッシュする ( No.3 )
名前:TAKU 日時:2022/04/04 00:14

管理人さん お疲れ様です。 最小のテストコードのみで試してみたところ、バグは再現しませんでした。 発生条件がかなり複雑のようです。。。 問題が再現しましたら、再度ご報告したいと思います。 別件ですが、Android Studio でブレークポイントを置き処理を一時停止すると、サウンドの再生が止まる&再生が出来なくなることがあります。 こちらは既知問題でしょうか?
メンテ
Re: Android版にて、非同期読み込み中のサウンドを操作するとクラッシュする ( No.4 )
名前:管理人 日時:2022/04/05 01:30

> 最小のテストコードのみで試してみたところ、バグは再現しませんでした。 > 発生条件がかなり複雑のようです。。。 > 問題が再現しましたら、再度ご報告したいと思います。 了解です お手数をお掛けしてすみません > 別件ですが、Android Studio でブレークポイントを置き処理を一時停止すると、サウンドの再生が止まる&再生が出来なくなることがあります。 > こちらは既知問題でしょうか? いえ、今回 TAKUさんにご指摘されて初めて知りました 調べたところ、ブレークポイントなどで処理を一時停止すると一時停止解除後に 『サウンドの再生は正常に行われている』という状態を Open SL が返すにも関わらず 再生するサウンドのデータが要求された際に呼ばれるコールバック関数が呼ばれなくなることがあるようです 対策として 『一定時間コールバック関数が呼ばれなかったら異常な状態を判断してサウンド再生用のインターフェイスを再初期化する』 という処理を追加したところ一時停止解除後にサウンドの再生が止まる現象は発生しなくなりました その変更を加えたバージョンをこちらにアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibAndroidTest.zip // Android版
メンテ
Re: Android版にて、非同期読み込み中のサウンドを操作するとクラッシュする ( No.5 )
名前:TAKU 日時:2022/04/08 01:22

管理人さん サウンドの再生が止まる現象は確認できなくなりました。 ありがとうございます。
メンテ

Page: 1 |

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

   クッキー保存