2012-02-17 14 views
11

estoy usando Chrome y este es mi código:HTML5 Audio - El sonido sólo se reproduce una vez

<audio id="letter_audio" src="audio/bomb.mp3" type="audio/mp3" preload="auto"></audio> 

    $('.sound').live('click', function() { 

     var sound = $("#letter_audio")[0]; 

     sound.pause(); 
     sound.currentTime = 0; 
     sound.play(); 

     return false; 
    }); 

¿Cómo es que el sonido se reproduce la primera vez que haga clic en el juego. luego, cuando hago clic de nuevo, se detiene, como dice el código. pero el justs se queda en pausa? Quiero que se reproduzca, luego, cuando vuelva a hacer clic en él, vuelva a 0 y vuelva a jugar como en el código.

+0

hola, le parecieron una solución? – Lloyd

+0

qué solución es la solución de trabajo de Tom –

+0

añadir Sound.load() trabajó para mí – kronuus

Respuesta

3

probar esto .. básicamente, al restablecer el atributo src debe restablecer el audio si lo deseas.

$('.sound').live('click', function() { 

    var sound = $("#letter_audio")[0]; 

    sound.src = "audio/bomb.mp3"; 
    sound.play(); 

    return false; 
}); 
+1

Gracias! esto funciona, pero ... parece que está enviando una solicitud de mp3 cada vez que "cambias" src. Así que eso es un poco caro – Harry

+1

No es caro - es barato .. sólo el primer clic instiga a cualquier actividad de red .. clics posteriores acceden a los mp3 directamente en la memoria caché de disco local - no hay costo alguno .. ver por sí mismo en Chrome Herramientas de desarrollo , Pestaña de red – Lloyd

+1

sí, pero tiene razón. cada vez que * cambie * el src enviará una solicitud. – kr1

23

he tenido problemas similares que se repiten de audio, pero logró resolverlo llamando al método load() antes de la llamada play(). Prueba esto:

$('.sound').live('click', function() { 
    var sound = $("#letter_audio")[0]; 

    sound.load(); 
    sound.play(); 

    return false; 
}); 

Creo que esto es mejor que restablecer el atributo src por dos razones:

  1. que se mantenga el valor src en el contenido de la página, en lugar de en las JavaScript
  2. funciona cuando incrusta múltiples <source> elementos de diferentes formatos de audio:

    <audio id="letter_audio"> 
        <source src="audio/bomb.mp3" type="audio/mp3" preload="auto"/> 
        <source src="audio/bomb.ogg" type="audio/ogg" preload="auto"/> 
    </audio> 
    
+0

funcionó para mí! ¡Gracias! – kronuus

+1

Esta es una buena solución, pero me gustaría haber entendido mejor la causa del problema. '.load()' parece excesivo basado en [MDN] (https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement#Methods) y [WHATWG] (https: // html. descripciones de spec.whatwg.org/multipage/media.html#loading-the-media-resource). Si saco 'sound.error' después de intentar' play() ', el mensaje es" error al enviar el paquete de audio para la decodificación ". Eso me suena a error, pero todo lo que pude encontrar es algo muy poco relacionado. '.load()' no es necesario para los archivos OGG. – Vince

0

parece que por el momento el atributo horaActual está (y en 2011 tiene un wont-fix status) sin embargo

de sólo lectura, después de establecer src en el audio-objeto (de nuevo) - como también propuesto por @Lloyd - el atributo horaActual convierte ajustable (al menos en un cromo-versión actual de Linux (24.0.1312.69)).

esto significa añadiendo la línea extraña

audio.src = audio.src 

su ejemplo hace lo que se supone que es.

en su totalidad:

$('.sound').live('click', function() { 

    var sound = $("#letter_audio")[0]; 
    sound.src = sound.src; 
    sound.pause(); 
    sound.currentTime = 0; 
    sound.play(); 

    return false; 
}); 

ya que es suficiente establecer el src vez, es posible que desee llamar en algún lugar durante el proceso de instalación.

0

se puede usar PHP para agregar una consulta al final de la URL con el tiempo();

<source src="URLtoTrack.mp3?<?php echo time(); ?>" />

funciona para mí.

Cuestiones relacionadas