0

我有一段javascript,我正在播放这样的声音......

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

我需要播放多个分开的文件,这样你就知道它在说什么。iOS 不允许您使用 setTimeout。我在单独的函数中尝试过,但在使用 setTimeout 时它无法发出第二个音频剪辑。还有其他想法吗?

编辑

我有这个功能:

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 Native 代码来触发 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() 清除了调用堆栈,因此它们可能不再被浏览器认为是用户驱动的,即使它们之前有一个点击事件。

最简单的解决方案是将多个音频片段合并为一个。您还可以在开始时用静音填充您想要延迟的剪辑,并在单击事件后立即播放它们(假设您的目标操作系统版本一次支持多个音频对象)

于 2013-09-11T22:27:36.017 回答