2012-06-12 18 views
5

Sto riscontrando un po 'di problemi durante il riavvolgimento dell'audio in Javascript. Fondamentalmente ho un conto alla rovescia che emette un segnale acustico ogni secondo mentre si avvicina alla fine del conto alla rovescia.Perché il mio audio non si riavvolge?

Ho provato a utilizzare;

var bip = new Audio("http://www.soundjay.com/button/beep-7.wav"); 
bip.play(); 

ma non ha beep ogni secondo che sto cercando di indovinare ha qualcosa a che fare withit dover caricare un nuovo suono ogni secondo. Ho quindi provato a caricare il suono esternamente e ad attivarlo con il seguente codice.

bip.pause(); 
bip.currentTime = 0; 
console.log(bip.currentTime); 
bip.play(); 

ma questo gioca solo il suono una volta poi completamente non riesce a riavvolgere (questo è dimostrato dalla console accedendo un tempo di 0,19 secondi dopo il primo playthrough).

C'è qualcosa che mi manca qui?

risposta

7

In google chrome ho notato che funziona solo se si ha il file audio nello stesso dominio. Non ho problemi se il file audio si trova nello stesso dominio. L'impostazione evento .currentTime funziona.

tra domini:

var bip = new Audio("http://www.soundjay.com/button/beep-7.wav"); 
bip.play(); 
bip.currentTime; //0.10950099676847458 
bip.currentTime = 0; 
bip.currentTime; //0.10950099676847458 

con lo stesso dominio:

var bip = new Audio("beep-7.wav"); 
bip.play(); 
bip.currentTime; //0.10950099676847458 
bip.currentTime = 0; 
bip.currentTime; //0 

ho provato googling per un po 'e non trovava nulla in specifiche su questo o anche qualsiasi discussione.

+0

Che strana bug.Questo sembra risolvere il problema anche se così grazie mille :) Stavo per ospitarlo sullo stesso dominio alla fine comunque, ma ho pensato di provarlo prima in un JSfiddle per risparmiare tempo lol. –

+0

[this] (http://stackoverflow.com/questions/6273975/audio-tags-rewind) dice che l'impostazione currentTime è soggetta a errori. – dsdsdsdsd

3

quando voglio riavvolgere ho semplicemente caricare nuovamente l'audio:

my_audio.load() 

* btw, ho anche utilizzare un EventListener per 'canplay' per attivare la my_audio.play(). Sembra che ciò sia necessario in Android, e forse altri dispositivi anche *

0

ad ulteriore risposta di dsdsdsdsd con un po 'di vernice-da-numeri per la "tutta la baracca"

NOTA: Nella mia app, loc1 è un manichino che si riferisce alla posizione memorizzata della canzone

// ... code before ... 

tune = new Audio(loc1); // First, create audio event using js 

// set up "song's over' event listener & action 
tune.addEventListener('ended', function(){ 
tune.load(); //reload audio event (and reset currentTime!) 
tune.play(); //play audio event for subsequent 'ended' events 
},false); 

tune.play();  // plays it the first time thru 

// ... code after ... 

ho passato giorni e giorni a cercare di capire quello che stavo facendo male, ma tutto funziona bene ora ... almeno sui browser desktop ..

0

A partire dalla versione di Chrome , il comportamento descritto da @Esailija non è stato modificato.

Per risolvere questo problema codificare i dati audio nella codifica base64 e inviare i dati a Audio() utilizzando l'URL data:.

codice

prova:

snd = new Audio('data:audio/ogg;base64,[...base64 encoded data...]'); 
snd.onloadeddata = function() { 
    snd.currentTime = 0; 
    snd.play(); 
    setTimeout(function() { 
    snd.currentTime = 0; 
    snd.play(); 
    }, 200); 
}; 

(Mi sorprende che non ci sono segnalazioni di bug o riferimenti su questa materia ... o forse il mio Google-fu non è abbastanza forte.)

Problemi correlati