2007/01/12(金) [n年前の日記]
#1 [iappli] サウンドのバグ取り中
BGMのループ再生時に、SO505iS、SH505iSのみ2秒程度間があいてしまうらしいので、解決できないものかと。
_こちらのサイトの機種依存情報まとめページ によると、D505i、F505iでは、 .stop() を読んだ後に 50msec ほど wait を入れる云々と言う話があるけれど。SOやSHについてはそれらしい情報が見当たらない。うーん。
ついでに、N504i は .play() が働かないときがあるらしい。失敗したときは 10msec程度 Thread.sleep() してから何度も .play() に再挑戦するような記述をしないといかんとか。…参考ソース中での該当部分の記述内容が不思議だったけど。コレの対処だったのか。
サウンドイベント発生時、つまりは AUDIO_COMPLETE が発生した割り込みの中で再生処理までやっているのがマズイのかもしれん。ワークだけ設定して、毎フレーム処理の中で再生等をしたほうがいいだろうか。でも、サウンドってのはタイミングが重要になる部分だしなぁ…。
_こちらのサイトの機種依存情報まとめページ によると、D505i、F505iでは、 .stop() を読んだ後に 50msec ほど wait を入れる云々と言う話があるけれど。SOやSHについてはそれらしい情報が見当たらない。うーん。
ついでに、N504i は .play() が働かないときがあるらしい。失敗したときは 10msec程度 Thread.sleep() してから何度も .play() に再挑戦するような記述をしないといかんとか。…参考ソース中での該当部分の記述内容が不思議だったけど。コレの対処だったのか。
サウンドイベント発生時、つまりは AUDIO_COMPLETE が発生した割り込みの中で再生処理までやっているのがマズイのかもしれん。ワークだけ設定して、毎フレーム処理の中で再生等をしたほうがいいだろうか。でも、サウンドってのはタイミングが重要になる部分だしなぁ…。
◎ キューに溜める方式にしてみた。 :
サウンド再生・停止要求をキューに溜めて、1フレーム毎に1つずつ処理をするようにしてみた。10FPSのアプリだから、
1フレーム 50msec のはず。
<何を勘違いしてるんだ。100msecだろう。それはさておき、毎フレームに1つずつ処理をしていけば、自動的に(?) wait を入れてるのと同様な処理になるはず。
ただ、D505i、F505i以外の機種については、資料の中にそのような制限が特に見当たらなかったので、1フレーム中で、キューに溜まった全ての処理を行う・連続で間髪入れずに .play() や .stop() を呼ぶようにしてみた。N506iS では問題なく動いてるように見える、いや、聞えているけど。他機種でどうなるのかは、動作確認してもらわないと判らない。まあ、問題が起きたときは、1フレームに1つずつ処理をする機種種別の中に、該当機種を追加していこうかと。
ただ、D505i、F505i以外の機種については、資料の中にそのような制限が特に見当たらなかったので、1フレーム中で、キューに溜まった全ての処理を行う・連続で間髪入れずに .play() や .stop() を呼ぶようにしてみた。N506iS では問題なく動いてるように見える、いや、聞えているけど。他機種でどうなるのかは、動作確認してもらわないと判らない。まあ、問題が起きたときは、1フレームに1つずつ処理をする機種種別の中に、該当機種を追加していこうかと。
◎ BGMのループ再生時に間が入るときと入らないときがある。 :
N506iSで動作確認してる際に気づいたのだけど。BGMがループ再生される際に、間が入るときと入らないときがある。
Doja3.0 では、サウンドに関して2ポートまで同時再生できるらしいので、1ポートをBGMに、もう1ポートをSEに割り当てているのだけど。SEが鳴ってるときにBGMのループ再生タイミングが来ると、BGMは間が入らずに連続で再生される・ループ再生されるが、SEが鳴ってないときは、BGM再生に間が入ってしまう。何故?
ループ再生処理については、AUDIO_COMPLETE イベント・演奏終了イベントが発生した際に、ループさせるべきBGMが鳴っていたなら再度再生するようにしてあるわけで。…別ポートのでサウンドが鳴っているときと鳴っていないときでは、AUDIO_COMPLETE イベントの発生するタイミングが異なる・イベント発生が遅れるのか。それとも、どのポートでもサウンドを鳴らしていない状態から、サウンドを鳴らそうとした場合は、何か wait が入ってしまうのか。終わりが遅れてしまうのか、それとも始まりが遅れてしまうのか。さてはて…。それが判ったからと言って回避策が判るわけでもないのだけど。
簡易テスト用プログラムでも作って確認してみないといかんような気がしてきた。
Doja3.0 では、サウンドに関して2ポートまで同時再生できるらしいので、1ポートをBGMに、もう1ポートをSEに割り当てているのだけど。SEが鳴ってるときにBGMのループ再生タイミングが来ると、BGMは間が入らずに連続で再生される・ループ再生されるが、SEが鳴ってないときは、BGM再生に間が入ってしまう。何故?
ループ再生処理については、AUDIO_COMPLETE イベント・演奏終了イベントが発生した際に、ループさせるべきBGMが鳴っていたなら再度再生するようにしてあるわけで。…別ポートのでサウンドが鳴っているときと鳴っていないときでは、AUDIO_COMPLETE イベントの発生するタイミングが異なる・イベント発生が遅れるのか。それとも、どのポートでもサウンドを鳴らしていない状態から、サウンドを鳴らそうとした場合は、何か wait が入ってしまうのか。終わりが遅れてしまうのか、それとも始まりが遅れてしまうのか。さてはて…。それが判ったからと言って回避策が判るわけでもないのだけど。
簡易テスト用プログラムでも作って確認してみないといかんような気がしてきた。
◎ バグ報告リストが届いたが :
結構昔のバージョンで動作チェックをしてるらしく。最新版ではあらかた対処済みなのだけど…。.xls に、再度対応内容を記述していかないといけないのがちと面倒。BTS ―― バグトラッキングシステムが必要な気がしないでもない。いや、最新版をいつでも入手できるような流れ・体制を整えるほうが先なのか。
[ ツッコむ ]
以上です。