آموزش ساخت برنامه مدیا پلیر و mp3 player با wpf و #C
سلام بر برنامه نویسان و کاربران سایت پروگرم 98 …
در این مطلب ، یاد میگیرید که یک برنامه ی مدیا پلیر رو در wpf با استفاده از زبان برنامه نویسی سی شارپ بسازید و به کاربر فیلم نمایش بدهید و همچنین یاد می گیرید که چه طور برنامتان پخش موسیقی هم بکند.
همچنین یاد میگیرید در برنامه تان امکان عقب و جلو کردن ویدئو توسط کاربر با حرکت دادن یک Slider و همچنین افزایش و کاهش سرعت فیلم رو اضافه کنید.
همچنین یاد می گیرید که چه طور با یک Slider امکان افزایش و کاهش صدای صوت یا ویدئو را با جا به جا کردن آن به کاربر بدهید.
خب ابتدا کدهای زیر را در کدهای XAML وارد کنید یا از قسمت پایین این مطلب ، سورس کد را دانلود کنید:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WPF Media Player" Height="800" Width="1200"
MinWidth="1200" MinHeight="800" SizeToContent="WidthAndHeight" WindowStartupLocation="CenterScreen">
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.Open" CanExecute="Open_CanExecute" Executed="Open_Executed" />
<CommandBinding Command="MediaCommands.Play" CanExecute="Play_CanExecute" Executed="Play_Executed" />
<CommandBinding Command="MediaCommands.Pause" CanExecute="Pause_CanExecute" Executed="Pause_Executed" />
<CommandBinding Command="MediaCommands.Stop" CanExecute="Stop_CanExecute" Executed="Stop_Executed" />
</Window.CommandBindings>
<Grid MouseWheel="Grid_MouseWheel" Margin="0,0,-8,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="709*"/>
<ColumnDefinition Width="462*"/>
<ColumnDefinition Width="30*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ToolBar Margin="0,0,0,696" Grid.RowSpan="2" Grid.ColumnSpan="3">
<Button Command="ApplicationCommands.Open" Height="25" Margin="0,10,0,9" Width="41" Content="open">
</Button>
<Separator />
<Button Command="MediaCommands.Play" Height="36" Margin="0,3,0,5" Width="37" ToolTip="play" Content="play">
</Button>
<Button Command="MediaCommands.Pause" Height="33" Margin="0,4,0,7" Width="38" Content="pause">
</Button>
<Button Command="MediaCommands.Stop" Height="36" Margin="0,3,0,5" Width="35" Content="stop">
</Button>
</ToolBar>
<MediaElement Name="mePlayer" Grid.Row="1" LoadedBehavior="Manual" Stretch="None" Margin="0,49,10,0" Grid.ColumnSpan="3" />
<StatusBar Grid.Row="2" Grid.ColumnSpan="3">
<StatusBar.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</StatusBar.ItemsPanel>
<StatusBarItem>
<TextBlock Name="lblProgressStatus">00:00:00</TextBlock>
</StatusBarItem>
<StatusBarItem Grid.Column="1" HorizontalContentAlignment="Stretch">
<Slider Name="sliProgress" Thumb.DragStarted="sliProgress_DragStarted" Thumb.DragCompleted="sliProgress_DragCompleted" ValueChanged="sliProgress_ValueChanged" />
</StatusBarItem>
<StatusBarItem Grid.Column="2">
<ProgressBar Name="pbVolume" Width="50" Height="12" Maximum="1" Value="{Binding ElementName=mePlayer, Path=Volume}" />
</StatusBarItem>
</StatusBar>
</Grid>
</Window>
سپس کد این 3 فضای نام را اضافه کنید:
using System.Windows.Input;
using System.Windows.Threading;
using Microsoft.Win32;
پس از آن کدهای قسمت بالایی و پایین کدهای namespace ها را به این صورت تغییر دهید:
{
public partial class AudioVideoPlayerCompleteSample : Window
{
private bool mediaPlayerIsPlaying = false;
private bool userIsDraggingSlider = false;
public AudioVideoPlayerCompleteSample()
{
InitializeComponent();
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += timer_Tick;
timer.Start();
}
دقت کنید که در wpf کنترل تایمر وجود ندارد و برای افزودن تایمر باید از DispatcherTimer استفاده کنید.برای اطلاعات بیشتر درباره DispatcherTimer می توانید این لینک را مشاهده کنید.
در کد TimeSpan.FromSeconds که بعد از آن (1) آمده یعنی اینکه interval تایمر هر 1 ثانیه یک بار باشد و بعد از آن هم تایمر Start شده است.
و پس از آن این کدها را برای تایمر اضافه کنید:
{
if ((mePlayer.Source != null) && (mePlayer.NaturalDuration.HasTimeSpan) && (!userIsDraggingSlider))
{
sliProgress.Minimum = 0;
sliProgress.Maximum = mePlayer.NaturalDuration.TimeSpan.TotalSeconds;
sliProgress.Value = mePlayer.Position.TotalSeconds;
}
}
در کد بالا در رویداد tick تایمر که هر 1 ثانیه یک بار اتفاق می افتد ، ابتدا null نبودن منبع mePlayer که همان MediaElement است را چک می کند و سپس true بودن mePlayer.NaturalDuration.HasTimeSpan را چک می کند و این نکته رو هم بگم که NaturalDuration زمان فیلم (media) را می گیرد.
پس از آن Minimum مقدار sliProgress برابر صفر می شود.sliProgress همان Slider ای است که کاربر می تواند با جا به جا کردن آن ویدئو را به جلو و عقب بکشد.
پس از آن Maximum مقدار sliProgress برابر mePlayer.NaturalDuration.TimeSpan.TotalSeconds می شود که به این معنیه که بیشترین مقدار این Slider برابر زمان نهایی فیلم یا صوت باشه.
پس از آن هم Value آن برابر mePlayer.Position.TotalSeconds که برابر موقعیت زمانی فیلم یا صوتی هست که در آن قرار گرفته.
پس از آن کد زیر را وارد کنید:
{