これがあなたが聞きたい答えではないことは知っていますが、サウンドを再生するために独自のフラッシュライブラリを作成したかどうかに関係なく、これを止める方法はありません。
「私にとってはうまくいく!」と言ったすべての人のために。ポスターのデモが再生されたら、ブラウザウィンドウのサイズを変更するか移動してみてください。ほんのわずかな遅延以上のものが聞こえます。これはFirefoxとIEで最も顕著ですが、Chromeでも発生します。
さらに悪いことに、ブラウザウィンドウの閉じるボックスをクリックして押したままにすると、マウスを離すまで音が完全に停止します(閉じるボックスの外でマウスを離しても、実際にはウィンドウを閉じないでください、参考までに)。
ここで何が起こっているのですか?
ブラウザウィンドウのサイズ変更または移動を開始すると、ブラウザは、ウィンドウ内で進行中のjavascriptに追いつくという動作で、ウィンドウのプロパティを変更する動作をマルチタスクで実行しようとします。必要に応じてウィンドウを短く変更します。
ブラウザウィンドウの閉じるボックスの上にマウスを置くと、時間が完全に停止します。これは、ウィンドウのサイズを変更したり移動したりするときに少しずつ発生します。JavaScriptの世界では、時間は小さな散発的なチャンク(またはマシンの速度によっては大きなチャンク)で静止しています。
ここで、「確かに、ブラウザのサイズを変更するか、閉じるボタンを押したままにすると、ブラウザが一時停止しますが、通常、これは発生しません」と言うかもしれません。残念ながら、あなたは間違っているでしょう。
実際、それは常に起こります。テストを実行したところ、ブラウザウィンドウを完全に静止したままにしたり、マウスに触れたり、キーボードに触れたりしなくても、コンピュータのバックグラウンドプロセスによって「一時的な中断」が発生する可能性があります。つまり、短時間(おそらくわずか数ミリ秒)時間はブラウザで「静止」しており、完全にランダムな間隔で制御できません。
「じっと立っている」とはどういう意味ですか?33ミリ秒(毎秒約30フレーム)ごとに実行されるsetInterval()呼び出し(これはsetTimeoutにも適用されます)があるとします。これで、33ミリ秒ごとに関数が呼び出されることが期待されます。そして、ほとんどの場合、これは真実です。
ただし、「一時的な中断」が発生し始めると、setInterval呼び出しが43ミリ秒で発生する可能性があります。10ミリ秒の間に何が起こったのですか?何もない。時間が止まった。ブラウザには何も更新されていませんでした。サウンドを再生している場合は再生を継続しますが、JavaScriptがまったく実行されていないため、新しいサウンド呼び出しは再生を開始しません。5つのsetInterval()関数を実行している場合、それらはすべて、ある時点で10ミリ秒間一時停止されます。
「時間が静止している」ことを確認する唯一の方法は、setInterval関数のコールバックで実際の時間をポーリングすることです。ブラウザがほとんどの時間維持しようとしていることがわかりますが、ウィンドウのサイズ変更やストレスの多い作業を開始すると、間隔は通常より長くなりますが、すべてのコードは同期されたままになります(私はこの手法を使用してゲームを作成しているので、すべてのゲームの更新が同期して行われることがわかりますが、わずかに途切れます)。
通常、これらのスタッターは完全に目立たないことを指摘する必要があります。setInterval時間中に実際の時間をログに記録する関数を作成しない限り(私自身のテストで行ったように)、それについてさえ知りません。ただし、繰り返しplay()呼び出しを使用して、ある種の繰り返し音(Asteriodsのバックグラウンドでのビープ音など)を作成しようとすると、問題になります。
私のおすすめ?ループすることがわかっているサウンドがある場合は、10秒程度の長い時間を与えると、しゃっくりに気付く可能性が低くなります(現在、画面上のグラフィックはしゃっくりする可能性がありますが、問題が発生しています。 )。
ゲームを作成していて、主人公に機関銃を発射させる場合は、playSound('singleShot')を10回連続して呼び出したり、playSound('machineGunFire10Rounds')を1回呼び出したりしないでください。 。
あなたはそれを回避するためにいくつかのトリックをしなければならないでしょう、しかしほとんどの場合あなたは大丈夫でしょう。
Flashアプレットは、通常のブラウザ/ JavaScript環境で行われているこの「時間の凍結」全体に何とか影響が少ないプロセスで実行されているようですが、ToneMatrixの例へのリンクでも、次のように実行できます。ブラウザウィンドウのサイズ変更または移動。
しかし、FlashはJavaScriptよりもはるかに優れているようです。ブラウザをそのままにしておくと、Flashが一定時間フリーズせず、間隔が常に時間どおりに実行されていることに賭けたいと思います。
tl; dr:
- あなたはあなたが達成したいと思っていることに夢中になっています
- いくつかの回避策を使用してそれに対処してみてください
- プロジェクトを純粋なフラッシュで書き直します(javascriptなし)
- ブラウザが良くなるのを待ちます(Firefox 4はJaegerMonkeyと呼ばれる新しいjavascriptエンジンを取得しています。これは見るのが面白いでしょう)
- どうすればこれをすべて知ることができますか?javascript、setInterval、soundManager/html5オーディオ呼び出しで多くのテストとロギングを行いました