>>テンキョーさん
サウンドの経過はミリ秒単位、アプリの動作はフレーム単位で管理と異なっているものを同期させようというのですから、基本的には「処理落ちしていない」ことを前提としなければキリがありません。
とりあえず、BGMの経過位置に合わせて補正しながらフレーム数を刻むサンプルを作成してみました。ただし、処理落ち等で遅れた分のフレーム数は一気に加算されるため、その間の値を条件にしていたイベントは無視されてしまう点にご注意下さい。あくまで、最終的な経過フレーム数は処理状態に関わらず一致する、というだけのものです。
ちなみに・・・
■『マシン速度に依存しない』『タイマーベース動作』の違いについて
・『マシン速度に依存しない』:処理落ちが発生すると、表示するフレームを間引いてフレームレートを回復させる処理です。
・『タイマーベース動作』:見た目の動作がプロパティで指定したフレーム数を基準とした動作速度になるように、オブジェクトの移動量やアニメーション速度などを調整する処理です。こちらは、動作中のFPSがプロパティの設定値より高い場合には移動量をやアニメ速度を落とし、処理落ちした場合は移動量をやアニメ速度を上げます。ただし、こちらはフレームレートの回復は行われず、あくまで見た目の動作速度を補正する処理です。
なお、『タイマーベース動作』が適用されるのは、オブジェクトの標準動作とアニメ速度のみで、イベントの実行間隔(例えば『常に実行』など)はフレームベースのままなので、完全にタイマーベースで動作するアプリの作成は不可能ではないでしょうが難しいです。
タイマーベースの場合、オブジェクトの移動速度自体を変えているため(設定値が変わる訳ではありません)、処理状態によっては座標位置が異なる場合があり、イベントで指定した座標に止まらずイベントが動作しない、ということが起こりえます。『マシン速度に依存しない』は画面更新回数を減らして処理を軽減するもので、移動速度などを変えているわけではないのでそのようなことは起こりません。
– サンプルプログラム
https://blog.clickteam.jp/wp-content/uploads/2016/07/cf25_blog_2016-07-17_frames_calculate_by_sound_position.zip