コード例 #1
0
        private void SetupAudioVisualizer()
        {
            _audioVisualizer = new AudioVisualizer(Window.AudioVisualizerView);
            _timerWaveform = new System.Timers.Timer(50);
            _timerWaveform.Elapsed += (object sender, System.Timers.ElapsedEventArgs e) =>
            {
                InvokeOnMainThread(() =>
                    {
                        _timerWaveform.Stop();

                        System.Threading.Thread.Sleep(100);
                        if (_videoFileName != null && _audioVisualizer != null)
                        {
                            int index = -1;
                            var selectedIndices = Window.SubtitleTable.SelectedRows.ToList();
                            if (selectedIndices.Count > 0)
                                index = (int)selectedIndices.First();

                            if (_audioVisualizer.Locked)
                            {
                                double startPos = _videoPlayer.Position - ((_audioVisualizer.EndPositionSeconds - _audioVisualizer.StartPositionSeconds) / 2.0);
                                if (startPos < 0)
                                    startPos = 0;
                                SetWaveformPosition(startPos, _videoPlayer.Position, index);
                            }
//                                else if (_videoPlayer.Position > _audioVisualizer.EndPositionSeconds || _videoPlayer.Position < _audioVisualizer.StartPositionSeconds)
//                                {
//                                    double startPos = _videoPlayer.Position - 0.01;
//                                    if (startPos < 0)
//                                        startPos = 0;
//                                    _audioVisualizer.ClearSelection();
//                                    SetWaveformPosition(startPos, _videoPlayer.Position, index);
//                                }
                                else
                            {
                                SetWaveformPosition(_videoPlayer.Position, index);
                            }
                            _audioVisualizer.AudioVisualizerPaint();
                        }
                        _timerWaveform.Start();
                    });
            };
            _audioVisualizer.OnTimeChanged += (object sender, AudioVisualizerBase.ParagraphEventArgs e) =>
            {
                InvokeOnMainThread(() =>
                    {
                        ReloadDataKeepSelection();
                    });
            };

            _audioVisualizer.OnPositionSelected += (object sender, AudioVisualizerBase.ParagraphEventArgs e) =>
            {
                if (string.IsNullOrEmpty(_videoFileName) || e.Paragraph == null)
                {
                    return;
                }
                int index = _subtitle.GetIndex(e.Paragraph);
                if (index < 0)
                {
                    return;
                }
                InvokeOnMainThread(() =>
                    {
                        ShowSubtitleRow(index);
                        _videoPlayer.Position = _selectedParagraph.StartTime.TotalSeconds + 0.1;
                    });                    
            };

            _audioVisualizer.OnDoubleClickNonParagraph += (object sender, AudioVisualizerBase.ParagraphEventArgs e) =>
            {
                if (string.IsNullOrEmpty(_videoFileName))
                {
                    return;
                }
                int index = _subtitle.GetIndex(e.Seconds);
                InvokeOnMainThread(() =>
                    {
                        if (index >= 0)
                        {
                                
                            ShowSubtitleRow(index);
                        }
                        _videoPlayer.Position = e.Seconds;
                    });     
            };
        }
コード例 #2
0
 public void NewSubtitle()
 {
     if (Window.SubtitleTable.DataSource == null || ContinueIfChanged())
     {
         _subtitleFileName = null;
         SetNewSubtitle(new Subtitle());
         Window.SetEncoding(Encoding.UTF8.BodyName);
         Window.SubtitleText.StringValue = string.Empty;
         Window.SetTimeCode(new Paragraph());
         if (_videoPlayer != null)
         {
             _videoPlayer.DisposeVideoPlayer();
         }
         if (_audioVisualizer != null)
         {
             _audioVisualizer.WavePeaks = null;
         }
         _videoFileName = null;
         _audioVisualizer = null;
     }
 }