Working on waveform/spectrogram

git-svn-id: https://subtitleedit.googlecode.com/svn/trunk@469 99eadd0c-20b8-1223-b5c4-2a2b2df33de2
This commit is contained in:
niksedk 2011-06-07 14:57:34 +00:00
parent 69f5f6a63e
commit c9dfa5eaef
4 changed files with 176 additions and 168 deletions

View File

@ -163,6 +163,11 @@ namespace Nikse.SubtitleEdit.Controls
public void ResetSpectrogram() public void ResetSpectrogram()
{ {
if (_spectrogramBitmaps != null)
{
foreach (Bitmap bmp in _spectrogramBitmaps)
bmp.Dispose();
}
_spectrogramBitmaps = new List<Bitmap>(); _spectrogramBitmaps = new List<Bitmap>();
} }

View File

@ -223,7 +223,7 @@
this.toolStripMenuItemPlayRateNormal = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemPlayRateNormal = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItemPlayRateFast = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemPlayRateFast = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItemPlayRateVeryFast = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemPlayRateVeryFast = new System.Windows.Forms.ToolStripMenuItem();
this.AudioWaveForm = new Nikse.SubtitleEdit.Controls.AudioVisualizer(); this.audioVisualizer = new Nikse.SubtitleEdit.Controls.AudioVisualizer();
this.tabControlButtons = new System.Windows.Forms.TabControl(); this.tabControlButtons = new System.Windows.Forms.TabControl();
this.tabPageTranslate = new System.Windows.Forms.TabPage(); this.tabPageTranslate = new System.Windows.Forms.TabPage();
this.labelTranslateTip = new System.Windows.Forms.Label(); this.labelTranslateTip = new System.Windows.Forms.Label();
@ -1840,7 +1840,7 @@
this.groupBoxVideo.Controls.Add(this.labelVideoInfo); this.groupBoxVideo.Controls.Add(this.labelVideoInfo);
this.groupBoxVideo.Controls.Add(this.trackBarWaveFormPosition); this.groupBoxVideo.Controls.Add(this.trackBarWaveFormPosition);
this.groupBoxVideo.Controls.Add(this.panelWaveFormControls); this.groupBoxVideo.Controls.Add(this.panelWaveFormControls);
this.groupBoxVideo.Controls.Add(this.AudioWaveForm); this.groupBoxVideo.Controls.Add(this.audioVisualizer);
this.groupBoxVideo.Controls.Add(this.tabControlButtons); this.groupBoxVideo.Controls.Add(this.tabControlButtons);
this.groupBoxVideo.Dock = System.Windows.Forms.DockStyle.Fill; this.groupBoxVideo.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBoxVideo.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.groupBoxVideo.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
@ -2025,33 +2025,33 @@
// //
// AudioWaveForm // AudioWaveForm
// //
this.AudioWaveForm.AllowDrop = true; this.audioVisualizer.AllowDrop = true;
this.AudioWaveForm.AllowNewSelection = true; this.audioVisualizer.AllowNewSelection = true;
this.AudioWaveForm.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) this.audioVisualizer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right))); | System.Windows.Forms.AnchorStyles.Right)));
this.AudioWaveForm.BackColor = System.Drawing.Color.Black; this.audioVisualizer.BackColor = System.Drawing.Color.Black;
this.AudioWaveForm.BackgroundColor = System.Drawing.Color.Black; this.audioVisualizer.BackgroundColor = System.Drawing.Color.Black;
this.AudioWaveForm.Color = System.Drawing.Color.GreenYellow; this.audioVisualizer.Color = System.Drawing.Color.GreenYellow;
this.AudioWaveForm.DrawGridLines = true; this.audioVisualizer.DrawGridLines = true;
this.AudioWaveForm.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(18))))); this.audioVisualizer.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(18)))));
this.AudioWaveForm.Location = new System.Drawing.Point(472, 32); this.audioVisualizer.Location = new System.Drawing.Point(472, 32);
this.AudioWaveForm.Margin = new System.Windows.Forms.Padding(0); this.audioVisualizer.Margin = new System.Windows.Forms.Padding(0);
this.AudioWaveForm.Name = "AudioWaveForm"; this.audioVisualizer.Name = "AudioWaveForm";
this.AudioWaveForm.NewSelectionParagraph = null; this.audioVisualizer.NewSelectionParagraph = null;
this.AudioWaveForm.SelectedColor = System.Drawing.Color.Red; this.audioVisualizer.SelectedColor = System.Drawing.Color.Red;
this.AudioWaveForm.ShowSpectrogram = false; this.audioVisualizer.ShowSpectrogram = false;
this.AudioWaveForm.ShowWaveform = true; this.audioVisualizer.ShowWaveform = true;
this.AudioWaveForm.Size = new System.Drawing.Size(768, 229); this.audioVisualizer.Size = new System.Drawing.Size(768, 229);
this.AudioWaveForm.StartPositionSeconds = 0D; this.audioVisualizer.StartPositionSeconds = 0D;
this.AudioWaveForm.TabIndex = 6; this.audioVisualizer.TabIndex = 6;
this.AudioWaveForm.TextColor = System.Drawing.Color.Gray; this.audioVisualizer.TextColor = System.Drawing.Color.Gray;
this.AudioWaveForm.WaveFormNotLoadedText = "Click to add wave form"; this.audioVisualizer.WaveFormNotLoadedText = "Click to add wave form";
this.AudioWaveForm.WavePeaks = null; this.audioVisualizer.WavePeaks = null;
this.AudioWaveForm.ZoomFactor = 1D; this.audioVisualizer.ZoomFactor = 1D;
this.AudioWaveForm.Click += new System.EventHandler(this.AudioWaveForm_Click); this.audioVisualizer.Click += new System.EventHandler(this.AudioWaveForm_Click);
this.AudioWaveForm.DragDrop += new System.Windows.Forms.DragEventHandler(this.AudioWaveForm_DragDrop); this.audioVisualizer.DragDrop += new System.Windows.Forms.DragEventHandler(this.AudioWaveForm_DragDrop);
this.AudioWaveForm.DragEnter += new System.Windows.Forms.DragEventHandler(this.AudioWaveForm_DragEnter); this.audioVisualizer.DragEnter += new System.Windows.Forms.DragEventHandler(this.AudioWaveForm_DragEnter);
// //
// tabControlButtons // tabControlButtons
// //
@ -3475,7 +3475,9 @@
this.mediaPlayer.Size = new System.Drawing.Size(281, 278); this.mediaPlayer.Size = new System.Drawing.Size(281, 278);
this.mediaPlayer.SubtitleText = ""; this.mediaPlayer.SubtitleText = "";
this.mediaPlayer.TabIndex = 5; this.mediaPlayer.TabIndex = 5;
this.mediaPlayer.VideoHeight = 0;
this.mediaPlayer.VideoPlayer = null; this.mediaPlayer.VideoPlayer = null;
this.mediaPlayer.VideoWidth = 0;
this.mediaPlayer.Volume = 0D; this.mediaPlayer.Volume = 0D;
this.mediaPlayer.DragDrop += new System.Windows.Forms.DragEventHandler(this.mediaPlayer_DragDrop); this.mediaPlayer.DragDrop += new System.Windows.Forms.DragEventHandler(this.mediaPlayer_DragDrop);
this.mediaPlayer.DragEnter += new System.Windows.Forms.DragEventHandler(this.mediaPlayer_DragEnter); this.mediaPlayer.DragEnter += new System.Windows.Forms.DragEventHandler(this.mediaPlayer_DragEnter);
@ -3807,7 +3809,7 @@
private System.Windows.Forms.ToolStripButton toolStripButtonToggleWaveForm; private System.Windows.Forms.ToolStripButton toolStripButtonToggleWaveForm;
private Controls.VideoPlayerContainer mediaPlayer; private Controls.VideoPlayerContainer mediaPlayer;
private System.Windows.Forms.Panel panelVideoPlayer; private System.Windows.Forms.Panel panelVideoPlayer;
private Controls.AudioVisualizer AudioWaveForm; private Controls.AudioVisualizer audioVisualizer;
private System.Windows.Forms.Timer timerWaveForm; private System.Windows.Forms.Timer timerWaveForm;
private System.Windows.Forms.ContextMenuStrip contextMenuStripWaveForm; private System.Windows.Forms.ContextMenuStrip contextMenuStripWaveForm;
private System.Windows.Forms.ToolStripMenuItem addParagraphHereToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem addParagraphHereToolStripMenuItem;

