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);