您现在的位置>>.Net中文社区>>Silverlight

Silverlight2 实例之 音频播放器【附源码下载】

浏览量: 作者:Gnie 来源:博客园

完整实例源码下载】众所周知Silverlight2对于音视频媒体也提供了很好的支持,本篇就音频部分做一个播放器实例。

本例实现的是播放器最基本的功能,大家可通过该例体会一下Silverlight2对音频的控制。
本例参考自《Pro Silverlight 2 in C# 2008》CHAPTER 10 SOUND, VIDEO, AND DEEP ZOOM

先上个效果图看看:

XAML Code:

  1. <UserControl x:Class="MusicPlayer.Page" 
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  4.     Height="250" Width="200"> 
  5.     <Grid Margin="20"> 
  6.         <Grid.Background> 
  7.             <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> 
  8.                 <GradientStop Color="Gold" Offset="0"></GradientStop> 
  9.                 <GradientStop Color="White" Offset="0.5"></GradientStop> 
  10.                 <GradientStop Color="Gold" Offset="1"></GradientStop> 
  11.             </LinearGradientBrush> 
  12.         </Grid.Background> 
  13.         <Grid.RowDefinitions> 
  14.             <RowDefinition Height="Auto"></RowDefinition> 
  15.             <RowDefinition Height="Auto"></RowDefinition> 
  16.             <RowDefinition Height="Auto"></RowDefinition> 
  17.             <RowDefinition Height="Auto"></RowDefinition> 
  18.             <RowDefinition Height="Auto"></RowDefinition> 
  19.         </Grid.RowDefinitions> 
  20.  
  21.         <!--媒体组件--> 
  22.         <MediaElement x:Name="media" AutoPlay="False" Source="test.mp3"   
  23.                       MediaOpened="media_MediaOpened"  
  24.                       MediaFailed="media_MediaFailed" 
  25.                       MediaEnded="media_MediaEnded"  
  26.                       CurrentStateChanged="media_CurrentStateChanged"> 
  27.         </MediaElement> 
  28.         <StackPanel Orientation="Horizontal"> 
  29.             <!--播放键--> 
  30.             <Button Click="cmdPlay_Click" Padding="15" Margin="5"> 
  31.                 <StackPanel> 
  32.                     <Polygon Points="0,0 0,10 10,5" Fill="Green"></Polygon> 
  33.                 </StackPanel> 
  34.             </Button> 
  35.             <!--停止键--> 
  36.             <Button Click="cmdStop_Click" Padding="15" Margin="5"> 
  37.                 <StackPanel> 
  38.                     <Rectangle Height="10" Width="10" Fill="Red"></Rectangle> 
  39.                 </StackPanel> 
  40.             </Button> 
  41.             <!--暂停键--> 
  42.             <Button Click="cmdPause_Click" Padding="15" Margin="5"> 
  43.                 <StackPanel Orientation="Horizontal"> 
  44.                     <Rectangle Margin="1" Height="10" Width="3" Fill="Blue"></Rectangle> 
  45.                     <Rectangle Margin="1" Height="10" Width="3" Fill="Blue"></Rectangle> 
  46.                 </StackPanel> 
  47.             </Button> 
  48.         </StackPanel> 
  49.  
  50.         <Grid Grid.Row="1" Margin="0,10,0,0"> 
  51.             <Grid.RowDefinitions> 
  52.                 <RowDefinition Height="Auto"></RowDefinition> 
  53.                 <RowDefinition Height="Auto"></RowDefinition> 
  54.                 <RowDefinition Height="Auto"></RowDefinition> 
  55.             </Grid.RowDefinitions> 
  56.             <Grid.ColumnDefinitions> 
  57.                 <ColumnDefinition Width="Auto"></ColumnDefinition> 
  58.                 <ColumnDefinition></ColumnDefinition> 
  59.             </Grid.ColumnDefinitions> 
  60.  
  61.             <!--音量调节按钮--> 
  62.             <TextBlock Margin="5" Text="Volume: "></TextBlock> 
  63.             <Slider x:Name="sliderVolume" Grid.Column="1"  Minimum="0" Maximum="1" Value="0.5" 
  64.                     ValueChanged="sliderVolume_ValueChanged"></Slider> 
  65.             <!--平衡调节按钮--> 
  66.             <TextBlock Grid.Row="1" Margin="5" Text="Balance: "></TextBlock> 
  67.             <Slider x:Name="sliderBalance" Grid.Row="1" Grid.Column="1" Minimum="-1" Maximum="1" 
  68.                     ValueChanged="sliderBalance_ValueChanged"></Slider> 
  69.             <!--播放进度调节按钮--> 
  70.             <TextBlock Grid.Row="2" Margin="5" Text="Seek To: "></TextBlock> 
  71.             <Slider x:Name="sliderPosition" Minimum="0" Grid.Column="1" Grid.Row="2" 
  72.                     ValueChanged="sliderPosition_ValueChanged"></Slider> 
  73.             <!--播放进度条--> 
  74.             <Slider x:Name="sliderPositionBackground" Minimum="0" Grid.Column="1" Grid.Row="2"  
  75.                     IsHitTestVisible="False" Opacity="0.5"> 
  76.             </Slider> 
  77.         </Grid> 
  78.  
  79.         <!--循环播放选项--> 
  80.         <CheckBox x:Name="chkLoop" Grid.Row="2" Margin="5,5,5,5" Content="Loop"></CheckBox> 
  81.         <!--静音选项--> 
  82.         <CheckBox x:Name="chkMute" Grid.Row="3" Margin="5,0" Content="Mute" Click="chkMute_Click"></CheckBox> 
  83.         <!--播放状态提示--> 
  84.         <TextBlock x:Name="lblStatus" Grid.Row="4" Margin="10" HorizontalAlignment="Center"></TextBlock> 
  85.     </Grid> 
  86. </UserControl> 

