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);
posted on 2011-10-20 10:58  虫子CCC  阅读(595)  评论(0编辑  收藏  举报