Silverlight2 边学边练 之四 音频播放器

Silverlight2 边学边练 之四 音频播放器,第1张

概述众所周知Silverlight2对于音视频媒体也提供了很好的支持,本篇就音频部分做一个播放器实例。 本例实现的是播放器最基本的功能,大家可通过该例体会一下Silverlight2对音频的控制。 本例参考自《Pro Silverlight 2 in C# 2008》CHAPTER 10 SOUND, VIDEO, AND DEEP ZOOM 先上个效果图看看: XAML Code: <UserCon

众所周知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 边学边练 之四 音频播放器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1047778.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存