2012-06-12 14 views
5

Ich habe ein paar Probleme beim Zurückspulen von Audio in Javascript. Ich habe im Grunde einen Countdown, der jede Sekunde piepst, wenn es gegen Ende des Countdowns ankommt.Warum wird mein Audio nicht zurückgespult?

Ich versuchte mit;

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

aber es piept nicht jede Sekunde, die ich hat etwas zu raten einen neuen Sound in jeder Sekunde zu tun laden withit haben. Ich habe dann versucht, den Sound extern zu laden und mit dem folgenden Code auszulösen.

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

aber das spielt nur den Ton einmal dann nicht vollständig, um zurückzuzuspulen (dies wird von der Konsole gezeigt, die eine Zeit von 0,19 Sekunden nach dem ersten Durchspielen der Anmeldung).

Gibt es etwas, das mir hier fehlt?

Antwort

7

In Google Chrome habe ich festgestellt, dass es nur funktioniert, wenn Sie die Audiodatei in derselben Domäne haben. Ich habe keine Probleme, wenn die Audiodatei in derselben Domäne ist. Ereigniseinstellung funktioniert.

Quer Domain:

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 

Same-Domain:

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

Ich habe versucht, für eine Weile googeln und nichts in Spezifikationen über diese oder sogar jede Diskussion finden kann.

+0

Was für eine seltsame Fehler.Dies scheint es zu beheben, aber danke vielmals :) Ich würde es auf der gleichen Domain schließlich sowieso hosten, aber ich dachte, ich würde es in einem JSfiddle zuerst versuchen, um Zeit zu sparen lol. –

+0

[this] (http://stackoverflow.com/questions/6273975/audio-tags-rewind) sagt, dass das Setzen von currentTime fehleranfällig ist. – dsdsdsdsd

3

wenn ich zurückspulen möchte ich einfach die Audio-laden wieder:

my_audio.load() 

* btw, ich benutze auch einen Eventlistener für 'canplay' die my_audio.play auszulösen(). Es scheint, dass dies in android notwendig ist, und vielleicht auch andere Geräte *

0

Um dsdsdsdsd Antwort mit einem bisschen Malen nach Zahlen für den „ganzen Kram“

Es wäre weiter bemerkt: In meiner app, loc1 ist ein Dummy, dass ich das zu dem Song gespeichert Standort

// ... 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 ... 

verbrachte Tage und Tage versucht, herauszufinden, was ich tat, falsch, aber es funktioniert gut jetzt ... zumindest auf dem Desktop-Browser verweist ..

0

Ab der Chrome-Version wurde das von @Esailija beschriebene Verhalten nicht geändert.

Ich umgehen dieses Problem, indem Sie die Audiodaten in Base64-Codierung codieren und die Daten an Audio() mit data: URL einspeisen.

Prüfregeln:

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

(Ich bin überrascht, dass es keine Fehlermeldungen oder Hinweise zu diesem Thema sind ... oder vielleicht mein Google-Fu ist nicht stark genug.)

Verwandte Themen