为什么我的音频没有倒带

Why isn't my audio rewinding?

本文关键字:倒带 音频 我的 为什么      更新时间:2023-09-26

我在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 秒的时间)。

我在这里缺少什么吗?

在谷歌浏览器中,我注意到它仅在音频文件位于同一域时才有效。如果音频文件位于同一域中,我没有问题。事件设置.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

我尝试了一段时间的谷歌搜索,在规格中找不到任何关于这个甚至任何讨论的内容。

当我想倒带时,我只需再次加载音频:

my_audio.load()

*顺便说一句,我还使用"canplay"的事件侦听器来触发my_audio.play()。这似乎在安卓中是必要的,也许其他设备也是如此*

从Chrome版本37.0.2062.120 m开始,@Esailija描述的行为没有改变。

我通过以 base64 编码对音频数据进行编码并使用 data: URL 将数据馈送到Audio()来解决此问题。

测试代码:

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);
};

(我很惊讶没有关于这个问题的错误报告或参考......或者也许我的谷歌赋不够强大。

为了进一步回答dsdsdsddsdsddsdds

注意:在我的应用程序中,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 ...

花了几天又几天的时间试图弄清楚我做错了什么,但现在一切正常......至少在桌面浏览器上...