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

cor*_*zza 25 javascript audio html5 html5-audio

这就是"存储"声音的方式:

<audio id = "hammer" src="res/sounds/Building/hammer.wav"></audio>
Run Code Online (Sandbox Code Playgroud)

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

   function playSound(soundid)
   {
        document.getElementById(soundid).currentTime = 0;
        document.getElementById(soundid).play();
   }
Run Code Online (Sandbox Code Playgroud)

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

>document.getElementById("hammer").currentTime = 0
0
>document.getElementById("hammer").currentTime
0.340...
Run Code Online (Sandbox Code Playgroud)

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

DTr*_*ejo 24

请参阅此幻灯片以及前面三张Evan Wallace和Justin Ardini关于html5游戏开发的演示文稿.

对于制作一些精彩游戏的所有资源,他们的谈话的一部分:http://madebyevan.com/gamedevclass/

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

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

  • 它为什么这样工作?我需要重新下载整个音频文件以便第二次播放,这不是一点点迟钝吗? (3认同)

Jay*_*Jay 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();
    });
Run Code Online (Sandbox Code Playgroud)