3

小さな HTML5 Web アプリで、ユーザーの操作に応じてサウンドを再生したいと考えています。ユーザーがボタンをクリックすると、onclick ハンドラーで次のようなサウンドが再生されます。

    url = "assets/sounds/buzz" + (this.canPlayMP3 ? ".mp3" : ".ogg");
    sound = new Audio(url);
    sound.load();
    sound.play();

これは Firefox でうまく機能します。残念ながら、iPad (iOS 5.1.1 を実行している iPad 2) では、サウンドが再生される前に 2 秒の遅延が発生します。これは、最初だけでなく、サウンド サンプルを再生するたびに発生します。

MP3 ファイルの長さは 9KB です。iPad は、Firefox を実行しているコンピューターとまったく同じ Wi-Fi 接続を使用してネットワークに接続されています。

どうすれば何が起こっているのかを知ることができますか?

4

2 に答える 2

3

サウンドごとに audio 要素のインスタンスを 1 つ作成したい場合があります。

var Sounds = {
    cat: new Audio('/sounds/meow.ogg'),
    bird: new Audio('/sounds/tweet.ogg')
};

次に、同じ要素を何度も再生できます。

function playSound(name) {
    Sounds[name].currentTime = 0;
    Sounds[name].play();
}

playSound('cat');

iOS がオブジェクトを破棄する場合Audio、サウンド ファイルをキャッシュ マニフェストにキャッシュできます。

CACHE MANIFEST
# 2012-08-09:v1.3

NETWORK:
*

CACHE:
/sounds/meow.ogg
/sounds/tweet.ogg
于 2012-07-30T10:03:35.107 に答える
2

ローディングをハンドラーの外に移動するのはどうですか。たとえば、グローバル/プリロードにしますか? 次に、ハンドラー内で play メソッドのみを呼び出します。

于 2012-07-30T09:55:48.983 に答える