C# Code:

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Windows; 
  4. using System.Windows.Controls; 
  5. using System.Windows.Media; 
  6. using System.Windows.Media.Animation; 
  7. using System.Windows.Threading; 
  8.  
  9. namespace MusicPlayer 
  10.     public partial class Page : UserControl 
  11.     { 
  12.         public Page() 
  13.         { 
  14.             InitializeComponent(); 
  15.             //设置计时器精确度 
  16.             timer.Interval = TimeSpan.FromSeconds(0.1); 
  17.             //装载计时器 
  18.             timer.Tick += timer_Tick; 
  19.         } 
  20.  
  21.         //停止播放 
  22.         public void mediaStop() 
  23.         { 
  24.             //将进度调节按钮与进度条归零 
  25.             sliderPosition.Value = 0; 
  26.             sliderPositionBackground.Value = 0; 
  27.             //停止播放 
  28.             media.Stop(); 
  29.             timer.Stop(); 
  30.         } 
  31.  
  32.         private void timer_Tick(object sender, EventArgs e) 
  33.         { 
  34.             lblStatus.Text = media.Position.ToString().TrimEnd(new char[] { '0' }); 
  35.             //使播放进度条跟随播放时间移动 
  36.             sliderPositionBackground.Value = media.Position.TotalSeconds; 
  37.         } 
  38.  
  39.         //计时器 
  40.         private DispatcherTimer timer = new DispatcherTimer(); 
  41.  
  42.         //播放键 
  43.         private void cmdPlay_Click(object sender, RoutedEventArgs e) 
  44.         { 
  45.             //判断播放器是否处于暂停状态 
  46.             if (sliderPositionBackground.Value != 0) 
  47.             { 
  48.                 //处于暂停状态则继续播放 
  49.                 media.Position = TimeSpan.FromSeconds(sliderPositionBackground.Value); 
  50.                 media.Play(); 
  51.                 timer.Start(); 
  52.             } 
  53.             else 
  54.             { 
  55.                 //处于停止状态则开始播放 
  56.                 media.Stop(); 
  57.                 media.Play(); 
  58.                 timer.Start(); 
  59.             } 
  60.         } 
  61.  
  62.         //暂停键 
  63.         private void cmdPause_Click(object sender, RoutedEventArgs e) 
  64.         { 
  65.             media.Pause(); 
  66.             timer.Stop(); 
  67.         } 
  68.  
  69.         //停止键 
  70.         private void cmdStop_Click(object sender, RoutedEventArgs e) 
  71.         { 
  72.             mediaStop(); 
  73.         } 
  74.          
  75.         //播放器打开 
  76.         private void media_MediaOpened(object sender, RoutedEventArgs e) 
  77.         { 
  78.             media.Stop(); 
  79.             //将播放进度调节按钮和播放进度条的长度设为音频时长 
  80.             sliderPosition.Maximum = media.NaturalDuration.TimeSpan.TotalSeconds; 
  81.             sliderPositionBackground.Maximum = media.NaturalDuration.TimeSpan.TotalSeconds; 
  82.         } 
  83.  
  84.         //播放进度调节按钮 
  85.         private void sliderPosition_ValueChanged(object sender, RoutedEventArgs e) 
  86.         { 
  87.             //使进度条跟随调节按钮移动 
  88.             sliderPositionBackground.Value = sliderPosition.Value; 
  89.             //从调节位置播放 
  90.             media.Stop(); 
  91.             media.Position = TimeSpan.FromSeconds(sliderPosition.Value); 
  92.             media.Play(); 
  93.             timer.Start(); 
  94.         } 
  95.  
  96.         //音量调节按钮 
  97.         private void sliderVolume_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
  98.         { 
  99.             if (media != null) media.Volume = sliderVolume.Value; 
  100.         } 
  101.  
  102.         //平衡调节按钮 
  103.         private void sliderBalance_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
  104.         { 
  105.             media.Balance = sliderBalance.Value; 
  106.         } 
  107.  
  108.         //静音选项 
  109.         private void chkMute_Click(object sender, RoutedEventArgs e) 
  110.         { 
  111.             media.IsMuted = (bool)chkMute.IsChecked; 
  112.         } 
  113.  
  114.         //获取错误提示 
  115.         private void media_MediaFailed(object sender, ExceptionRoutedEventArgs e) 
  116.         { 
  117.             lblStatus.Text = e.ErrorException.Message; 
  118.         } 
  119.  
  120.         //播放结束 
  121.         private void media_MediaEnded(object sender, RoutedEventArgs e) 
  122.         { 
  123.             //判断是否需要循环播放 
  124.             if ((bool)chkLoop.IsChecked) 
  125.             { 
  126.                 //循环播放 
  127.                 media.Position = TimeSpan.Zero; 
  128.                 media.Play(); 
  129.             } 
  130.             else 
  131.             { 
  132.                 //停止播放 
  133.                 mediaStop(); 
  134.             } 
  135.         } 
  136.  
  137.         //获取播放状态 
  138.         private void media_CurrentStateChanged(object sender, RoutedEventArgs e) 
  139.         { 
  140.             //在Textblock中显示播放状态 
  141.             lblStatus.Text = media.CurrentState.ToString(); 
  142.         } 
  143.     } 
本站部份资源来于互联网,只供学习之用,不得用于商业,如有侵犯版权请联系告知,本站将第一时间删除!
站长QQ:373638128 邮箱:navy1015@126.com
copyright © 2008 .Net中文社区 ASPXCS.NET™.All Rights Reserved 滇ICP备08102132号