为什么我的音频没有倒带?

时间:2012-06-12 20:33:48

标签: javascript html audio html5-audio

我在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秒的时间显示这一点。)

这里有什么我想念的吗?

4 个答案:

答案 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不够强大。)