1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- using BeatLyrics.Tool.Utils;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Windows.Forms;
- using System.Windows.Forms.DataVisualization.Charting;
- namespace BeatLyrics.Tool.Dialogs
- {
- internal partial class PlotDialog : Form
- {
- private readonly SpectrumAnalyzer.SaResult[] _items;
- private readonly int _blockInMs;
- public PlotDialog(SpectrumAnalyzer.SaResult[] items, int blockInMs)
- {
- _items = items;
- _blockInMs = blockInMs;
- InitializeComponent();
- SelectTrackBar.Maximum = items.Length - 1;
- UpdateChart();
- }
- private void UpdateChart()
- {
- MainChart.Series["Series1"].Points.Clear();
- var item = _items[SelectTrackBar.Value];
- var maxFreq = item.FreqAxis.Max();
- var rngFreqMax = maxFreq * (MaxFreqTrackBar.Value / 10000.0);
- var rngFreqMin = maxFreq * (MinFreqTrackBar.Value / 10000.0);
- var minValue = item.Values.Min();
- var rngValue = item.Values.Max() - minValue;
- var rngValueMin = minValue + rngValue * (MinValueTrackBar.Value / 10000.0);
- var rngValueMax = minValue + rngValue * (MaxValueTrackBar.Value / 10000.0);
- var axis = new List<double>();
- var values = new List<double>();
- for (var i = 0; i < item.FreqAxis.Length; i++)
- {
- if (item.FreqAxis[i] >= rngFreqMin && item.FreqAxis[i] <= rngFreqMax
- && item.Values[i] >= rngValueMin && item.Values[i] <= rngValueMax)
- {
- axis.Add(item.FreqAxis[i]);
- values.Add(item.Values[i]);
- }
- }
- InfoLabel.Text = $"Pos:{TimeSpan.FromMilliseconds(SelectTrackBar.Value * _blockInMs)}";
- MainChart.Series["Series1"].Points.DataBindXY(axis, values);
- }
- private void SelectTrackBar_Scroll(object sender, EventArgs e)
- {
- UpdateChart();
- OggAudioPlayer.Position = TimeSpan.FromMilliseconds(_blockInMs * SelectTrackBar.Value);
- }
- private void MaxTrackBar_Scroll(object sender, EventArgs e) => UpdateChart();
- private void MinTrackBar_Scroll(object sender, EventArgs e) => UpdateChart();
- private void MinValueTrackBar_Scroll(object sender, EventArgs e) => UpdateChart();
- private void MaxValueTrackBar_Scroll(object sender, EventArgs e) => UpdateChart();
- private void SelectTrackBar_MouseDown(object sender, MouseEventArgs e) => OggAudioPlayer.Play();
- private void SelectTrackBar_MouseUp(object sender, MouseEventArgs e) => OggAudioPlayer.Stop();
- private void MainChart_Click(object sender, EventArgs e) =>
- MainChart.Series["Series1"].ChartType = MainChart.Series["Series1"].ChartType == SeriesChartType.Line
- ? SeriesChartType.Column
- : SeriesChartType.Line;
- }
- }
|