2012-01-04 18 views
25

Esta es la forma en que el sonido se "almacena":¿Por qué no puedo reproducir sonidos más de una vez con la etiqueta de audio HTML5?

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

En el juego real (que utilizo sonidos para), Lo utilizo para reproducir el sonido:

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

Pero se reproduce el sonido solo la primera vez, y nunca más! He intentado restablecer el "horaActual" en la consola a 0, pero literalmente sale esto:

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

por qué sucede esto, ¿cómo puedo solucionarlo?

+0

¿Quizás es el archivo wav? Esto funciona bien para mí en Chrome: http://jsfiddle.net/xWFuq/. (No importa el archivo de sonido, fue el más corto que pude encontrar.) – pimvdb

+0

Pero ¿cómo puede ser eso? De todos modos, tal vez sea culpa de mi computadora, lo ejecutaré en un servidor y lo probaré en otro ... – corazza

+0

No lo sé; a veces, mi Chrome se niega de nuevo a jugar '

Respuesta

24

Consulte this slide y las tres diapositivas anteriores de Evan Wallace and Justin Ardini's presentation on html5 game dev.

Para todos los recursos para hacer algunos juegos impresionantes, parte de su charla: http://madebyevan.com/gamedevclass/

audio sigue sin funcionar consistentemente en todos los navegadores, a partir de ahora:

  • Un elemento se debe volver a cargar en Chrome o solo se reproducirá una vez
  • Un elemento no se debe volver a cargar en Firefox o habrá un retraso
function playSoundEvent() { 
    if (window.chrome) elems[index].load() 
    elems[index].play() 
    index = (index + 1) % elems.length 
} 
+0

¡Gracias por la excelente información! Voy a probar esa función y probablemente acepte tu respuesta. – corazza

+1

(No lo he probado, pero estos tipos son jefes totales, así que esperaría que sus cosas fueran correctas :) – DTrejo

+0

¿Qué pasa con Safari? – DanC

0

Unos meses antes me enfrentaba al mismo problema al desarrollar un Piano en HTML5. Cuando presioné una tecla una y otra vez, tuve que parar, rebobinar y reproducir el audio en cada pulsación de tecla. Usé el mismo código escrito en esta pregunta que funcionaba en Firefox y Safari, pero no en Chrome. En Chrome, no volvió a jugar. Finalmente tuve que modificar el código para que funcione. Se agregó un oyente para el evento onseeked, luego se estableció currentTime = 0 y en el controlador de eventos invocado play. Esto funcionó para mí. De manera similar, tuve que esperar el evento de una acción antes de dar la siguiente acción en muchos lugares. Era una versión antigua de Chrome. Más tarde descubrí que incluso algunas versiones de navegadores admiten audio, la forma en que cada uno admite es ligeramente diferente. Esta diferencia no será visible si simplemente ponemos una etiqueta de audio y reproducimos el audio, pero lo experimentaremos cuando intentemos controlar el audio usando Javascript. De todos modos, todo se trata de versiones anteriores de navegadores, es mucho mejor en todas las versiones más recientes. Así que por favor revisen la última versión de Chrome (incluso mi piano funcionó en Chrome 10 sin la modificación del código) y con respecto al formato de audio, les sugiero que guarden los archivos mp3 y ogg de su audio en lugar de un solo archivo wav.

4

Tuve este problema recientemente con un html5. Trabajó en todas partes excepto safari. Usando load() antes de llamar a play() resolvió este problema. También ayuda a garantizar que los efectos de sonido no se superpongan con los pesados ​​clickers cuando los manejadores de eventos activan sonidos.

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

Para cualquier persona que tropiece con esta publicación en el futuro, la etiqueta de audio realmente no es una gran manera de hacer audio de juegos.

Recomiendo encarecidamente tomarse el tiempo para aprender el WebAudio API en su lugar.

Cuestiones relacionadas