图解使用Win8Api进行Metro风格的程序开发十----音乐播放
2012-06-21 09:43
579 查看
我们紧接着上篇,这篇将介绍如何使用Windows.UI.Xaml.Media API
中的MediaControl全部事件和MediaElement控件的功能
-----------------------------------我是华丽的分割线-----------------------------------------
我们紧接着上篇,这篇将使用Windows.UI.Xaml.Media API 中的MediaControl全部事件和MediaElement控件的功能
本篇将介绍如下九个方面:
a)MediaControl.PlayPauseTogglePressed事件
b)MediaControl.PlayPressed事件
c)MediaControl.PausePressed事件
d)MediaControl.StopPressed事件
e)MediaControl.FastForwardPressed事件
f)MediaControl.RewindPressed事件
g)MediaControl.RecordPressed事件
h)MediaControl.ChannelDownPressed事件
i)MediaControl.ChannelUpPressed事件
我们的创建的步骤如下:
1)为了组织文件方便,我们先建一个文件夹MediaButtons
2)向文件夹中添加如下文件:
MediaEvents.xaml
创建方法请参照前一篇.
3)由于我们需要对选择的歌曲进行操作,我们要新建一个Song类:
View Code
修改Package.appxmanifest:
8)请看效果图:
选择文件后:
点击 play或者点击歌曲,将播放音乐.按下音乐键:
未完待续,敬请期待...
转载请注明出处:http://www.cnblogs.com/refactor/
中的MediaControl全部事件和MediaElement控件的功能
-----------------------------------我是华丽的分割线-----------------------------------------
我们紧接着上篇,这篇将使用Windows.UI.Xaml.Media API 中的MediaControl全部事件和MediaElement控件的功能
本篇将介绍如下九个方面:
a)MediaControl.PlayPauseTogglePressed事件
b)MediaControl.PlayPressed事件
c)MediaControl.PausePressed事件
d)MediaControl.StopPressed事件
e)MediaControl.FastForwardPressed事件
f)MediaControl.RewindPressed事件
g)MediaControl.RecordPressed事件
h)MediaControl.ChannelDownPressed事件
i)MediaControl.ChannelUpPressed事件
我们的创建的步骤如下:
1)为了组织文件方便,我们先建一个文件夹MediaButtons
2)向文件夹中添加如下文件:
MediaEvents.xaml
创建方法请参照前一篇.
3)由于我们需要对选择的歌曲进行操作,我们要新建一个Song类:
View Code
public sealed partial class MediaEvents : Page { int currentSongIndex = 0; int playlistCount = 0; bool previousRegistered = false; bool nextRegistered = false; bool wasPlaying = false; ObservableCollection<Song> playlist = new ObservableCollection<Song>(); public MediaEvents() { this.InitializeComponent(); DefaultOption.Click += DefaultOption_Click; MediaControl.PlayPauseTogglePressed += MediaControl_PlayPauseTogglePressed; MediaControl.PlayPressed += MediaControl_PlayPressed; MediaControl.PausePressed += MediaControl_PausePressed; MediaControl.StopPressed += MediaControl_StopPressed; MediaControl.FastForwardPressed += MediaControl_FastForwardPressed; MediaControl.RewindPressed += MediaControl_RewindPressed; MediaControl.RecordPressed += MediaControl_RecordPressed; MediaControl.ChannelDownPressed += MediaControl_ChannelDownPressed; MediaControl.ChannelUpPressed += MediaControl_ChannelUpPressed; PlayButton.Click += new RoutedEventHandler(MediaControl_PlayPauseTogglePressed); mediaElement.CurrentStateChanged += mediaElement_CurrentStateChanged; mediaElement.MediaOpened += mediaElement_MediaOpened; mediaElement.MediaEnded += mediaElement_MediaEnded; SongListView.SelectionChanged += SongListView_SelectionChanged; OutputTextBlock.Text = "Events Registered"; } async void SongListView_SelectionChanged(object sender, SelectionChangedEventArgs e) { Song song = e.AddedItems[0] as Song; if (song != null) { await SetMediaElementSourceAsync(song); } await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { mediaElement.AutoPlay = true; }); await dispatchMessage("Play/Pause Pressed - Play"); } /// <summary> /// Invoked when this page is about to be displayed in a Frame. /// </summary> /// <param name="e">Event data that describes how this page was reached. The Parameter /// property is typically used to configure the page.</param> protected override void OnNavigatedTo(NavigationEventArgs e) { } async void DefaultOption_Click(object sender, RoutedEventArgs e) { FileOpenPicker openPicker = new FileOpenPicker(); openPicker.ViewMode = PickerViewMode.List; openPicker.SuggestedStartLocation = PickerLocationId.MusicLibrary; openPicker.FileTypeFilter.Add(".mp3"); openPicker.FileTypeFilter.Add(".m4a"); openPicker.FileTypeFilter.Add(".wma"); //选择多个文件 IReadOnlyList<StorageFile> files = await openPicker.PickMultipleFilesAsync(); if (files.Count > 0) { //创建播放列表 await createPlaylist(files); //设置当前播放歌曲 await SetCurrentPlayingAsync(currentSongIndex); } } //播放结束,设置下一首 async void mediaElement_MediaEnded(object sender, RoutedEventArgs e) { if (currentSongIndex < playlistCount - 1) { currentSongIndex++; await SetCurrentPlayingAsync(currentSongIndex); if (wasPlaying) { mediaElement.Play(); } } } //开始播放 void mediaElement_MediaOpened(object sender, RoutedEventArgs e) { if (wasPlaying) { mediaElement.Play(); } } void mediaElement_CurrentStateChanged(object sender, RoutedEventArgs e) { if (mediaElement.CurrentState == MediaElementState.Playing) { MediaControl.IsPlaying = true; PlayButton.Content = "Pause"; } else { MediaControl.IsPlaying = false; PlayButton.Content = "Play"; } } //设置要播放的歌曲 async Task SetMediaElementSourceAsync(Song song) { var stream = await song.File.OpenAsync(Windows.Storage.FileAccessMode.Read); await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { mediaElement.SetSource(stream, song.File.ContentType); }); MediaControl.ArtistName = song.Artist; MediaControl.TrackName = song.Track; } //创建播放列表 async Task createPlaylist(IReadOnlyList<StorageFile> files) { playlistCount = files.Count; //注销事件关联 if (previousRegistered) { MediaControl.PreviousTrackPressed -= MediaControl_PreviousTrackPressed; previousRegistered = false; } if (nextRegistered) { MediaControl.NextTrackPressed -= MediaControl_NextTrackPressed; nextRegistered = false; } //设置当前播放歌曲 currentSongIndex = 0; //清空播放列表 playlist.Clear(); if (files.Count > 0) { if (files.Count > 1) { //注册下一曲事件 MediaControl.NextTrackPressed += MediaControl_NextTrackPressed; nextRegistered = true; } // 创建播放列表 foreach (StorageFile file in files) { Song newSong = new Song(file); await newSong.getMusicPropertiesAsync(); playlist.Add(newSong); } SongListView.ItemsSource = playlist; } } async Task SetCurrentPlayingAsync(int playlistIndex) { string errorMessage = null; wasPlaying = MediaControl.IsPlaying; Windows.Storage.Streams.IRandomAccessStream stream = null; try { stream = await playlist[playlistIndex].File.OpenAsync(Windows.Storage.FileAccessMode.Read); await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { mediaElement.SetSource(stream, playlist[playlistIndex].File.ContentType); }); } catch (Exception e) { errorMessage = e.Message; } if (errorMessage != null) { await dispatchMessage("Error" + errorMessage); } MediaControl.ArtistName = playlist[playlistIndex].Artist; MediaControl.TrackName = playlist[playlistIndex].Track; } async void MediaControl_ChannelUpPressed(object sender, object e) { await dispatchMessage("Channel Up Pressed"); } async void MediaControl_ChannelDownPressed(object sender, object e) { await dispatchMessage("Channel Down Pressed"); } async void MediaControl_RecordPressed(object sender, object e) { await dispatchMessage("Record Pressed"); } async void MediaControl_RewindPressed(object sender, object e) { await dispatchMessage("Rewind Pressed"); } async void MediaControl_FastForwardPressed(object sender, object e) { await dispatchMessage("Fast Forward Pressed"); } async void MediaControl_PreviousTrackPressed(object sender, object e) { await dispatchMessage("Previous Track Pressed"); if (currentSongIndex > 0) { if (currentSongIndex == (playlistCount - 1)) { if (!nextRegistered) { MediaControl.NextTrackPressed += MediaControl_NextTrackPressed; nextRegistered = true; } } currentSongIndex--; if (currentSongIndex == 0) { MediaControl.PreviousTrackPressed -= MediaControl_PreviousTrackPressed; previousRegistered = false; } await SetCurrentPlayingAsync(currentSongIndex); } } async void MediaControl_NextTrackPressed(object sender, object e) { await dispatchMessage("Next Track Pressed"); if (currentSongIndex < (playlistCount - 1)) { currentSongIndex++; await SetCurrentPlayingAsync(currentSongIndex); if (currentSongIndex > 0) { if (!previousRegistered) { MediaControl.PreviousTrackPressed += MediaControl_PreviousTrackPressed; previousRegistered = true; } } if (currentSongIndex == (playlistCount - 1)) { if (nextRegistered) { MediaControl.NextTrackPressed -= MediaControl_NextTrackPressed; nextRegistered = false; } } } } async void MediaControl_StopPressed(object sender, object e) { await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { mediaElement.Stop(); }); await dispatchMessage("Stop Pressed"); } async void MediaControl_PausePressed(object sender, object e) { await dispatchMessage("Pause Pressed"); await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { mediaElement.Pause(); }); } async void MediaControl_PlayPressed(object sender, object e) { await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { mediaElement.Play(); }); await dispatchMessage("Play Pressed"); } async void MediaControl_PlayPauseTogglePressed(object sender, object e) { if (MediaControl.IsPlaying) { await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { mediaElement.Pause(); }); await dispatchMessage("Play/Pause Pressed - Pause"); } else { await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { mediaElement.Play(); }); await dispatchMessage("Play/Pause Pressed - Play"); } } async Task dispatchMessage(string message) { await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { OutputTextBlock.Text = getTimeStampedMessage(message); }); } //播放进度 string getTimeStampedMessage(string eventText) { return eventText + " " + DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Minute.ToString() + ":" + DateTime.Now.Second.ToString(); } }
修改Package.appxmanifest:
8)请看效果图:
选择文件后:
点击 play或者点击歌曲,将播放音乐.按下音乐键:
未完待续,敬请期待...
转载请注明出处:http://www.cnblogs.com/refactor/
相关文章推荐
- 图解使用Win8Api进行Metro风格的程序开发七----BackgroundDownloader和BackgroundUploader
- 图解使用Win8Api进行Metro风格的程序开发八----剪贴板
- 图解使用Win8Api进行Metro风格的程序开发二----使用文件选择器访问和保存文件
- 图解使用Win8Api进行Metro风格的程序开发九----解压缩
- 图解使用Win8Api进行Metro风格的程序开发五----在系统的设置窗口添加按钮
- 图解使用Win8Api进行Metro风格的程序开发二
- 图解使用Win8Api进行Metro风格的程序开发十二----上下文菜单
- Linux 串口编程<三> 使用termios与API进行串口程序开发
- 图解MFC程序中使用Google单元测试工具GTest进行TDD开发(转载)
- 使用Eclipse与Ant进行java程序开发
- 使用C#和Excel进行报表开发(八)-用程序绑定数据源
- 使用C#开发Metro 风格应用的路线图 -- 开发环境
- 使用golang进行docker api开发
- 使用C#开发Metro 风格应用的路线图 -- 添加启动画面
- 使用NetBeans进行J2ME开发(二):把程序转移到手机上
- 对开发的程序(制作CAB)进行签名,并允许网站中使用
- [置顶] 【Android】Android开发实现进度条效果,SeekBar的简单使用。音量,音乐播放进度,视频播放进度等
- 【软件使用】用IntelliJ IDEA开发Android程序图解
- (微信API接口开发) 使用HttpWebRequest进行请求时发生错误:基础连接已关闭,发送时发生错误处理