所以,我正在构建一个Web应用程序,其中包含一个带有文本的div,这些文本会根据各种用户操作进行更改(它会逐步执行一系列文本)。我正在尝试为它添加音频,所以我创建了另一个数组,声音文件位于适当的位置:
var phrases=['Please hand me the awl.','etc1','etc2','etc3'];
var phrasesAudio=['awl.mp3','etc1.mp3','etc2.mp3','etc3.mp3'];
在每个动作完成时,一个'计数器'变量递增,每个数组在该计数器上查找该对象
var audio = document.createElement("audio"),
canPlayMP3 = (typeof audio.canPlayType === "function" &&
audio.canPlayType("audio/mpeg") !== "");
function onAction(){
correct++;
document.getElementById('speech').innerHTML=phrases[correct];
if(canPlayMP3){
snd = new Audio(phrasesAudio[correct]);
}
else{
snd = new Audio(phrasesAudioOgg[correct]);
}
snd.play();
}
(文字取代了div的HTML和我使用.play()为音频对象)...平时工作好(和总是做一个“真正的”浏览器),但在iPad上(实际的目标设备)经过几次成功的迭代后,TEXT继续准确地进行,但是AUDIO会打嗝并重复声音文件一次或多次。我加了一些记录和寻找有它报告说,这是玩screw.mp3
(只是举个例子,没有特别的文件是或多或少容易出错),但实际上它起着screwdriver.mp3
(在以前的文件,如果有,音频总是滞后,不导致错误)......正因为如此,我认为这个问题是我使用.play(的)......所以我尝试设置snd=null;
每个音之间,但没有改变......有关如何进行的任何建议?这是我第一次使用音频元素,所以任何建议都值得赞赏。感谢。
编辑:我也尝试使用snd.src设置文件(基于https://wiki.mozilla.org/Audio_Data_API),这导致没有音频播放
答案 0 :(得分:1)
对于iPad,您需要在snd.load()
之前致电snd.play()
- 否则您将获得“奇怪”行为......
了解一些见解:
http://jnjnjn.com/187/playing-audio-on-the-ipad-with-html5-and-javascript/
Autoplay audio files on an iPad with HTML5
编辑 - 根据OP的评论:
在这里https://developer.mozilla.org/En/Using_audio_and_video_in_Firefox,您可以找到关于使用
停止当前播放的媒体的提示var mediaElement = document.getElementById("myMediaElementID");
mediaElement.pause();
mediaElement.src = "";
,然后设置正确的src
,load()
,play()
效果很好