|
|
|
@ -0,0 +1,122 @@ |
|
|
|
|
using Microsoft.Win32; |
|
|
|
|
using System; |
|
|
|
|
using System.Collections.Generic; |
|
|
|
|
using System.Linq; |
|
|
|
|
using System.Text; |
|
|
|
|
using System.Threading.Tasks; |
|
|
|
|
using System.Windows; |
|
|
|
|
using System.Windows.Controls; |
|
|
|
|
using System.Windows.Data; |
|
|
|
|
using System.Windows.Documents; |
|
|
|
|
using System.Windows.Input; |
|
|
|
|
using System.Windows.Media; |
|
|
|
|
using System.Windows.Media.Imaging; |
|
|
|
|
using System.Windows.Navigation; |
|
|
|
|
using System.Windows.Shapes; |
|
|
|
|
using System.Windows.Threading; |
|
|
|
|
|
|
|
|
|
namespace MediaPlayer |
|
|
|
|
{ |
|
|
|
|
/// <summary> |
|
|
|
|
/// Interaction logic for MainWindow.xaml |
|
|
|
|
/// </summary> |
|
|
|
|
public partial class MainWindow : Window |
|
|
|
|
{ |
|
|
|
|
private DispatcherTimer _playTimer; |
|
|
|
|
|
|
|
|
|
public MainWindow() |
|
|
|
|
{ |
|
|
|
|
InitializeComponent(); |
|
|
|
|
InitInstance(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void InitInstance() |
|
|
|
|
{ |
|
|
|
|
_playTimer = new DispatcherTimer(); |
|
|
|
|
_playTimer.Interval = TimeSpan.FromSeconds(1); |
|
|
|
|
_playTimer.Tick -= TickTimer; |
|
|
|
|
_playTimer.Tick += TickTimer; |
|
|
|
|
_playTimer.Start(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void mediaElem_MediaOpened(object sender, RoutedEventArgs e) |
|
|
|
|
{ |
|
|
|
|
playSlider.Minimum = 0; |
|
|
|
|
playSlider.Maximum = mediaElem.NaturalDuration.TimeSpan.TotalSeconds; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void mediaElem_MediaEnded(object sender, RoutedEventArgs e) |
|
|
|
|
{ |
|
|
|
|
mediaElem.Stop(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void mediaElem_MediaFailed(object sender, ExceptionRoutedEventArgs e) |
|
|
|
|
{ |
|
|
|
|
MessageBox.Show($"Play error: {e.ErrorException.Message}"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void playSlider_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e) |
|
|
|
|
{ |
|
|
|
|
mediaElem.Pause(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void playSlider_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e) |
|
|
|
|
{ |
|
|
|
|
mediaElem.Position = TimeSpan.FromSeconds(playSlider.Value); |
|
|
|
|
mediaElem.Play(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void playSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) |
|
|
|
|
{ |
|
|
|
|
mediaElem.Position = TimeSpan.FromSeconds(playSlider.Value); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void playButton_Click(object sender, RoutedEventArgs e) |
|
|
|
|
{ |
|
|
|
|
mediaElem.Play(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void PauseButton_Click(object sender, RoutedEventArgs e) |
|
|
|
|
{ |
|
|
|
|
mediaElem.Pause(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void StopButton_Click(object sender, RoutedEventArgs e) |
|
|
|
|
{ |
|
|
|
|
mediaElem.Stop(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void volumeSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) |
|
|
|
|
{ |
|
|
|
|
mediaElem.Volume = volumeSlider.Value; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void openButton_Click(object sender, RoutedEventArgs e) |
|
|
|
|
{ |
|
|
|
|
OpenFileDialog dlg = new OpenFileDialog(); |
|
|
|
|
if (dlg.ShowDialog() != true) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
mediaElem.Source = new Uri(dlg.FileName); |
|
|
|
|
mediaElem.Volume = volumeSlider.Value; |
|
|
|
|
mediaElem.SpeedRatio = 1; |
|
|
|
|
|
|
|
|
|
mediaElem.Play(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void TickTimer(object? sender, EventArgs e) |
|
|
|
|
{ |
|
|
|
|
if (mediaElem.Source == null) |
|
|
|
|
{ |
|
|
|
|
playTimeLabel.Content = "No File"; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!mediaElem.NaturalDuration.HasTimeSpan) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
playSlider.Value = mediaElem.Position.TotalSeconds; |
|
|
|
|
playTimeLabel.Content = $"{mediaElem.Position.ToString(@"hh\:mm\:ss")} / {mediaElem.NaturalDuration.TimeSpan.ToString(@"hh\:mm\:ss")}"; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |