iPad上的JS .play()播放错误的文件...建议?

时间:2011-07-26 02:37:26

标签: javascript ios web-applications audio

所以,我正在构建一个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),这导致没有音频播放

1 个答案:

答案 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 = ""; 

,然后设置正确的srcload()play()效果很好