diff --git a/Correlator/ViewModels/AudioFileViewModel.cs b/Correlator/ViewModels/AudioFileViewModel.cs index bfbeb3a..97030b7 100644 --- a/Correlator/ViewModels/AudioFileViewModel.cs +++ b/Correlator/ViewModels/AudioFileViewModel.cs @@ -3,6 +3,7 @@ using System.IO; using System.Linq; using System.Windows.Controls; +using System.Windows.Threading; using Correlator.Model; using Correlator.Util; using HandyControl.Controls; @@ -46,6 +47,30 @@ } } + private int _max = int.MaxValue; + + public int Max + { + get => _max; + set + { + _max = value; + RaisePropertyChanged(); + } + } + + private int _currentValue; + + public int CurrentValue + { + get => _currentValue; + set + { + _currentValue = value; + RaisePropertyChanged(); + } + } + private int _pageIndex = 1; public int PageIndex @@ -86,10 +111,33 @@ private WaveOutEvent _waveOutEvent = new WaveOutEvent(); private AudioFileReader _audioFileReader; + private readonly DispatcherTimer _audioTimer = new DispatcherTimer + { + Interval = new TimeSpan(0, 0, 0, 1) + }; + public AudioFileViewModel(IDialogService dialogService) { + _audioTimer.Tick += delegate + { + if (_waveOutEvent.PlaybackState == PlaybackState.Stopped) + { + _audioTimer.Stop(); + AudioState = "未播放"; + } + + if (_audioFileReader == null) + { + return; + } + + CurrentValue = _audioFileReader.CurrentTime.Seconds; + }; + GoBackCommand = new DelegateCommand(delegate { + _audioTimer.Stop(); + if (_audioFileReader != null) { _audioFileReader.Dispose(); @@ -129,19 +177,20 @@ { _waveOutEvent.Dispose(); _audioFileReader.Dispose(); - + _audioTimer.Stop(); AudioState = "未播放"; } else { try { + _audioTimer.Start(); _audioFileReader = new AudioFileReader(_selectedFile.FullPath); + Max = (int)_audioFileReader.TotalTime.TotalSeconds; + AudioState = $"时长:{_max}s"; + _waveOutEvent.Init(_audioFileReader); _waveOutEvent.Play(); - - //获取时长 - AudioState = $"时长:{_audioFileReader.TotalTime.TotalSeconds}s"; } catch (FormatException) { @@ -228,15 +277,7 @@ else { var fileName = file.Name; - string fileSource; - if (fileName.Contains("听音")) - { - fileSource = "听音"; - } - else - { - fileSource = ""; - } + var fileSource = fileName.Contains("听音") ? "听音" : ""; audioFiles.Add(new AudioFile { diff --git a/Correlator/ViewModels/AudioFileViewModel.cs b/Correlator/ViewModels/AudioFileViewModel.cs index bfbeb3a..97030b7 100644 --- a/Correlator/ViewModels/AudioFileViewModel.cs +++ b/Correlator/ViewModels/AudioFileViewModel.cs @@ -3,6 +3,7 @@ using System.IO; using System.Linq; using System.Windows.Controls; +using System.Windows.Threading; using Correlator.Model; using Correlator.Util; using HandyControl.Controls; @@ -46,6 +47,30 @@ } } + private int _max = int.MaxValue; + + public int Max + { + get => _max; + set + { + _max = value; + RaisePropertyChanged(); + } + } + + private int _currentValue; + + public int CurrentValue + { + get => _currentValue; + set + { + _currentValue = value; + RaisePropertyChanged(); + } + } + private int _pageIndex = 1; public int PageIndex @@ -86,10 +111,33 @@ private WaveOutEvent _waveOutEvent = new WaveOutEvent(); private AudioFileReader _audioFileReader; + private readonly DispatcherTimer _audioTimer = new DispatcherTimer + { + Interval = new TimeSpan(0, 0, 0, 1) + }; + public AudioFileViewModel(IDialogService dialogService) { + _audioTimer.Tick += delegate + { + if (_waveOutEvent.PlaybackState == PlaybackState.Stopped) + { + _audioTimer.Stop(); + AudioState = "未播放"; + } + + if (_audioFileReader == null) + { + return; + } + + CurrentValue = _audioFileReader.CurrentTime.Seconds; + }; + GoBackCommand = new DelegateCommand(delegate { + _audioTimer.Stop(); + if (_audioFileReader != null) { _audioFileReader.Dispose(); @@ -129,19 +177,20 @@ { _waveOutEvent.Dispose(); _audioFileReader.Dispose(); - + _audioTimer.Stop(); AudioState = "未播放"; } else { try { + _audioTimer.Start(); _audioFileReader = new AudioFileReader(_selectedFile.FullPath); + Max = (int)_audioFileReader.TotalTime.TotalSeconds; + AudioState = $"时长:{_max}s"; + _waveOutEvent.Init(_audioFileReader); _waveOutEvent.Play(); - - //获取时长 - AudioState = $"时长:{_audioFileReader.TotalTime.TotalSeconds}s"; } catch (FormatException) { @@ -228,15 +277,7 @@ else { var fileName = file.Name; - string fileSource; - if (fileName.Contains("听音")) - { - fileSource = "听音"; - } - else - { - fileSource = ""; - } + var fileSource = fileName.Contains("听音") ? "听音" : ""; audioFiles.Add(new AudioFile { diff --git a/Correlator/Views/AudioFileView.xaml b/Correlator/Views/AudioFileView.xaml index 7db2fd4..13e4529 100644 --- a/Correlator/Views/AudioFileView.xaml +++ b/Correlator/Views/AudioFileView.xaml @@ -34,8 +34,9 @@ - + +