JS .play()在iPad上播放错误的文件…

JS .play() on iPad plays wrong file...suggestions?

本文关键字:错误 播放 文件 iPad play JS      更新时间:2023-09-26

因此,我正在构建一个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(先前的文件,如果有错误,音频总是lag,从不lead)…因此,我认为问题出在我使用。play()……所以我试着在每个声音之间设置snd=null;,但没有任何改变…有什么建议吗?这是我第一次使用音频元素,所以任何建议都很感激。谢谢。

edit:我也试过用snd设置文件。src(基于https://wiki.mozilla.org/Audio_Data_API),这导致没有音频播放

对于iPad,你需要在snd.play()之前调用snd.load() -否则你会得到"奇怪"的行为…

见:
http://jnjnjn.com/187/playing-audio-on-the-ipad-with-html5-and-javascript/
使用HTML5在iPad上自动播放音频文件

编辑-根据OP的评论:

在这里https://developer.mozilla.org/En/Using_audio_and_video_in_Firefox你可以找到一个提示,如何使用

停止正在播放的媒体片段
var mediaElement = document.getElementById("myMediaElementID"); 
mediaElement.pause(); 
mediaElement.src = ""; 

和,然后设置正确的src, load(), play()效果很好