0

私はそのようなサウンドを再生しているjavascriptを持っています...

var audio = document.createElement('audio');
audio.src = 'folder/test.wav';
audio.play();

何を言っているかわかるように、間隔を空けて複数のファイルを再生する必要があります。iOS では setTimeout を使用できません。別の関数でそれを試してみましたが、setTimeout を使用すると、2 番目のオーディオ クリップの音が出ません。他のアイデアはありますか?

編集

私はこの機能を持っています:

function playaudio(file) {
    var audio = document.createElement('audio');
    audio.src = 'folder/'+file+'.wav';
    audio.play();
}

次のように呼び出します。

playaudio("test1");
playaudio("test2");

test1 と test1 の間で一時停止して、一緒にプレイしないようにするだけです。何か案は?

4

2 に答える 2

1

iOS ネイティブ コードを使用して、Javascript メソッド呼び出しをトリガーできます。

[webViewObject stringByEvaluatingJavaScriptFromString:@"playNextSound();"];

playNextSoundUIWebView によって読み込まれたページで定義された JS メソッドはどこにありますか。また、setTimeout の代わりに、ネイティブ タイマーを使用NSTimerしてオーディオ再生の間隔を空けることができます。

于 2013-09-11T22:53:59.717 に答える
0

setTimeout()iOSで動作します。この問題は、ブラウザの処理方法<audio><video>コンテンツに関係している可能性があります。

iOS は、ユーザー入力によってトリガーされた場合にのみコンテンツを再生<audio>します。<video>あなたはaudio.play()、最初のクリップの最初の呼び出しが正常に機能すると述べているので、ユーザーがトリガーしたものだと思います。問題は、内部の関数がsetTimeout() コール スタックをクリアするため、クリック イベントが先行していても、ブラウザによってユーザー主導と見なされなくなる可能性があることです。

最も簡単な解決策は、複数のオーディオ クリップを 1 つに結合することです。また、開始時に無音で遅延させたいクリップをパディングし、クリック イベントの直後にそれらをすべて再生することもできます (ターゲットにしている OS バージョンが一度に複数のオーディオ オブジェクトをサポートしていると仮定します)。

于 2013-09-11T22:27:36.017 に答える