2012-02-17 16 views
11

sto usando Chrome e questo è il mio codice:HTML5 Audio - Il suono viene riprodotto solo una volta

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

Come mai il suono gioca la prima volta che clicco sul gioco. poi quando clicco di nuovo, si interrompe, come il codice va. ma il motivo rimane in pausa? voglio che suoni, poi quando clicco di nuovo su di esso, torno a 0 e gioco di nuovo come nel codice?

+0

ciao, hai trovato una soluzione? – Lloyd

+0

quale soluzione sta funzionando –

+0

La soluzione di Tom per aggiungere sound.load() ha funzionato per me – kronuus

risposta

3

provare questo .. in pratica, resettare l'attributo src dovrebbe ripristinare l'audio come desiderato.

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

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

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

    return false; 
}); 
+1

Grazie! questo funziona, ma ... sembra che invii una richiesta per l'mp3 ogni volta che cambi "src". Quindi è un po 'caro – Harry

+1

Non è costoso - è economico .. solo il primo clic attiva qualsiasi attività di rete ... i clic successivi accedono all'mp3 direttamente nella cache del disco locale - non c'è alcun costo .. vedi di persona in Chrome Dev Tools , Scheda Rete – Lloyd

+1

sì, ma ha ragione. ogni volta che si * cambia * lo src invierà una richiesta. – kr1

23

Ho avuto problemi simili si ripetono audio, ma è riuscito a risolverlo chiamando il metodo load() prima della chiamata play(). Prova questo:

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

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

    return false; 
}); 

Penso che questo è meglio di reimpostare l'attributo src per due motivi:

  1. mantiene il valore src nel contenuto della pagina, piuttosto che nelle JavaScript
  2. funziona quando si incorporano più elementi <source> di diversi formati audio:

+0

ha funzionato per me! Grazie! – kronuus

+1

Questa è una buona soluzione, ma vorrei aver capito meglio la causa del problema. '.load()' sembra eccessivo in base a [MDN] (https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement#Methods) e [WHATWG] (https: // html. spec.whatwg.org/multipage/media.html#loading-the-media-resource) descrizioni. Se emetto 'sound.error' dopo aver provato a' play() 'il messaggio è" impossibile inviare pacchetti audio per la decodifica ". Sembra un bug per me, ma tutto quello che ho trovato è qualcosa di molto approssimativo. '.load()' non è necessario per i file OGG. – Vince

0

sembra che per il momento l'attributo currentTime è di sola lettura (e nel 2011 ha ottenuto un wont-fix status)

tuttavia, dopo aver impostato src sul vostro audio-oggetto (di nuovo) - come anche proposto da @Lloyd - l'attributo currentTime diventa impostabile (almeno su una versione di Chrome corrente per linux (24.0.1312.69)).

questo significa che con l'aggiunta della linea di strano

audio.src = audio.src 

vostro esempio fa quello che si suppone.

in piena:

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

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

    return false; 
}); 

in quanto è sufficiente impostare il src una volta, si potrebbe desiderare di chiamare da qualche parte durante il processo di installazione.

0

è possibile utilizzare php per aggiungere una query alla fine dell'URL con time();

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

funziona per me.

Problemi correlati