2010-09-17 5 views
0

J'ai récemment ajouté de l'audio à mon jeu chargé sous la classe "Song" du framework XNA.XNA MediaPlayer.Volume setter étant extrêmement lent

Tout semblait fonctionner correctement, jusqu'à ce que je décide d'ajouter la possibilité de changer le volume de la chanson, en utilisant le set MediaPlayer.Volume.

Cependant, quand j'essaie de changer le volume pour la première fois, il exécute vraiment lentement (comme 3 à 4 secondes, ce qui est assez pour un changement de volume). Après, quand j'essaie de changer à nouveau le volume, le volume change instantanément.

Fondamentalement, j'ai trois choix de niveau de volume: élevé, moyen et bas ... Donc mon problème est probablement pas parce que je change le niveau de volume trop souvent ou trop rapidement. Je voudrais seulement savoir si l'un d'entre vous sait quand MediaPlayer.Volume peut prendre plus de temps à courir, donc je peux vérifier où se situe mon problème.

Répondre

2

Si Google vous trouve, il y a beaucoup de problèmes de performances avec MediaPlayer. Et souvent, ils dépendent du système que vous utilisez. Cela est dû à Windows Media Player en arrière-plan (sous Windows).

Voici quelques façons d'atténuer les problèmes de performance:

  • Ne jamais lire les valeurs de MediaPlayer (par exemple: Volume - ce qui inclut l'utilisation += pour le définir). Stockez vous-même la valeur réelle et ne l'affectez jamais. En raison de ce qui précède, utilisez l'événement de changement d'état pour recevoir les notifications de changement d'état.
  • Placez l'utilisation de la classe MediaPlayer sur un thread séparé (ThreadPool est suffisant sous Windows) - cela résout les cas où il bloque simplement votre thread principal (la plupart d'entre eux, mais sur quelques systèmes, il peut apparemment bloquer tout le processus ou le système entier).
  • Le seul moyen sûr de résoudre les problèmes consiste à ne pas utiliser MediaPlayer. Vous pouvez mettre votre musique dans XACT et la compresser (je pense que vous pouvez également utiliser SoundEffect).

Si je devais deviner (et je le fais) - je dirais que déplacer vos changements de volume à un autre thread résoudra votre problème.

+0

Merci beaucoup pour votre réponse! Je change définitivement pour XACT à la place. –

+0

Sachez simplement que cela supprime le traitement automatique de la capacité de l'utilisateur à jouer sa propre musique sur la Xbox. –

Questions connexes