我在Javascript中重绕音频时遇到了一些麻烦。我基本上都有一个倒计时,每当倒计时结束时都会发出哔哔声。
我尝试过使用;
var bip = new Audio("http://www.soundjay.com/button/beep-7.wav");
bip.play();
但它并没有每秒钟发出哔哔声,我猜测每秒都要加载一个新的声音。然后我尝试在外部加载声音并使用以下代码触发它。
bip.pause();
bip.currentTime = 0;
console.log(bip.currentTime);
bip.play();
但这只播放声音一次然后完全无法倒回它(控制台在第一次播放后记录0.19秒的时间显示这一点。)
这里有什么我想念的吗?
答案 0 :(得分:7)
在谷歌浏览器中,我注意到只有在同一个域中有音频文件时它才有效。如果音频文件在同一个域中,我没有问题。活动设置.currentTime
有效。
跨域:
var bip = new Audio("http://www.soundjay.com/button/beep-7.wav");
bip.play();
bip.currentTime; //0.10950099676847458
bip.currentTime = 0;
bip.currentTime; //0.10950099676847458
同域:
var bip = new Audio("beep-7.wav");
bip.play();
bip.currentTime; //0.10950099676847458
bip.currentTime = 0;
bip.currentTime; //0
我尝试了谷歌搜索一段时间,并没有找到关于此甚至任何讨论的规格。
答案 1 :(得分:3)
当我想要倒带时,我只需再次加载音频:
my_audio.load()
*顺便说一下,我还使用'canplay'的eventlistener来触发my_audio.play()。似乎这在android中是必要的,也许其他设备也是*
答案 2 :(得分:0)
为“整个shebang”提供更多dsdsdsdsd的回答和一些数字的数字
注意:在我的应用中,loc1
是一个假人,指的是歌曲的存储位置
// ... code before ...
tune = new Audio(loc1); // First, create audio event using js
// set up "song's over' event listener & action
tune.addEventListener('ended', function(){
tune.load(); //reload audio event (and reset currentTime!)
tune.play(); //play audio event for subsequent 'ended' events
},false);
tune.play(); // plays it the first time thru
// ... code after ...
我花了几天时间试图弄清楚我做错了什么,但现在一切正常......至少在桌面浏览器上......
答案 3 :(得分:0)
自Chrome版37.0.2062.120 m
起,@ Esailija描述的行为未发生变化。
我通过使用base64编码对音频数据进行编码来解决此问题,并使用Audio()
网址将数据提供给data:
。
测试代码:
snd = new Audio('data:audio/ogg;base64,[...base64 encoded data...]');
snd.onloadeddata = function() {
snd.currentTime = 0;
snd.play();
setTimeout(function() {
snd.currentTime = 0;
snd.play();
}, 200);
};
(我很惊讶没有关于此事的错误报告或参考资料......或者我的Google-fu不够强大。)