为什么我不能使用HTML5音频标签多次播放声音?

时间:2012-01-04 20:10:43

标签: javascript html5 audio html5-audio

这就是“存储”声音的方式:

<audio id = "hammer" src="res/sounds/Building/hammer.wav"></audio>

在实际游戏中(我使用声音),我用它来播放声音:

   function playSound(soundid)
   {
        document.getElementById(soundid).currentTime = 0;
        document.getElementById(soundid).play();
   }

但声音只是第一次播放,而且再也不会播放! 我尝试将控制台中的“currentTime”重置为0,但我确实得到了这个:

>document.getElementById("hammer").currentTime = 0
0
>document.getElementById("hammer").currentTime
0.340...

为什么会发生这种情况,我该如何解决?

4 个答案:

答案 0 :(得分:24)

请参阅this slide以及Evan Wallace and Justin Ardini's presentation on html5 game dev的前三张幻灯片。

为了制作一些精彩游戏的所有资源,他们的一部分话题是:http://madebyevan.com/gamedevclass/

  

截至目前,音频仍无法在所有浏览器中保持一致:

     
      
  • 必须在Chrome中重新加载元素,否则它只会播放一次
  •   
  • 不得在Firefox中重新加载元素,否则会有延迟
  •   
function playSoundEvent() {
  if (window.chrome) elems[index].load()
  elems[index].play()
  index = (index + 1) % elems.length
}

答案 1 :(得分:5)

我最近用html5解决了这个问题。到处都工作,除了野生动物园。 在调用play()之前使用load()解决了这个问题。当事件处理程序触发声音时,它还有助于确保声音效果不会与重问题重叠。

Here what I used
<audio id="sound-one" preload="auto">
    <source src="http://myurl/foo.mp3"></source>
    <source src="http://myurl/foo.ogg"></source>
</audio>


<a href="#" id="navigation-id">click here</a>  



Jquery
$("#navigation-id") //this attached is to an element on the page
.mouseover(function() {
    sound-one.load();                               
    sound-one.play();
    });

答案 2 :(得分:1)

对于将来绊倒这篇文章的人来说,音频标签实际上并不是制作游戏音频的好方法。

我强烈建议您花时间学习WebAudio API

答案 3 :(得分:0)

在我用HTML5开发钢琴时遇到同样的问题几个月前。当一次又一次按下一个键时,我不得不停下来,倒回并在每次按键时播放音频。我使用了这个问题中编写的相同代码,该代码在Firefox和Safari中有效,但在Chrome中没有。在Chrome中它不再播放。最后,我不得不修改代码以使其工作。为事件onseeked添加了一个侦听器,然后设置currentTime = 0并在事件处理程序中调用play。这对我有用。同样地,我必须等待一个动作的事件,然后在许多地方进行下一个动作。这是Chrome的旧版本。后来我发现即使某些版本的浏览器也支持Audio,每个版本支持的方式也略有不同。如果我们只是放一个音频标签并播放音频,这种差异将不可见,但是当我们尝试使用Javascript控制音频时会遇到这种差异。无论如何,它都是关于旧版本的浏览器,它在所有最新版本中都要好得多。所以请检查最新版本的Chrome(即使我的钢琴在Chrome 10中工作,但没有修改代码),关于音频格式,我建议你保留音频的mp3和ogg文件而不是单个wav文件。

相关问题