View File

@ -217,7 +217,7 @@ namespace Nikse.SubtitleEdit.Forms
tabControlSubtitle.SelectTab(TabControlSourceView); tabControlSubtitle.SelectTab(TabControlSourceView);
AudioWaveForm.Visible = Configuration.Settings.General.ShowWaveForm; audioVisualizer.Visible = Configuration.Settings.General.ShowWaveForm;
panelWaveFormControls.Visible = Configuration.Settings.General.ShowWaveForm; panelWaveFormControls.Visible = Configuration.Settings.General.ShowWaveForm;
trackBarWaveFormPosition.Visible = Configuration.Settings.General.ShowWaveForm; trackBarWaveFormPosition.Visible = Configuration.Settings.General.ShowWaveForm;
toolStripButtonToggleWaveForm.Checked = Configuration.Settings.General.ShowWaveForm; toolStripButtonToggleWaveForm.Checked = Configuration.Settings.General.ShowWaveForm;
@ -280,23 +280,23 @@ namespace Nikse.SubtitleEdit.Forms
buttonCustomUrl.Enabled = Configuration.Settings.VideoControls.CustomSearchUrl.Length > 1; buttonCustomUrl.Enabled = Configuration.Settings.VideoControls.CustomSearchUrl.Length > 1;
// Initialize events etc. for audio wave form // Initialize events etc. for audio wave form
AudioWaveForm.OnDoubleClickNonParagraph += AudioWaveForm_OnDoubleClickNonParagraph; audioVisualizer.OnDoubleClickNonParagraph += AudioWaveForm_OnDoubleClickNonParagraph;
AudioWaveForm.OnPositionSelected += AudioWaveForm_OnPositionSelected; audioVisualizer.OnPositionSelected += AudioWaveForm_OnPositionSelected;
AudioWaveForm.OnTimeChanged += AudioWaveForm_OnTimeChanged; audioVisualizer.OnTimeChanged += AudioWaveForm_OnTimeChanged;
AudioWaveForm.OnNewSelectionRightClicked += AudioWaveForm_OnNewSelectionRightClicked; audioVisualizer.OnNewSelectionRightClicked += AudioWaveForm_OnNewSelectionRightClicked;
AudioWaveForm.OnParagraphRightClicked += AudioWaveForm_OnParagraphRightClicked; audioVisualizer.OnParagraphRightClicked += AudioWaveForm_OnParagraphRightClicked;
AudioWaveForm.OnNonParagraphRightClicked += new AudioVisualizer.PositionChangedEventHandler(AudioWaveForm_OnNonParagraphRightClicked); audioVisualizer.OnNonParagraphRightClicked += new AudioVisualizer.PositionChangedEventHandler(AudioWaveForm_OnNonParagraphRightClicked);
AudioWaveForm.OnSingleClick += AudioWaveForm_OnSingleClick; audioVisualizer.OnSingleClick += AudioWaveForm_OnSingleClick;
AudioWaveForm.OnPause += AudioWaveForm_OnPause; audioVisualizer.OnPause += AudioWaveForm_OnPause;
AudioWaveForm.OnTimeChangedAndOffsetRest += AudioWaveForm_OnTimeChangedAndOffsetRest; audioVisualizer.OnTimeChangedAndOffsetRest += AudioWaveForm_OnTimeChangedAndOffsetRest;
AudioWaveForm.OnZoomedChanged += AudioWaveForm_OnZoomedChanged; audioVisualizer.OnZoomedChanged += AudioWaveForm_OnZoomedChanged;
AudioWaveForm.DrawGridLines = Configuration.Settings.VideoControls.WaveFormDrawGrid; audioVisualizer.DrawGridLines = Configuration.Settings.VideoControls.WaveFormDrawGrid;
AudioWaveForm.GridColor = Configuration.Settings.VideoControls.WaveFormGridColor; audioVisualizer.GridColor = Configuration.Settings.VideoControls.WaveFormGridColor;
AudioWaveForm.SelectedColor = Configuration.Settings.VideoControls.WaveFormSelectedColor; audioVisualizer.SelectedColor = Configuration.Settings.VideoControls.WaveFormSelectedColor;
AudioWaveForm.Color = Configuration.Settings.VideoControls.WaveFormColor; audioVisualizer.Color = Configuration.Settings.VideoControls.WaveFormColor;
AudioWaveForm.BackgroundColor = Configuration.Settings.VideoControls.WaveFormBackgroundColor; audioVisualizer.BackgroundColor = Configuration.Settings.VideoControls.WaveFormBackgroundColor;
AudioWaveForm.TextColor = Configuration.Settings.VideoControls.WaveFormTextColor; audioVisualizer.TextColor = Configuration.Settings.VideoControls.WaveFormTextColor;
AudioWaveForm.MouseWheelScrollUpIsForward = Configuration.Settings.VideoControls.WaveFormMouseWheelScrollUpIsForward; audioVisualizer.MouseWheelScrollUpIsForward = Configuration.Settings.VideoControls.WaveFormMouseWheelScrollUpIsForward;
for (double zoomCounter = AudioVisualizer.ZoomMininum; zoomCounter <= AudioVisualizer.ZoomMaxinum + (0.001); zoomCounter += 0.1) for (double zoomCounter = AudioVisualizer.ZoomMininum; zoomCounter <= AudioVisualizer.ZoomMaxinum + (0.001); zoomCounter += 0.1)
{ {
@ -541,7 +541,7 @@ namespace Nikse.SubtitleEdit.Forms
SubtitleListview1.SelectIndexAndEnsureVisible(index); SubtitleListview1.SelectIndexAndEnsureVisible(index);
mediaPlayer.CurrentPosition = seconds; mediaPlayer.CurrentPosition = seconds;
ButtonSetStartAndOffsetRestClick(null, null); ButtonSetStartAndOffsetRestClick(null, null);
AudioWaveForm.Invalidate(); audioVisualizer.Invalidate();
} }
} }
@ -965,7 +965,7 @@ namespace Nikse.SubtitleEdit.Forms
toolStripButtonWaveFormZoomOut.ToolTipText = Configuration.Settings.Language.WaveForm.ZoomOut; toolStripButtonWaveFormZoomOut.ToolTipText = Configuration.Settings.Language.WaveForm.ZoomOut;
toolStripButtonWaveFormZoomIn.ToolTipText = Configuration.Settings.Language.WaveForm.ZoomIn; toolStripButtonWaveFormZoomIn.ToolTipText = Configuration.Settings.Language.WaveForm.ZoomIn;
AudioWaveForm.WaveFormNotLoadedText = Configuration.Settings.Language.WaveForm.ClickToAddWaveForm; audioVisualizer.WaveFormNotLoadedText = Configuration.Settings.Language.WaveForm.ClickToAddWaveForm;
} }
private void SetFormatToSubRip() private void SetFormatToSubRip()
@ -1354,9 +1354,9 @@ namespace Nikse.SubtitleEdit.Forms
_videoFileName = null; _videoFileName = null;
_videoAudioTrackNumber = -1; _videoAudioTrackNumber = -1;
labelVideoInfo.Text = Configuration.Settings.Language.General.NoVideoLoaded; labelVideoInfo.Text = Configuration.Settings.Language.General.NoVideoLoaded;
AudioWaveForm.WavePeaks = null; audioVisualizer.WavePeaks = null;
AudioWaveForm.ResetSpectrogram(); audioVisualizer.ResetSpectrogram();
AudioWaveForm.Invalidate(); audioVisualizer.Invalidate();
if (Configuration.Settings.General.ShowVideoPlayer || Configuration.Settings.General.ShowWaveForm) if (Configuration.Settings.General.ShowVideoPlayer || Configuration.Settings.General.ShowWaveForm)
{ {
@ -1421,9 +1421,9 @@ namespace Nikse.SubtitleEdit.Forms
_videoFileName = null; _videoFileName = null;
_videoAudioTrackNumber = -1; _videoAudioTrackNumber = -1;
labelVideoInfo.Text = Configuration.Settings.Language.General.NoVideoLoaded; labelVideoInfo.Text = Configuration.Settings.Language.General.NoVideoLoaded;
AudioWaveForm.WavePeaks = null; audioVisualizer.WavePeaks = null;
AudioWaveForm.ResetSpectrogram(); audioVisualizer.ResetSpectrogram();
AudioWaveForm.Invalidate(); audioVisualizer.Invalidate();
Configuration.Settings.RecentFiles.Add(fileName, FirstVisibleIndex, FirstSelectedIndex, _videoFileName, _subtitleAlternateFileName); Configuration.Settings.RecentFiles.Add(fileName, FirstVisibleIndex, FirstSelectedIndex, _videoFileName, _subtitleAlternateFileName);
Configuration.Settings.Save(); Configuration.Settings.Save();
@ -1886,9 +1886,9 @@ namespace Nikse.SubtitleEdit.Forms
_videoFileName = null; _videoFileName = null;
_videoAudioTrackNumber = -1; _videoAudioTrackNumber = -1;
labelVideoInfo.Text = Configuration.Settings.Language.General.NoVideoLoaded; labelVideoInfo.Text = Configuration.Settings.Language.General.NoVideoLoaded;
AudioWaveForm.WavePeaks = null; audioVisualizer.WavePeaks = null;
AudioWaveForm.ResetSpectrogram(); audioVisualizer.ResetSpectrogram();
AudioWaveForm.Invalidate(); audioVisualizer.Invalidate();
ShowStatus(_language.New); ShowStatus(_language.New);
_sourceViewChange = false; _sourceViewChange = false;
@ -2011,12 +2011,12 @@ namespace Nikse.SubtitleEdit.Forms
buttonCustomUrl.Text = Configuration.Settings.VideoControls.CustomSearchText; buttonCustomUrl.Text = Configuration.Settings.VideoControls.CustomSearchText;
buttonCustomUrl.Enabled = Configuration.Settings.VideoControls.CustomSearchUrl.Length > 1; buttonCustomUrl.Enabled = Configuration.Settings.VideoControls.CustomSearchUrl.Length > 1;
AudioWaveForm.DrawGridLines = Configuration.Settings.VideoControls.WaveFormDrawGrid; audioVisualizer.DrawGridLines = Configuration.Settings.VideoControls.WaveFormDrawGrid;
AudioWaveForm.GridColor = Configuration.Settings.VideoControls.WaveFormGridColor; audioVisualizer.GridColor = Configuration.Settings.VideoControls.WaveFormGridColor;
AudioWaveForm.SelectedColor = Configuration.Settings.VideoControls.WaveFormSelectedColor; audioVisualizer.SelectedColor = Configuration.Settings.VideoControls.WaveFormSelectedColor;
AudioWaveForm.Color = Configuration.Settings.VideoControls.WaveFormColor; audioVisualizer.Color = Configuration.Settings.VideoControls.WaveFormColor;
AudioWaveForm.BackgroundColor = Configuration.Settings.VideoControls.WaveFormBackgroundColor; audioVisualizer.BackgroundColor = Configuration.Settings.VideoControls.WaveFormBackgroundColor;
AudioWaveForm.TextColor = Configuration.Settings.VideoControls.WaveFormTextColor; audioVisualizer.TextColor = Configuration.Settings.VideoControls.WaveFormTextColor;
if (oldSubtitleFontSettings != Configuration.Settings.General.SubtitleFontName + if (oldSubtitleFontSettings != Configuration.Settings.General.SubtitleFontName +
Configuration.Settings.General.SubtitleFontBold + Configuration.Settings.General.SubtitleFontBold +
@ -7013,12 +7013,12 @@ namespace Nikse.SubtitleEdit.Forms
string spectrogramFolder = GetSpectrogramFolder(fileName); string spectrogramFolder = GetSpectrogramFolder(fileName);
if (File.Exists(peakWaveFileName)) if (File.Exists(peakWaveFileName))
{ {
AudioWaveForm.WavePeaks = new WavePeakGenerator(peakWaveFileName); audioVisualizer.WavePeaks = new WavePeakGenerator(peakWaveFileName);
AudioWaveForm.ResetSpectrogram(); audioVisualizer.ResetSpectrogram();
AudioWaveForm.InitializeSpectrogram(spectrogramFolder); audioVisualizer.InitializeSpectrogram(spectrogramFolder);
toolStripComboBoxWaveForm_SelectedIndexChanged(null, null); toolStripComboBoxWaveForm_SelectedIndexChanged(null, null);
AudioWaveForm.WavePeaks.GenerateAllSamples(); audioVisualizer.WavePeaks.GenerateAllSamples();
AudioWaveForm.WavePeaks.Close(); audioVisualizer.WavePeaks.Close();
SetWaveFormPosition(0, 0, 0); SetWaveFormPosition(0, 0, 0);
timerWaveForm.Start(); timerWaveForm.Start();
} }
@ -7031,9 +7031,9 @@ namespace Nikse.SubtitleEdit.Forms
private void SetWaveFormPosition(double startPositionSeconds, double currentVideoPositionSeconds, int subtitleIndex) private void SetWaveFormPosition(double startPositionSeconds, double currentVideoPositionSeconds, int subtitleIndex)
{ {
if (SubtitleListview1.IsAlternateTextColumnVisible && Configuration.Settings.General.ShowOriginalAsPreviewIfAvailable) if (SubtitleListview1.IsAlternateTextColumnVisible && Configuration.Settings.General.ShowOriginalAsPreviewIfAvailable)
AudioWaveForm.SetPosition(startPositionSeconds, _subtitleAlternate, currentVideoPositionSeconds, -1); audioVisualizer.SetPosition(startPositionSeconds, _subtitleAlternate, currentVideoPositionSeconds, -1);
else else
AudioWaveForm.SetPosition(startPositionSeconds, _subtitle, currentVideoPositionSeconds, subtitleIndex); audioVisualizer.SetPosition(startPositionSeconds, _subtitle, currentVideoPositionSeconds, subtitleIndex);
} }
void VideoLoaded(object sender, EventArgs e) void VideoLoaded(object sender, EventArgs e)
@ -7180,25 +7180,25 @@ namespace Nikse.SubtitleEdit.Forms
splitContainerMain.Panel2Collapsed = false; splitContainerMain.Panel2Collapsed = false;
if (toolStripButtonToggleVideo.Checked) if (toolStripButtonToggleVideo.Checked)
{ {
if (AudioWaveForm.Visible) if (audioVisualizer.Visible)
{ {
AudioWaveForm.Left = tabControlButtons.Left + tabControlButtons.Width + 5; audioVisualizer.Left = tabControlButtons.Left + tabControlButtons.Width + 5;
} }
else else
{ {
panelVideoPlayer.Left = tabControlButtons.Left + tabControlButtons.Width + 5; panelVideoPlayer.Left = tabControlButtons.Left + tabControlButtons.Width + 5;
} }
} }
else if (AudioWaveForm.Visible) else if (audioVisualizer.Visible)
{ {
AudioWaveForm.Left = tabControlButtons.Left + tabControlButtons.Width + 5; audioVisualizer.Left = tabControlButtons.Left + tabControlButtons.Width + 5;
} }
AudioWaveForm.Width = groupBoxVideo.Width - (AudioWaveForm.Left + 10); audioVisualizer.Width = groupBoxVideo.Width - (audioVisualizer.Left + 10);
checkBoxSyncListViewWithVideoWhilePlaying.Left = tabControlButtons.Left + tabControlButtons.Width + 5; checkBoxSyncListViewWithVideoWhilePlaying.Left = tabControlButtons.Left + tabControlButtons.Width + 5;
panelWaveFormControls.Left = AudioWaveForm.Left; panelWaveFormControls.Left = audioVisualizer.Left;
trackBarWaveFormPosition.Left = panelWaveFormControls.Left + panelWaveFormControls.Width + 5; trackBarWaveFormPosition.Left = panelWaveFormControls.Left + panelWaveFormControls.Width + 5;
trackBarWaveFormPosition.Width = AudioWaveForm.Left + AudioWaveForm.Width - trackBarWaveFormPosition.Left + 5; trackBarWaveFormPosition.Width = audioVisualizer.Left + audioVisualizer.Width - trackBarWaveFormPosition.Left + 5;
} }
if (mediaPlayer.VideoPlayer == null && !string.IsNullOrEmpty(_fileName)) if (mediaPlayer.VideoPlayer == null && !string.IsNullOrEmpty(_fileName))
@ -7647,7 +7647,7 @@ namespace Nikse.SubtitleEdit.Forms
private void toolStripButtonToggleWaveForm_Click(object sender, EventArgs e) private void toolStripButtonToggleWaveForm_Click(object sender, EventArgs e)
{ {
toolStripButtonToggleWaveForm.Checked = !toolStripButtonToggleWaveForm.Checked; toolStripButtonToggleWaveForm.Checked = !toolStripButtonToggleWaveForm.Checked;
AudioWaveForm.Visible = toolStripButtonToggleWaveForm.Checked; audioVisualizer.Visible = toolStripButtonToggleWaveForm.Checked;
trackBarWaveFormPosition.Visible = toolStripButtonToggleWaveForm.Checked; trackBarWaveFormPosition.Visible = toolStripButtonToggleWaveForm.Checked;
panelWaveFormControls.Visible = toolStripButtonToggleWaveForm.Checked; panelWaveFormControls.Visible = toolStripButtonToggleWaveForm.Checked;
if (!toolStripButtonToggleWaveForm.Checked && !toolStripButtonToggleVideo.Checked) if (!toolStripButtonToggleWaveForm.Checked && !toolStripButtonToggleVideo.Checked)
@ -7975,15 +7975,15 @@ namespace Nikse.SubtitleEdit.Forms
if (!_isVideoControlsUnDocked) if (!_isVideoControlsUnDocked)
{ {
if (toolStripButtonToggleWaveForm.Checked) if (toolStripButtonToggleWaveForm.Checked)
AudioWaveForm.Left = tabControlButtons.Left + tabControlButtons.Width + 5; audioVisualizer.Left = tabControlButtons.Left + tabControlButtons.Width + 5;
if (!toolStripButtonToggleWaveForm.Checked && toolStripButtonToggleVideo.Checked) if (!toolStripButtonToggleWaveForm.Checked && toolStripButtonToggleVideo.Checked)
{ {
panelVideoPlayer.Left = tabControlButtons.Left + tabControlButtons.Width + 5; panelVideoPlayer.Left = tabControlButtons.Left + tabControlButtons.Width + 5;
panelVideoPlayer.Width = groupBoxVideo.Width - (panelVideoPlayer.Left + 10); panelVideoPlayer.Width = groupBoxVideo.Width - (panelVideoPlayer.Left + 10);
} }
AudioWaveForm.Width = groupBoxVideo.Width - (AudioWaveForm.Left + 10); audioVisualizer.Width = groupBoxVideo.Width - (audioVisualizer.Left + 10);
panelWaveFormControls.Left = AudioWaveForm.Left; panelWaveFormControls.Left = audioVisualizer.Left;
trackBarWaveFormPosition.Left = panelWaveFormControls.Left + panelWaveFormControls.Width + 5; trackBarWaveFormPosition.Left = panelWaveFormControls.Left + panelWaveFormControls.Width + 5;
trackBarWaveFormPosition.Width = groupBoxVideo.Width - (trackBarWaveFormPosition.Left + 10); trackBarWaveFormPosition.Width = groupBoxVideo.Width - (trackBarWaveFormPosition.Left + 10);
this.Main_Resize(null, null); this.Main_Resize(null, null);
@ -8110,7 +8110,7 @@ namespace Nikse.SubtitleEdit.Forms
} }
toolStripButtonLockCenter.Checked = Configuration.Settings.General.WaveFormCenter; toolStripButtonLockCenter.Checked = Configuration.Settings.General.WaveFormCenter;
AudioWaveForm.Locked = toolStripButtonLockCenter.Checked; audioVisualizer.Locked = toolStripButtonLockCenter.Checked;
numericUpDownSec1.Value = (decimal) (Configuration.Settings.General.SmallDelayMilliseconds / 1000.0); numericUpDownSec1.Value = (decimal) (Configuration.Settings.General.SmallDelayMilliseconds / 1000.0);
numericUpDownSec2.Value = (decimal) (Configuration.Settings.General.LargeDelayMilliseconds / 1000.0); numericUpDownSec2.Value = (decimal) (Configuration.Settings.General.LargeDelayMilliseconds / 1000.0);
@ -8425,7 +8425,7 @@ namespace Nikse.SubtitleEdit.Forms
private void AudioWaveForm_Click(object sender, EventArgs e) private void AudioWaveForm_Click(object sender, EventArgs e)
{ {
if (AudioWaveForm.WavePeaks == null) if (audioVisualizer.WavePeaks == null)
{ {
if (string.IsNullOrEmpty(_videoFileName)) if (string.IsNullOrEmpty(_videoFileName))
{ {
@ -8443,9 +8443,9 @@ namespace Nikse.SubtitleEdit.Forms
addWaveForm.WavePeak.WritePeakSamples(peakWaveFileName); addWaveForm.WavePeak.WritePeakSamples(peakWaveFileName);
var audioPeakWave = new WavePeakGenerator(peakWaveFileName); var audioPeakWave = new WavePeakGenerator(peakWaveFileName);
audioPeakWave.GenerateAllSamples(); audioPeakWave.GenerateAllSamples();
AudioWaveForm.WavePeaks = audioPeakWave; audioVisualizer.WavePeaks = audioPeakWave;
if (addWaveForm.SpectrogramBitmaps != null) if (addWaveForm.SpectrogramBitmaps != null)
AudioWaveForm.InitializeSpectrogram(addWaveForm.SpectrogramBitmaps, spectrogramFolder); audioVisualizer.InitializeSpectrogram(addWaveForm.SpectrogramBitmaps, spectrogramFolder);
timerWaveForm.Start(); timerWaveForm.Start();
} }
} }
@ -8453,30 +8453,30 @@ namespace Nikse.SubtitleEdit.Forms
private void timerWaveForm_Tick(object sender, EventArgs e) private void timerWaveForm_Tick(object sender, EventArgs e)
{ {
if (AudioWaveForm.Visible && mediaPlayer.VideoPlayer != null && AudioWaveForm.WavePeaks != null) if (audioVisualizer.Visible && mediaPlayer.VideoPlayer != null && audioVisualizer.WavePeaks != null)
{ {
int index = -1; int index = -1;
if (SubtitleListview1.SelectedItems.Count > 0) if (SubtitleListview1.SelectedItems.Count > 0)
index = SubtitleListview1.SelectedItems[0].Index; index = SubtitleListview1.SelectedItems[0].Index;
if (AudioWaveForm.Locked) if (audioVisualizer.Locked)
{ {
double startPos = mediaPlayer.CurrentPosition - ((AudioWaveForm.EndPositionSeconds - AudioWaveForm.StartPositionSeconds) / 2.0); double startPos = mediaPlayer.CurrentPosition - ((audioVisualizer.EndPositionSeconds - audioVisualizer.StartPositionSeconds) / 2.0);
if (startPos < 0) if (startPos < 0)
startPos = 0; startPos = 0;
SetWaveFormPosition(startPos, mediaPlayer.CurrentPosition, index); SetWaveFormPosition(startPos, mediaPlayer.CurrentPosition, index);
} }
else if (mediaPlayer.CurrentPosition > AudioWaveForm.EndPositionSeconds || mediaPlayer.CurrentPosition < AudioWaveForm.StartPositionSeconds) else if (mediaPlayer.CurrentPosition > audioVisualizer.EndPositionSeconds || mediaPlayer.CurrentPosition < audioVisualizer.StartPositionSeconds)
{ {
double startPos = mediaPlayer.CurrentPosition - 0.01; double startPos = mediaPlayer.CurrentPosition - 0.01;
if (startPos < 0) if (startPos < 0)
startPos = 0; startPos = 0;
AudioWaveForm.ClearSelection(); audioVisualizer.ClearSelection();
SetWaveFormPosition(startPos, mediaPlayer.CurrentPosition, index); SetWaveFormPosition(startPos, mediaPlayer.CurrentPosition, index);
} }
else else
{ {
SetWaveFormPosition(AudioWaveForm.StartPositionSeconds, mediaPlayer.CurrentPosition, index); SetWaveFormPosition(audioVisualizer.StartPositionSeconds, mediaPlayer.CurrentPosition, index);
} }
bool paused = mediaPlayer.IsPaused; bool paused = mediaPlayer.IsPaused;
@ -8492,8 +8492,8 @@ namespace Nikse.SubtitleEdit.Forms
private void addParagraphHereToolStripMenuItem_Click(object sender, EventArgs e) private void addParagraphHereToolStripMenuItem_Click(object sender, EventArgs e)
{ {
AudioWaveForm.ClearSelection(); audioVisualizer.ClearSelection();
Paragraph newParagraph = new Paragraph(AudioWaveForm.NewSelectionParagraph); Paragraph newParagraph = new Paragraph(audioVisualizer.NewSelectionParagraph);
if (newParagraph == null) if (newParagraph == null)
return; return;
@ -8527,14 +8527,14 @@ namespace Nikse.SubtitleEdit.Forms
SubtitleListview1.SelectIndexAndEnsureVisible(index); SubtitleListview1.SelectIndexAndEnsureVisible(index);
textBoxListViewText.Focus(); textBoxListViewText.Focus();
AudioWaveForm.NewSelectionParagraph = null; audioVisualizer.NewSelectionParagraph = null;
ShowStatus(string.Format(_language.VideoControls.NewTextInsertAtX, newParagraph.StartTime.ToShortString())); ShowStatus(string.Format(_language.VideoControls.NewTextInsertAtX, newParagraph.StartTime.ToShortString()));
} }
private void mergeWithPreviousToolStripMenuItem_Click(object sender, EventArgs e) private void mergeWithPreviousToolStripMenuItem_Click(object sender, EventArgs e)
{ {
int index = _subtitle.GetIndex(AudioWaveForm.RightClickedParagraph); int index = _subtitle.GetIndex(audioVisualizer.RightClickedParagraph);
if (index >= 0) if (index >= 0)
{ {
SubtitleListview1.SelectIndexAndEnsureVisible(index); SubtitleListview1.SelectIndexAndEnsureVisible(index);
@ -8544,7 +8544,7 @@ namespace Nikse.SubtitleEdit.Forms
private void deleteParagraphToolStripMenuItem_Click(object sender, EventArgs e) private void deleteParagraphToolStripMenuItem_Click(object sender, EventArgs e)
{ {
int index = _subtitle.GetIndex(AudioWaveForm.RightClickedParagraph); int index = _subtitle.GetIndex(audioVisualizer.RightClickedParagraph);
if (index >= 0) if (index >= 0)
{ {
SubtitleListview1.SelectIndexAndEnsureVisible(index); SubtitleListview1.SelectIndexAndEnsureVisible(index);
@ -8554,7 +8554,7 @@ namespace Nikse.SubtitleEdit.Forms
private void splitToolStripMenuItem1_Click(object sender, EventArgs e) private void splitToolStripMenuItem1_Click(object sender, EventArgs e)
{ {
int index = _subtitle.GetIndex(AudioWaveForm.RightClickedParagraph); int index = _subtitle.GetIndex(audioVisualizer.RightClickedParagraph);
if (index >= 0) if (index >= 0)
{ {
SubtitleListview1.SelectIndexAndEnsureVisible(index); SubtitleListview1.SelectIndexAndEnsureVisible(index);
@ -8564,7 +8564,7 @@ namespace Nikse.SubtitleEdit.Forms
private void mergeWithNextToolStripMenuItem_Click(object sender, EventArgs e) private void mergeWithNextToolStripMenuItem_Click(object sender, EventArgs e)
{ {
int index = _subtitle.GetIndex(AudioWaveForm.RightClickedParagraph); int index = _subtitle.GetIndex(audioVisualizer.RightClickedParagraph);
if (index >= 0) if (index >= 0)
{ {
SubtitleListview1.SelectIndexAndEnsureVisible(index); SubtitleListview1.SelectIndexAndEnsureVisible(index);
@ -8574,25 +8574,25 @@ namespace Nikse.SubtitleEdit.Forms
private void buttonWaveFormZoomIn_Click(object sender, EventArgs e) private void buttonWaveFormZoomIn_Click(object sender, EventArgs e)
{ {
if (AudioWaveForm.WavePeaks != null && AudioWaveForm.Visible) if (audioVisualizer.WavePeaks != null && audioVisualizer.Visible)
{ {
AudioWaveForm.ZoomFactor += 0.1; audioVisualizer.ZoomFactor += 0.1;
} }
} }
private void buttonWaveFormZoomOut_Click(object sender, EventArgs e) private void buttonWaveFormZoomOut_Click(object sender, EventArgs e)
{ {
if (AudioWaveForm.WavePeaks != null && AudioWaveForm.Visible) if (audioVisualizer.WavePeaks != null && audioVisualizer.Visible)
{ {
AudioWaveForm.ZoomFactor -= 0.1; audioVisualizer.ZoomFactor -= 0.1;
} }
} }
private void buttonWaveFormZoomReset_Click(object sender, EventArgs e) private void buttonWaveFormZoomReset_Click(object sender, EventArgs e)
{ {
if (AudioWaveForm.WavePeaks != null && AudioWaveForm.Visible) if (audioVisualizer.WavePeaks != null && audioVisualizer.Visible)
{ {
AudioWaveForm.ZoomFactor = 1.0; audioVisualizer.ZoomFactor = 1.0;
} }
} }
@ -8600,9 +8600,9 @@ namespace Nikse.SubtitleEdit.Forms
{ {
if (mediaPlayer != null && mediaPlayer.VideoPlayer != null) if (mediaPlayer != null && mediaPlayer.VideoPlayer != null)
{ {
Paragraph p = AudioWaveForm.NewSelectionParagraph; Paragraph p = audioVisualizer.NewSelectionParagraph;
if (p == null) if (p == null)
p = AudioWaveForm.RightClickedParagraph; p = audioVisualizer.RightClickedParagraph;
if (p != null) if (p != null)
{ {
@ -8616,18 +8616,18 @@ namespace Nikse.SubtitleEdit.Forms
private void toolStripButtonWaveFormZoomIn_Click(object sender, EventArgs e) private void toolStripButtonWaveFormZoomIn_Click(object sender, EventArgs e)
{ {
if (AudioWaveForm.WavePeaks != null && AudioWaveForm.Visible) if (audioVisualizer.WavePeaks != null && audioVisualizer.Visible)
{ {
AudioWaveForm.ZoomFactor += 0.1; audioVisualizer.ZoomFactor += 0.1;
SelectZoomTextInComboBox(); SelectZoomTextInComboBox();
} }
} }
private void toolStripButtonWaveFormZoomOut_Click(object sender, EventArgs e) private void toolStripButtonWaveFormZoomOut_Click(object sender, EventArgs e)
{ {
if (AudioWaveForm.WavePeaks != null && AudioWaveForm.Visible) if (audioVisualizer.WavePeaks != null && audioVisualizer.Visible)
{ {
AudioWaveForm.ZoomFactor -= 0.1; audioVisualizer.ZoomFactor -= 0.1;
SelectZoomTextInComboBox(); SelectZoomTextInComboBox();
} }
} }
@ -8637,7 +8637,7 @@ namespace Nikse.SubtitleEdit.Forms
ComboBoxZoomItem item = toolStripComboBoxWaveForm.SelectedItem as ComboBoxZoomItem; ComboBoxZoomItem item = toolStripComboBoxWaveForm.SelectedItem as ComboBoxZoomItem;
if (item != null) if (item != null)
{ {
AudioWaveForm.ZoomFactor = item.ZoomFactor; audioVisualizer.ZoomFactor = item.ZoomFactor;
} }
} }
@ -8647,7 +8647,7 @@ namespace Nikse.SubtitleEdit.Forms
foreach (object obj in toolStripComboBoxWaveForm.Items) foreach (object obj in toolStripComboBoxWaveForm.Items)
{ {
ComboBoxZoomItem item = obj as ComboBoxZoomItem; ComboBoxZoomItem item = obj as ComboBoxZoomItem;
if (Math.Abs(AudioWaveForm.ZoomFactor - item.ZoomFactor) < 0.001) if (Math.Abs(audioVisualizer.ZoomFactor - item.ZoomFactor) < 0.001)
{ {
toolStripComboBoxWaveForm.SelectedIndex = i; toolStripComboBoxWaveForm.SelectedIndex = i;
return; return;
@ -8669,8 +8669,8 @@ namespace Nikse.SubtitleEdit.Forms
private void toolStripButtonLockCenter_Click(object sender, EventArgs e) private void toolStripButtonLockCenter_Click(object sender, EventArgs e)
{ {
toolStripButtonLockCenter.Checked = !toolStripButtonLockCenter.Checked; toolStripButtonLockCenter.Checked = !toolStripButtonLockCenter.Checked;
AudioWaveForm.Locked = toolStripButtonLockCenter.Checked; audioVisualizer.Locked = toolStripButtonLockCenter.Checked;
Configuration.Settings.General.WaveFormCenter = AudioWaveForm.Locked; Configuration.Settings.General.WaveFormCenter = audioVisualizer.Locked;
} }
private void trackBarWaveFormPosition_ValueChanged(object sender, EventArgs e) private void trackBarWaveFormPosition_ValueChanged(object sender, EventArgs e)
@ -8729,7 +8729,7 @@ namespace Nikse.SubtitleEdit.Forms
addWaveForm.WavePeak.WritePeakSamples(peakWaveFileName); addWaveForm.WavePeak.WritePeakSamples(peakWaveFileName);
var audioPeakWave = new WavePeakGenerator(peakWaveFileName); var audioPeakWave = new WavePeakGenerator(peakWaveFileName);
audioPeakWave.GenerateAllSamples(); audioPeakWave.GenerateAllSamples();
AudioWaveForm.WavePeaks = audioPeakWave; audioVisualizer.WavePeaks = audioPeakWave;
timerWaveForm.Start(); timerWaveForm.Start();
} }
} }
@ -9473,7 +9473,7 @@ namespace Nikse.SubtitleEdit.Forms
_waveFormUnDocked = new WaveFormUnDocked(this, _formPositionsAndSizes); _waveFormUnDocked = new WaveFormUnDocked(this, _formPositionsAndSizes);
_formPositionsAndSizes.SetPositionAndSize(_waveFormUnDocked); _formPositionsAndSizes.SetPositionAndSize(_waveFormUnDocked);
var control = AudioWaveForm; var control = audioVisualizer;
groupBoxVideo.Controls.Remove(control); groupBoxVideo.Controls.Remove(control);
control.Top = 0; control.Top = 0;
control.Left = 0; control.Left = 0;
@ -9638,7 +9638,7 @@ namespace Nikse.SubtitleEdit.Forms
_videoControlsUnDocked = null; _videoControlsUnDocked = null;
ShowVideoPlayer(); ShowVideoPlayer();
AudioWaveForm.Visible = toolStripButtonToggleWaveForm.Checked; audioVisualizer.Visible = toolStripButtonToggleWaveForm.Checked;
trackBarWaveFormPosition.Visible = toolStripButtonToggleWaveForm.Checked; trackBarWaveFormPosition.Visible = toolStripButtonToggleWaveForm.Checked;
panelWaveFormControls.Visible = toolStripButtonToggleWaveForm.Checked; panelWaveFormControls.Visible = toolStripButtonToggleWaveForm.Checked;
if (!toolStripButtonToggleVideo.Checked) if (!toolStripButtonToggleVideo.Checked)
@ -9751,8 +9751,9 @@ namespace Nikse.SubtitleEdit.Forms
_videoFileName = null; _videoFileName = null;
_videoAudioTrackNumber = -1; _videoAudioTrackNumber = -1;
labelVideoInfo.Text = Configuration.Settings.Language.General.NoVideoLoaded; labelVideoInfo.Text = Configuration.Settings.Language.General.NoVideoLoaded;
AudioWaveForm.WavePeaks = null; audioVisualizer.WavePeaks = null;
AudioWaveForm.Invalidate(); audioVisualizer.ResetSpectrogram();
audioVisualizer.Invalidate();
} }
private void toolStripMenuItemVideo_DropDownOpening(object sender, EventArgs e) private void toolStripMenuItemVideo_DropDownOpening(object sender, EventArgs e)
@ -10275,15 +10276,15 @@ namespace Nikse.SubtitleEdit.Forms
private void contextMenuStripWaveForm_Opening(object sender, System.ComponentModel.CancelEventArgs e) private void contextMenuStripWaveForm_Opening(object sender, System.ComponentModel.CancelEventArgs e)
{ {
if (AudioWaveForm.IsSpectrogramAvailable) if (audioVisualizer.IsSpectrogramAvailable)
{ {
if (AudioWaveForm.ShowSpectrogram && AudioWaveForm.ShowWaveform) if (audioVisualizer.ShowSpectrogram && audioVisualizer.ShowWaveform)
{ {
showWaveformAndSpectrogramToolStripMenuItem.Visible = false; showWaveformAndSpectrogramToolStripMenuItem.Visible = false;
showOnlyWaveformToolStripMenuItem.Visible = true; showOnlyWaveformToolStripMenuItem.Visible = true;
showOnlySpectrogramToolStripMenuItem.Visible = true; showOnlySpectrogramToolStripMenuItem.Visible = true;
} }
else if (AudioWaveForm.ShowSpectrogram) else if (audioVisualizer.ShowSpectrogram)
{ {
showWaveformAndSpectrogramToolStripMenuItem.Visible = true; showWaveformAndSpectrogramToolStripMenuItem.Visible = true;
showOnlyWaveformToolStripMenuItem.Visible = true; showOnlyWaveformToolStripMenuItem.Visible = true;
@ -10307,20 +10308,20 @@ namespace Nikse.SubtitleEdit.Forms
private void showWaveformAndSpectrogramToolStripMenuItem_Click(object sender, EventArgs e) private void showWaveformAndSpectrogramToolStripMenuItem_Click(object sender, EventArgs e)
{ {
AudioWaveForm.ShowSpectrogram = true; audioVisualizer.ShowSpectrogram = true;
AudioWaveForm.ShowWaveform = true; audioVisualizer.ShowWaveform = true;
} }
private void showOnlyWaveformToolStripMenuItem_Click(object sender, EventArgs e) private void showOnlyWaveformToolStripMenuItem_Click(object sender, EventArgs e)
{ {
AudioWaveForm.ShowSpectrogram = false; audioVisualizer.ShowSpectrogram = false;
AudioWaveForm.ShowWaveform = true; audioVisualizer.ShowWaveform = true;
} }
private void showOnlySpectrogramToolStripMenuItem_Click(object sender, EventArgs e) private void showOnlySpectrogramToolStripMenuItem_Click(object sender, EventArgs e)
{ {
AudioWaveForm.ShowSpectrogram = true; audioVisualizer.ShowSpectrogram = true;
AudioWaveForm.ShowWaveform = false; audioVisualizer.ShowWaveform = false;
} }
} }

View File

@ -683,46 +683,46 @@
<value> <value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD2 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD0
CAAAAk1TRnQBSQFMAgEBAgEAAfgBBgH4AQYBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo CAAAAk1TRnQBSQFMAgEBAgIAAQcBAAEHARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/xEAEHUwABB1MAAQdSQA Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/8RABB1MAAQdTAAEHUkAAHs
AewB9AQAAewB9AQABHUB7AV1AewFdSQAAewBDwHyAwAB7AEPAfIDAAR1AewBDwR1AewBDwR1JAAB7AFJ AfQEAAHsAfQEAAR1AewFdQHsBXUkAAHsAQ8B8gMAAewBDwHyAwAEdQHsAQ8EdQHsAQ8EdSQAAewBSQEP
AQ8B8gIAAewBSQEPAfICAAR1AewBSQEPA3UB7AFJAQ8DdSAAAewBEQFDARUBFAFyAUkBDwEHAesBFAFy AfICAAHsAUkBDwHyAgAEdQHsAUkBDwN1AewBSQEPA3UgAAHsAREBQwEVARQBcgFJAQ8BBwHrARQBcgFJ
AUkBDwHyAQAB7AERAUMBFQEUAXIBSQEPAQcB6wEUAXIBSQEPAnUgAAHtAQgBeARyAUkBDwRyAUkBDwHy AQ8B8gEAAewBEQFDARUBFAFyAUkBDwEHAesBFAFyAUkBDwJ1IAAB7QEIAXgEcgFJAQ8EcgFJAQ8B8gHt
Ae0BCAF4BHIBSQEPBHIBSQEPAXUgAAGSAQgDmAJ4AnIBbQGYAngCcgFtAZIBCAOYAngCcgFtAZgCeAJy AQgBeARyAUkBDwRyAUkBDwF1IAABkgEIA5gCeAJyAW0BmAJ4AnIBbQGSAQgDmAJ4AnIBbQGYAngCcgFt
AW0gAAEcAcIECAJ4AewBmQIIAngB7AHzARwBwgQIAngB7AGZAggCeAHsAXUgAAGYARwBkgHtAewBCAGY IAABHAHCBAgCeAHsAZkCCAJ4AewB8wEcAcIECAJ4AewBmQIIAngB7AF1IAABmAEcAZIB7QHsAQgBmAHs
AewB8AHvAewBCAGYAewB8wEAAZgBHAGSAe0B7AEIAZgB7AHwAe8B7AEIAZgB7AJ1JAAB7QEIAewB8wIA AfAB7wHsAQgBmAHsAfMBAAGYARwBkgHtAewBCAGYAewB8AHvAewBCAGYAewCdSQAAe0BCAHsAfMCAAHt
Ae0BCAHsAfMCAAR1Ae0BCAHsA3UB7QEIAewDdSQAAZIB7AHzAwABkgHsAfMDAAR1AZIB7AR1AZIB7AR1 AQgB7AHzAgAEdQHtAQgB7AN1Ae0BCAHsA3UkAAGSAewB8wMAAZIB7AHzAwAEdQGSAewEdQGSAewEdSQA
JAABHAH0BAABHAH0BAAEdQEcBXUBHAV1MAAQdTAAEHUgAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEB ARwB9AQAARwB9AQABHUBHAV1ARwFdTAAEHUwABB1IAABQgFNAT4HAAE+AwABKAMAAUADAAEQAwABAQEA
AQABAQUAAYAXAAP/AQAC/wYAAv8GAAL/BgAB8wHPBgAB8QHHBgAB8AHDBwABAR8AAQEGAAHwAcMGAAHx AQEFAAGAFwAD/wEAAv8GAAL/BgAC/wYAAfMBzwYAAfEBxwYAAfABwwcAAQEfAAEBBgAB8AHDBgAB8QHH
AccGAAHzAc8GAAL/BgAC/wYACw== BgAB8wHPBgAC/wYAAv8GAAs=
</value> </value>
</data> </data>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">