2017-10-19 15 views
0

Ich schreibe ein sehr einfaches Spiel in JavaScript und ich bemerke, dass es eine Verzögerung von 0,5 Sekunden von der Zeit, die ich die "Play" -Funktion nennen, bis zu dem Zeitpunkt der Audio-Wiedergabe ist. Ist das normal?Verzögerung in JavaScript Audiowiedergabe

Dies ist der Code, den ich habe:

var audio = new Audio("games/aventura4/sfx/hit.wav"); 
audio.play(); 

ich auch nur ein einziges Mal versucht haben, die Audio-Variable zu initialisieren, und dann audio.play gerade() aufrufen (nach audio.currentTime = 0, natürlich tun) und die Verzögerung ist immer noch da!

Mache ich etwas falsch? (Ich versuche das auf Safari, btw).

Bearbeiten: nach dem Experimentieren mit diesem scheint es, dass das Problem nur auf Safari ausgeführt wird. Es gibt keine Verzögerung bei Chrome. Aber das lässt immer noch die Frage offen, warum es in Safari passiert?!?!

Edit 2: es scheint, könnte es auf diese andere Frage in Beziehung gesetzt werden: HTML5 Audio tag on Safari has a delay

+0

ich bin nicht sicher, aber das könnte sein, weil der Pufferung ... – void

+0

überprüfen Sie die Registerkarte Netzwerk und sehen, wenn die WAV-Datei heruntergeladen Antwort. .. Holen Sie es vom Server dauert möglicherweise Zeit .. versuchen, es auf Seite laden –

Antwort

1

Wenn schlagen Sie die Taste „Play“ (ob Sie es manuell oder in Code tun) ein Netzwerk-Anforderung ausgegeben zu erhalten das Audio. Während es starten kann, bevor die vollständige Datei heruntergeladen wurde, muss es eine vernünftige Menge in den Puffer herunterladen, bevor es starten kann - andernfalls würde es schlecht stottern, wenn es versucht zu spielen.

Sie können an den Browser Hinweis, dass Sie das Audio möchten mit vorinstalliertem:

<audio preload="auto"> 

Aber das ist einfach ein Hinweis, es wird nichts garantieren. Wenn Sie dieses Attribut zu großzügig verwenden, kann es kontraproduktiv sein.

Mit Ihrer JavaScript-Lösung können Sie das Audio früher instanziieren. Es gibt ein oncanplaythrough Ereignis, das ausgelöst wird, wenn es genug gepuffert hat, um zu spielen.

+0

Danke! Ich habe das versucht, aber ich sehe die gleiche Verzögerung. Nach ein paar Experimenten denke ich, das Problem ist Safari! Alles funktioniert ohne Verzögerung in Chrome ... –

0

Ich erlebe das nicht, aber ich strukturiere meine ein wenig anders. In meiner HTML-Datei habe ich ein Audio-Tag:

Ich würde dann eine JavaScript-Funktion erstellen, um diesen Sound zu nennen.

function playHitSound() { 
    document.getElementById("hitSound").play(); 
} 

und rufen Sie diese Funktion, wenn ich den Sound spielen möchte. Funktioniert für mich ohne jede Art von Verzögerung.

+0

Danke! Ich habe das versucht, aber ich sehe die gleiche Verzögerung.Nach ein paar Experimenten denke ich, das Problem ist Safari! Alles funktioniert ohne Verzögerung in Chrome ... –

0

Es Verzögerung ist die Datei in immer von einer Anforderung & bis zum Abschluss warten, um die Datei zu bekommen .... Eine Arbeit um würde die WAV-Datei auf Seite zu laden, ruft von Ajax-Aufruf ... Cache, der

$.ajax({ 
      url: 'games/aventura4/sfx/hit.wav', 
      cache: true,   
      success: function(data) {    
       $('audio #source').attr('src', data); //store it in some ID 
      } 

Verwenden Sie die #source .play()

+0

Danke! Ich würde es vorziehen, nichts zu verwenden, das nicht Javascript oder HTML ist. Benutze nie Ajax, also bleib ich lieber weg :) –