Re: Android版のサウンド関連 ( No.6 ) |
- 名前:管理人 日時:2019/12/23 04:01
> こちらでも再現が難しいのですが、
> 1日寝かしておいて、復帰しようとしたときに、確率高くなる気がします。
1日寝かして、ですか…!
了解しました、早速テストプログラムを起動してから画面OFF状態にして、20時間後くらいに再度確認してみます (・・;;
1日寝かしたらOSが自動的にアプリを終了してしまいそうですが…
|
Re: Android版のサウンド関連 ( No.7 ) |
- 名前:ギウ 日時:2019/12/23 07:19
確かに、最近確認したのでは、1日寝かせて、アプリが自動再起動(?)して、音が鳴らなくなってました。
(以前は、音を消して遊んでることがあったので、もしかしたら以前もこのタイミングだったのかもです)
今日も、昨日の最新版でリビルドしたのを試し、同じように自動再起動後に鳴らなくなりました。
自動再起動と、通常の起動では何か違いがあるんでしょうか。
|
Re: Android版のサウンド関連 ( No.8 ) |
- 名前:管理人 日時:2019/12/24 02:46
自動再起動で鳴らなくなる、ですか…
重要なご情報ありがとうございます
> 自動再起動と、通常の起動では何か違いがあるんでしょうか。
恐らくですが、こちらの『Androidアプリ開発の基礎的な情報や注意点など』のページの
『Androidアプリ開発の基礎的な情報や注意点など』
https://dxlib.xsrv.jp/lecture/Android/Android.html
項目4『Androidアプリではグローバル変数が 0 で初期化されることを前提としてはいけないことについて』の
---------------------------------------
Windowsアプリではプログラム起動直後はグローバル変数は 0 で初期化されていますが、Androidアプリでは
0 で初期化されているとは限りません、何故ならアプリを終了してもメモリが解放されず、同じアプリを起動した
際に同じメモリ領域が初期化されずに使い回されることがあるからです。
なので、グローバル変数は『前回プログラムを動作させたときに最後に代入した値』が入っている可能性が
ありますので、『プログラム起動時にグローバル変数は必ず 0 で初期化されている』ことを前提としたプログラムは
組まないように注意してください。
---------------------------------------
上記の『アプリを終了してもメモリが解放されず、同じアプリを起動した際に同じメモリ領域が初期化されずに使い回されることがある』が
自動再起動した場合もこれにあたるのではないかと思います( 通常起動ではアプリが完全に終了している状態から新たに開始されるので
グローバル変数が 0 に初期化されます )
上記に書かれていますが、グローバル変数が 0 で初期化されていることを前提とした処理は書かれていないでしょうか?
( とはいえ、恐らく既にアプリをリリースされていられるくらいですから、その辺りはしっかり対応されていると思いますが… )
となると、DXライブラリ側が自動再起動した場合に正しく処理できていない可能性が高いのですが、
少し確認しただけでは原因となりそうな箇所は見つかりませんでした
ただ、自動再起動すれば再現する可能性が非常に高いという事ですので、まずは自動再起動を発生させて現象を
再現させてみたいと思います( 昨晩起動して、1日寝かせて( 画面OFFにして )おいて今画面ONにしてみたところ、
自動再起動せずに普通にソフトが再開しました orz )
|
Re: Android版のサウンド関連 ( No.9 ) |
- 名前:ギウ 日時:2019/12/24 08:20
>項目4『Androidアプリではグローバル変数が 0 で初期化されることを前提としてはいけないことについて』の
忘れてました!が、ざっと見た感じ大丈夫そうでした。
サウンド周辺も念入りに見ましたが、最初に初期化してたので問題ないはずです。
あと、ハンドルが無効な場合は、ChangeVolumeSoundMemでエラーになりますよね(?)
一先ず、再読み込みすれば鳴るようなので、「起動後の最初の再生でエラーが出たら、再読み込みする」処理を入れみます。
>自動再起動せずに普通にソフトが再開しました orz
高性能なスマホですね^^
もしそちらで確認できない場合は、私のスマホだけの問題かもしれませんので(ユーザーさんからの報告もありませんし)、一旦無視して頂いて大丈夫です。
|
Re: Android版のサウンド関連 ( No.10 ) |
- 名前:管理人 日時:2019/12/25 01:47
> 忘れてました!が、ざっと見た感じ大丈夫そうでした。
> サウンド周辺も念入りに見ましたが、最初に初期化してたので問題ないはずです。
了解です!
> あと、ハンドルが無効な場合は、ChangeVolumeSoundMemでエラーになりますよね(?)
はい、そうなんですよね
グローバル変数にそのまま残ってたハンドル値がたまたま自動再起動後の LoadSoundMem で読み込んだ
サウンドハンドル値と一致していた場合も考えられますが、その場合は PlaySoundMem も成功するはずですし…
> 一先ず、再読み込みすれば鳴るようなので、「起動後の最初の再生でエラーが出たら、再読み込みする」処理を入れみます。
その方法で正常に鳴るようになりそうですが、
自動再起動時にも通常の起動と同様にSEを読み込む LoadSoundMem が行われているのですよね…?
となると、自動再起動後の一度目の LoadSoundMem で作成したサウンドハンドルは駄目で、
その後、再度 LoadSoundMem で作成したサウンドハンドルでは正常に再生できるという謎の結果に…
> 高性能なスマホですね^^
> もしそちらで確認できない場合は、私のスマホだけの問題かもしれませんので(ユーザーさんからの報告もありませんし)、一旦無視して頂いて大丈夫です。
スマホの空きが無かったのでタブレットで試しました
本日も一日放置しておいたら、今度は完全終了してくれていました orz
検証に時間が掛かる案件ですので、並行して調査を続けたいと思います m(_ _;m
|
Re: Android版のサウンド関連 ( No.11 ) |
- 名前:ギウ 日時:2019/12/26 08:16
>自動再起動時にも通常の起動と同様にSEを読み込む LoadSoundMem が行われているのですよね…?
そうなんですよね。
で、確認したらダメでした; うーん。。
他のスレッド見たら↓がありましたので、
SetUseAndroidKillProcessFlag(TRUE);
今度はこれを使ってみます。
もしどこかでグローバルの初期化がもれてるのが原因なら、これで治るのかも(?)ということで。
|
Re: Android版のサウンド関連 ( No.12 ) |
- 名前:ギウ 日時:2019/12/27 08:03
結果、SetUseAndroidKillProcessFlag(TRUE) もダメでした。
|
Re: Android版のサウンド関連 ( No.13 ) |
- 名前:管理人 日時:2019/12/28 23:25
|
Re: Android版のサウンド関連 ( No.14 ) |
- 名前:ギウ 日時:2019/12/29 08:40
バージョンは9です。
最新版はDLしておきました! ありがとうございます。
他の人から同じ症状がでてこなければ問題なしで良いと思います。
|
Re: Android版のサウンド関連 ( No.15 ) |
- 名前:管理人 日時:2019/12/30 10:41
|
Re: Android版のサウンド関連 ( No.16 ) |
- 名前:ギウ 日時:2019/12/30 17:19
ありがとうございます。試してみます!(また書き込みます)
>自前ミキシング
お! 少し動かしてみましたが、大丈夫そうでした。
同時再生速度は速くなってる感じでしょうか?
(以前は1フレームに沢山再生すると重くなってたので、ゲーム側で再生数を調整してます)
|
Re: Android版のサウンド関連 ( No.17 ) |
- 名前:管理人 日時:2019/12/31 15:46
お試しいただきありがとうございます
自前ミキシングによる音の再生が問題なく動作しているようで何よりです
> 同時再生速度は速くなってる感じでしょうか?
> (以前は1フレームに沢山再生すると重くなってたので、ゲーム側で再生数を調整してます)
再生中の負荷は分かりませんが、再生開始の負荷は下がっていると思います
( 自前ミキシングなので再生開始時の OpenSL のAPI呼び出しが無くなりましたので )
あと、最新版を使用されたアプリのご提供ありがとうございます
昨日から3の状態まで進めて、本日復帰させてみましたが、正常にSE、BGM再生されていました
( これが最新版の変更によるものなのか例によって私の環境では再現しないからなのかは不明ですが… )
> こちらでは何故かPCがスマホを認識せず、LOGを見ることができませんので、
あ、LOGはスマホで確認が可能です
ファイルエクスプローラー系のソフトをインストールして( 私は良いのか悪いのか分かりませんが
ファイルマネージャーというアプリを使っています ) Log.txt があるフォルダに移動して
Log.txt をテキストエディタで開く感じです
( 例えば DxLibTest_Android_VS2019 という Android版テスト用のプロジェクトの場合、Log.txt のパスは
/storage/emulated/0/Android/data/com.DxLibTest_Android_VS2019/files/Log.txt
となっています )
今回頂いたアプリのものと思われるフォルダの中も拝見しましたが Log.txt はありませんでした
SetOutApplicationLogValidFlag( FALSE ); でログを出力されないようにされていますでしょうか?
|
Re: Android版のサウンド関連 ( No.18 ) |
- 名前:ギウ 日時:2020/01/01 08:00
ご確認ありがとうございます。
こちらでも問題なく再起動できていました!(2回試しました)
>あ、LOGはスマホで確認が可能です
なるほどです。
標準のソフトっぽいので確認できました!
>SetOutApplicationLogValidFlag( FALSE ); でログを出力されないようにされていますでしょうか?
ですね、申し訳ありません。
元々LOGを有効にしてたのを、無効に変えてしまってました。。
ということで、最新版ではこの件は無事解決ということで、ありがとうございました!
ただ、こちらのスマホでは、以前よりも若干ノイズが入り気味になりました。
毎フレーム、複数のSEを鳴らした時に、ノイズを感じやすいです。(同じ音なら、毎回同じノイズになってる気がします)
ご報告ということで。
本年も宜しくお願い致します。
|
Re: Android版のサウンド関連 ( No.19 ) |
- 名前:管理人 日時:2020/01/02 06:08
|
Re: Android版のサウンド関連 ( No.20 ) |
- 名前:ギウ(解決) 日時:2020/01/02 07:35
早速ありがとうございます!
音割れ大丈夫そうでした!(以前と同じように聞こえてます)
自前ミキシング、速度も速くなってますし、今後の自由度も高くなってると思いますし、完璧ですね。
|
Re: Android版のサウンド関連 ( No.21 ) |
- 名前:管理人(解決) 日時:2020/01/03 07:26
お試しいただきありがとうございます
音割れ解消されたようで何よりです!
解消の仕組みとしては『音の再生を微妙にずらす』です
全くの同タイミングで音を再生しなければ波形の振幅がキッチリ倍々になることも無くなり、
-32768〜32767 の範囲から外れる時間も短くなり、音割れが気にならなくなるというわけです
( 1回のPlaySoundMem につき 1/480秒再生が遅れますので、60fpsの場合1フレームに8回以上
SEを再生すると、9回目以降は次のフレームまで再生が遅らされます )
とはいえ、波形がキッチリ倍々になる場合よりは -32768〜32767 の範囲から外れる率は
低くなるとはいえ、外れる箇所はあることはあるので、もしかしたら駄目かも、と思ったのですが
大丈夫だったようで何よりです
( この方法で駄目なら一般的な『全体の音量を下げて音割れを防ぐ』をやろうと思ったのですが、
私も別の簡単なテストをしてみて想像以上に音割れを感じなかったので今回の方法で問題無さそうです… )
> 自前ミキシング、速度も速くなってますし、今後の自由度も高くなってると思いますし、完璧ですね。
完璧…かどうかはまだ分かりませんが、お陰様で実用レベルにできたと思います m(_ _)m
|
Re: Android版のサウンド関連 ( No.22 ) |
- 名前:ギウ 日時:2020/01/03 15:06
>外れる箇所はあることはあるので
確かに、偶にノイズっぽくなることがありました。
言われないと気付かないレベルかもですが。
>この方法で駄目なら一般的な『全体の音量を下げて音割れを防ぐ』をやろうと思ったのですが
速度的に重くないならこれもあった方が良い気がします。
重い場合は、速度優先か音割れ防止優先かを設定できるようにするとかでしょうか。
|
Re: Android版のサウンド関連 ( No.23 ) |
- 名前:管理人 日時:2020/01/04 15:44
|
Re: Android版のサウンド関連 ( No.24 ) |
- 名前:ギウ(解決) 日時:2020/01/04 10:41
ご対応ありがとうございます!
今度こそ大丈夫ではと感じました。
|
Re: Android版のサウンド関連 ( No.25 ) |
- 名前:管理人(解決) 日時:2020/01/05 07:13
ご確認ありがとうございます! m(_ _)m
ひとまず今の状態で次の正式版としようと思います…
|