热门标签:
您现在的位置>>.Net中文社区>>Silverlight
Silverlight2 实例之 音频播放器【附源码下载】
浏览量:
作者:Gnie
来源:博客园
【完整实例源码下载】众所周知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,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,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();
- }
- }
- }
更多...好站/酷站
本站部份资源来于互联网,只供学习之用,不得用于商业,如有侵犯版权请联系告知,本站将第一时间删除!
站长QQ:373638128 邮箱:navy1015@126.com
copyright © 2008 .Net中文社区 ASPXCS.NET™.All Rights Reserved 滇ICP备08102132号
站长QQ:373638128 邮箱:navy1015@126.com
copyright © 2008 .Net中文社区 ASPXCS.NET™.All Rights Reserved 滇ICP备08102132号

