2010-12-14 59 views
11

J'implémente des effets sonores dans l'audio HTML5, mais après un certain temps, il arrête simplement de jouer de l'audio. Le type de fichier est correct car il commence bien mais semble abandonner.HTML5 Audio joue au hasard

var sound = new Audio(url); 
function play() {   
    sound.play(); 
} 

Y a-t-il une meilleure façon de faire cela afin de jouer régulièrement du son?

Voici un lien vers mon implémentation. Facile à reproduire en appuyant sur la barre d'espace beaucoup jusqu'à ce qu'il abandonne finalement (également tirer sur les lumières pour les sons ajoutés). http://craftyjs.com/elevatoraction/

Cela se produit pour moi dans la dernière version de Chrome (8,0)

Edit: Je l'ai fait comme Gaurav suggéré et seulement joué la même instance de chaque fichier son, mais le même genre de problèmes sont présents . Il arrêtera arbitrairement de jouer.

Edit 2: Je viens de remarquer que chaque fois que j'essaie de jouer le son, le networkState est toujours 1 qui, selon this signifie qu'il n'a pas complètement chargé. C'est étrange car il joue encore parfois, et même quand il joue le networkState est toujours 1

+1

Vous devez spécifier la version du navigateur (s) et la version du système d'exploitation (s) que vous avez reproduit le problème. –

Répondre

6

Ne pas créer un nouvel objet audio chaque fois que vous voulez jouer un son, réutiliser la même ressource.

var sound1 = new Audio(url); 
function playSound1() { 
    sound1.play(); 
} 

Je pense que cela est lié au bug http://code.google.com/p/chromium/issues/detail?id=57070

+0

Oh, donc c'est un bug. Comment pourrais-je jouer les mêmes sons en même temps? – Louis

+0

Eh bien, vous devez utiliser plusieurs objets audio. Et vous devrez les gérer afin de créer le nombre minimum dont vous avez réellement besoin. Jusqu'à ce que le bug soit corrigé, de toute façon. – Gaurav

+0

Ça a l'air bien. Cela signifie-t-il que je dois créer environ 2 ou 3 objets audio de chaque fichier et vérifier ceux qui sont en train de jouer? J'ai du mal à obtenir une bonne documentation pour être honnête. – Louis