学习Windows Phone手机开发:播放音乐的3种方法

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

你可能感兴趣的:(windows phone)