1)使用MediaElement
音乐文件:XAP程序安装包内的文件,隔离存储区内的文件,互联网络上的文件。
注意事项:播放隔离存储区内的文件时,必须设置AutoPlay属性为True(C#代码或XAML文件中均可),否则会抓狂的。
补充:可以自己编写一个继承于MediaStreamSource的子类,使用SetSource方法传给MediaElement,以实现播放的个性自定义,但这需要了解一些音乐文件编码解码的东西。
举例:
//播放隔离存储区内的音乐文件 using (var store = IsolatedStorageFile.GetUserStoreForApplication()) { IsolatedStorageFileStream stream = store.OpenFile(mp3FileName, FileMode.Open, FileAccess.Read); mediaPlayback.AutoPlay = true; mediaPlayback.SetSource(stream); mediaPlayback.Play(); } //程序安装包内或远程网络上的文件 mediaPlayback.Source = new Uri(mp3FileName, UriKind.Relative); mediaPlayback.Play();
2)使用MediaPlayerLauncher
引入 Microsoft.Phone.Tasks 命名空间
音乐文件:XAP程序安装包内的文件,隔离存储区内的文件。
注意事项:Launcher会挡住你的程序的原来的页面,而且是整个屏幕都被挡住了,按Back键会返回程序页面,手机上的Zune播放器就是使用这个。
举例:
MediaPlayerLauncher player = new MediaPlayerLauncher(); player.Location = MediaLocationType.Data; player.Media = new Uri("ILoveYou.mp3", UriKind.RelativeOrAbsolute); player.Orientation = MediaPlayerOrientation.Portrait; player.Controls = MediaPlaybackControls.All; player.Show();
3)使用MediaPlayer
引入 Microsoft.Xna.Framework.Media 命名空间。
音乐文件:XAP程序安装包内的文件,互联网络上的文件。
注意事项:如果是Silverlight程序,则需要特别处理XNA的刷新机制。
定义实现IApplicationService
public class XNADispatcherService : IApplicationService { private DispatcherTimer frameworkDispatcherTimer; public void StartService(ApplicationServiceContext context) { this.frameworkDispatcherTimer.Start(); } public void StopService() { this.frameworkDispatcherTimer.Stop(); } public XNADispatcherService() { this.frameworkDispatcherTimer = new DispatcherTimer(); this.frameworkDispatcherTimer.Interval = TimeSpan.FromTicks(333333); this.frameworkDispatcherTimer.Tick += frameworkDispatcherTimer_Tick; FrameworkDispatcher.Update(); } void frameworkDispatcherTimer_Tick(object sender, EventArgs e) { FrameworkDispatcher.Update(); } }
在App.xaml中实例化XNADispatcherService:
<Application.ApplicationLifetimeObjects> <!--Required object that handles lifetime events for the application--> <shell:PhoneApplicationService Launching="Application_Launching" Closing="Application_Closing" Activated="Application_Activated" Deactivated="Application_Deactivated"/> <local:XNADispatcherService/> </Application.ApplicationLifetimeObjects>
举例:
Song mp3Song = Song.FromUri(mp3Title, new Uri(mp3FileURL, UriKind.RelativeOrAbsolute));
MediaPlayer.Play(mp3Song);