2009-05-26 6 views
1

J'essaie d'utiliser un grand nombre d'échantillons sonores courts dans un jeu que je crée dans Silverlight 2. Les échantillons durent moins de 2 secondes.Utilisation de Silverlight 2 pour la mise en cache audio courte

Je préférerais charger tous les échantillons audio sur la toile pendant l'initualisation. J'ai ajouté l'élément média à la toile et une liste générique pour le gérer. Jusqu'à présent, cela semble fonctionner.

Lorsque je joue l'échantillon la première fois, il joue parfaitement. S'il a fini de jouer et que je veux réutiliser le même élément, il coupe la première partie du son. Pour rejouer l'échantillon, j'arrête et je joue de l'élément média.

Existe-t-il une autre méthode que je devrais utiliser les échantillons afin que l'audio ne soit pas coupé et que de bonnes performances soient obtenues?

Répondre

1

De même, il est probablement judicieux de vous assurer que tous vos échantillons audio sont initialement transférés au client. Selon la façon dont vous l'avez configuré, il est possible que les MediaElements utilisent leur fonctionnalité de téléchargement progressif pour obtenir les fichiers multimédias du serveur. Bien qu'il n'y ait rien de mal à cela (la mise en cache du navigateur devrait vous aider après le téléchargement initial), cela signifie que vous devez gérer le cache du navigateur, et qu'il y a des problèmes potentiels.

étapes possibles pour essayer:

  1. Marquer vos fichiers audio "Contenu". Cela les amènera dans le fichier .xap.
  2. Chargez vos fichiers audio dans MemoryStreams (voir la méthode Application.GetResourceStream) et appelez MediaElement.SetSource().

HTH, Erik

+0

Dans Silverlight 3, je les ai définis sur "Ressource" et utilisé les flux de mémoire. Ce commentaire a beaucoup aidé. – BenMaddox

1

Quelques commentaires:

De MSDN: Essayez de limiter le nombre d'objets MediaElement que vous avez dans votre application à la fois. Si vous disposez de plus d'une centaine d'objets MediaElement dans votre arborescence d'applications, qu'ils soient en cours de lecture simultanée ou non, les événements MediaFailed peuvent être déclenchés. La façon de contourner ce problème consiste à ajouter des objets MediaElement à l'arbre lorsqu'ils sont nécessaires et à les supprimer lorsqu'ils ne le sont pas.

Vous pouvez essayer de chercher le début de l'échantillon pour réinitialiser le point en cours de lecture avant de le réutiliser avec:

mediaelement.Position = new TimeSpan(); 

Voir aussi MSDNs MediaElement.Position.

0

Un techique vous pouvez utiliser, bien que je ne suis pas sûr de savoir comment cela va fonctionner dans Silverlight, est de créer un grand fichier avec tous vos échantillons Réunis (probablement avec un demi-seconde ou plus de silence entre chacun). Déterminez le code temporel pour chaque échantillon et recherchez l'élément média à cette position et jouez. Vous n'aurez besoin que d'autant d'éléments multimédias que de sons simultanés que vous voulez jouer.

+0

Je n'ai pas vu cette approche mentionnée auparavant. Je vais regarder dedans. – BenMaddox

Questions connexes