(BACK)

解説:同期を取る事の意味

@ver0.9a5
サウンド同期を取ると、画面と音の経過時間が一致するように修正される。
この事を詳しく解説する。
理解しなくても構わないが、仕組みを知っておくのも一興。

本稿の「同期」とは、全てMP3再生時の同期、すなわちストリーミング再生機能の事である。
「親イベント」とは、スプライトでない基本のイベント(_root、メイン)の事である。

1.同期の手順
同期は、以下の手順で有効になる。

1.MP3ファイルを再生時のMP3アクションにて「ストリーミング再生」する。
2.サウンドが再生されていて、かつ、親イベントが動いている(停止していない)間だけ、同期が有効になる

2は多くの処理をスプライトに小分けしている場合に注意する点である。親イベントが停止すると同期も中断するので、親イベントでする事がなくなり、でも同期が切れては困るような場合は、
・ラベル
・アクション:何もしない:100フレーム
・アクション:ラベルへジャンプ:_PrevLabel
のように、無駄に時間を過ごす処理を作っておくこと。

2.同期を取る取らない
同期を取ると、
例えば1秒ぶんの時間(音)が経過しても、0.8秒ぶんしか画面を表示していない場合、遅れた0.2秒ぶんを表示せず飛ばして、無理矢理、音と画面の進行を一致させる。

結果として、再生パワーが足りない場合、動きが飛んだりカクカクになったりする。
そうした遅延が起こっている間は、クリックなどの入力がうまく受け取れない可能性がある。

同期を取らない場合は、
例えば1秒ぶんの時間(音)が経過しても、0.8秒ぶんしか画面を表示していない場合、遅れても全く気にせず、1フレームずつ確実に表示(処理)していく。
一旦ズレはじめると直ることはないので、時間が信用できなくなる。

結果として、再生パワーが足りない場合にこのズレがどんどん大きくなっていき、音に対して画面の進行が遅い、負荷がかかるようなシーンで画面の動きがどんどん遅くなる、という事が起きる。

原因は簡単に言えば、1フレームで完了するようにイベントを作ってあっても、実際には1フレームでは間に合わない事である。
例としては画像やスプライトを大量に表示・動かしていたり、ASで膨大な量の処理をした場合などが考えられる。
作成環境では問題なく動いていても、それよりも再生パワーが低い環境で見るとかなり酷い動きになっている可能性がある。

原因のひとつとして、fpsが高い事が考えられる。
fpsが高ければ1フレームあたりの実時間も短くなるので、「1フレームの間に1フレームぶんの処理が完了する許容量」は低くなっていく。
fpsを決める時は慎重に。よほどの狙いがない限り30あれば充分。自分で妥協出来るレベルまでfpsを下げるのもいい。

画質(quality)を下げる事である程度は緩和される。

音がないFLASHで同期を取りたい場合は、無音のサウンドファイルをストリーミング再生させておくこと。


Written by D4U