众所周知Silverlight2对于音视频媒体也提供了很好的支持,本篇就音频部分做一个播放器实例。
本例实现的是播放器最基本的功能,大家可通过该例体会一下Silverlight2对音频的控制。
本例参考自《Pro Silverlight 2 in C# 2008》CHAPTER 10 SOUND,VIDEO,AND DEEP ZOOM
先上个效果图看看:
XAML Code:
<UserControl x:Class="MusicPlayer.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="250" WIDth="200"> <GrID margin="20"> <GrID.Background> <linearGradIEntBrush StartPoint="0,0" EndPoint="0,1"> <GradIEntStop color="Gold" Offset="0"></GradIEntStop> <GradIEntStop color="White" Offset="0.5"></GradIEntStop> <GradIEntStop color="Gold" Offset="1"></GradIEntStop> </linearGradIEntBrush> </GrID.Background> <GrID.RowDeFinitions> <RowDeFinition Height="auto"></RowDeFinition> <RowDeFinition Height="auto"></RowDeFinition> <RowDeFinition Height="auto"></RowDeFinition> <RowDeFinition Height="auto"></RowDeFinition> <RowDeFinition Height="auto"></RowDeFinition> </GrID.RowDeFinitions> <!--媒体组件--> <MediaElement x:name="media" Autoplay="False" Source="test.mp3" MediaOpened="media_MediaOpened" MediaFailed="media_MediaFailed" MediaEnded="media_MediaEnded" CurrentStateChanged="media_CurrentStateChanged"> </MediaElement> <StackPanel OrIEntation="Horizontal"> <!--播放键--> <button Click="cmdplay_Click" padding="15" margin="5"> <StackPanel> <polygon Points="0,0 0,10 10,5" Fill="Green"></polygon> </StackPanel> </button> <!--停止键--> <button Click="cmdstop_Click" padding="15" margin="5"> <StackPanel> <Rectangle Height="10" WIDth="10" Fill="Red"></Rectangle> </StackPanel> </button> <!--暂停键--> <button Click="cmdPause_Click" padding="15" margin="5"> <StackPanel OrIEntation="Horizontal"> <Rectangle margin="1" Height="10" WIDth="3" Fill="Blue"></Rectangle> <Rectangle margin="1" Height="10" WIDth="3" Fill="Blue"></Rectangle> </StackPanel> </button> </StackPanel> <GrID GrID.Row="1" margin="0,10,0"> <GrID.RowDeFinitions> <RowDeFinition Height="auto"></RowDeFinition> <RowDeFinition Height="auto"></RowDeFinition> <RowDeFinition Height="auto"></RowDeFinition> </GrID.RowDeFinitions> <GrID.ColumnDeFinitions> <ColumnDeFinition WIDth="auto"></ColumnDeFinition> <ColumnDeFinition></ColumnDeFinition> </GrID.ColumnDeFinitions> <!--音量调节按钮--> <TextBlock margin="5" Text="Volume: "></TextBlock> <SlIDer x:name="slIDerVolume" GrID.Column="1" Minimum="0" Maximum="1" Value="0.5" ValueChanged="slIDerVolume_ValueChanged"></SlIDer> <!--平衡调节按钮--> <TextBlock GrID.Row="1" margin="5" Text="Balance: "></TextBlock> <SlIDer x:name="slIDerBalance" GrID.Row="1" GrID.Column="1" Minimum="-1" Maximum="1" ValueChanged="slIDerBalance_ValueChanged"></SlIDer> <!--播放进度调节按钮--> <TextBlock GrID.Row="2" margin="5" Text="Seek To: "></TextBlock> <SlIDer x:name="slIDerposition" Minimum="0" GrID.Column="1" GrID.Row="2" ValueChanged="slIDerposition_ValueChanged"></SlIDer> <!--播放进度条--> <SlIDer x:name="slIDerpositionBackground" Minimum="0" GrID.Column="1" GrID.Row="2" IsHitTestVisible="False" Opacity="0.5"> </SlIDer> </GrID> <!--循环播放选项--> <CheckBox x:name="chkLoop" GrID.Row="2" margin="5,5,5" Content="Loop"></CheckBox> <!--静音选项--> <CheckBox x:name="chkMute" GrID.Row="3" margin="5,0" Content="Mute" Click="chkMute_Click"></CheckBox> <!--播放状态提示--> <TextBlock x:name="lblStatus" GrID.Row="4" margin="10" HorizontalAlignment="Center"></TextBlock> </GrID> </UserControl>
C# Code:
using System; using System.Collections.Generic; using System.windows; using System.windows.Controls; using System.windows.Media; using System.windows.Media.Animation; using System.windows.Threading; namespace MusicPlayer { public partial class Page : UserControl { public Page() { InitializeComponent(); //设置计时器精确度 timer.Interval = TimeSpan.FromSeconds(0.1); //装载计时器 timer.Tick += timer_Tick; } //停止播放 public voID mediaStop() { //将进度调节按钮与进度条归零 slIDerposition.Value = 0; slIDerpositionBackground.Value = 0; //停止播放 media.Stop(); timer.Stop(); } private voID timer_Tick(object sender,EventArgs e) { lblStatus.Text = media.position.ToString().TrimEnd(new char[] { '0' }); //使播放进度条跟随播放时间移动 slIDerpositionBackground.Value = media.position.TotalSeconds; } //计时器 private dispatcherTimer timer = new dispatcherTimer(); //播放键 private voID cmdplay_Click(object sender,RoutedEventArgs e) { //判断播放器是否处于暂停状态 if (slIDerpositionBackground.Value != 0) { //处于暂停状态则继续播放 media.position = TimeSpan.FromSeconds(slIDerpositionBackground.Value); media.Play(); timer.Start(); } else { //处于停止状态则开始播放 media.Stop(); media.Play(); timer.Start(); } } //暂停键 private voID cmdPause_Click(object sender,RoutedEventArgs e) { media.Pause(); timer.Stop(); } //停止键 private voID cmdstop_Click(object sender,RoutedEventArgs e) { mediaStop(); } //播放器打开 private voID media_MediaOpened(object sender,RoutedEventArgs e) { media.Stop(); //将播放进度调节按钮和播放进度条的长度设为音频时长 slIDerposition.Maximum = media.NaturalDuration.TimeSpan.TotalSeconds; slIDerpositionBackground.Maximum = media.NaturalDuration.TimeSpan.TotalSeconds; } //播放进度调节按钮 private voID slIDerposition_ValueChanged(object sender,RoutedEventArgs e) { //使进度条跟随调节按钮移动 slIDerpositionBackground.Value = slIDerposition.Value; //从调节位置播放 media.Stop(); media.position = TimeSpan.FromSeconds(slIDerposition.Value); media.Play(); timer.Start(); } //音量调节按钮 private voID slIDerVolume_ValueChanged(object sender,RoutedPropertyChangedEventArgs<double> e) { if (media != null) media.Volume = slIDerVolume.Value; } //平衡调节按钮 private voID slIDerBalance_ValueChanged(object sender,RoutedPropertyChangedEventArgs<double> e) { media.Balance = slIDerBalance.Value; } //静音选项 private voID chkMute_Click(object sender,RoutedEventArgs e) { media.IsMuted = (bool)chkMute.IsChecked; } //获取错误提示 private voID media_MediaFailed(object sender,ExceptionRoutedEventArgs e) { lblStatus.Text = e.ErrorException.Message; } //播放结束 private voID media_MediaEnded(object sender,RoutedEventArgs e) { //判断是否需要循环播放 if ((bool)chkLoop.IsChecked) { //循环播放 media.position = TimeSpan.Zero; media.Play(); } else { //停止播放 mediaStop(); } } //获取播放状态 private voID media_CurrentStateChanged(object sender,RoutedEventArgs e) { //在Textblock中显示播放状态 lblStatus.Text = media.CurrentState.ToString(); } } }
::源代码下载::
总结以上是内存溢出为你收集整理的Silverlight2 边学边练 之四 音频播放器全部内容,希望文章能够帮你解决Silverlight2 边学边练 之四 音频播放器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)