2010-09-11 3 views
0

Je fais un jeu dans Silverlight, et j'aimerais lui donner de la musique de fond. Et en particulier je voudrais éviter d'inclure le MP3 dans le téléchargement initial (le XAP) - de sorte que l'utilisateur puisse commencer à jouer avant que la musique ait fini de télécharger.Musique de fond en tampon dans Silverlight

Comment puis-je:

  • commence Dynamiquement la lecture d'un fichier MP3 à partir d'une URL donnée
  • voir le fichier MP3 commencer à jouer avant la fin du téléchargement
  • Démarrer le téléchargement du fichier MP3 sans l'avoir jouer (ex: précharger il)
  • de telle sorte que le fichier MP3 est mis en cache si l'utilisateur retourne à la page plus tard

(Je suppose que toutes ces choses sont possibles?)

Je n'utilise pas vraiment XAML, d'ailleurs - donc une réponse basée sur le code est appréciée.

Répondre

1

System.Windows.Controls.MediaElement est le contrôle à utiliser, évidemment. Il doit être ajouté à l'arborescence visuelle Silverlight pour fonctionner correctement.

Voici le code de pré-charger une chanson.

mediaElement.AutoPlay = false; 
mediaElement.Source = new Uri("/content/something.mp3", UriKind.Relative); 

(La musique est mieux ajouté au projet et défini avec Build Action = Aucun, et Copier vers Output Directory = Copier si plus récent Cela placer à côté du XAP.)

Cela permet au morceau de commencer à se charger en arrière-plan sans jouer. Pour vérifier quand le préchargement est terminé, accrochez mediaElement.DownloadProgressChanged et vérifiez mediaElement.DownloadProgress == 1. Hooking MediaFailed vous dira si le téléchargement échoue.

La chanson peut être démarrée sans attendre la fin du téléchargement. Et MediaElement mettra correctement en cache une chanson téléchargée entièrement dans le cache du navigateur.

0

L'objet MediaElement prend en charge le téléchargement progressif de fichiers MP3. Vous pouvez mettre des fichiers MP3 sur votre serveur et diffuser en cas de besoin. Si vous souhaitez plus de contrôle sur le stockage, vous pouvez implémenter votre propre protocole de diffusion en implémentant MediaStreamSource.