2 using System.Collections.Generic;
3 using System.ComponentModel;
9 using System.Threading;
10 using System.Threading.Tasks;
11 using System.Windows.Forms;
12 using System.Windows.Forms.DataVisualization.Charting;
13 using Timer = System.Timers.Timer;
17 public partial class MainForm : Form
19 private Timer progressReset = new Timer();
20 private Series wave = new Series();
24 InitializeComponent();
27 private void MainForm_Load(object sender, EventArgs args)
29 var waveIn = new NAudio.Wave.WaveInEvent();
30 waveIn.DeviceNumber = 0;
31 waveIn.WaveFormat = new NAudio.Wave.WaveFormat(16000, 1);
32 waveIn.DataAvailable +=
33 (object waveSender, NAudio.Wave.WaveInEventArgs e) =>
35 //Dynamic waveform buffer offset, i want to fucking die btw
36 short[] waveValues = new short[(int)(e.BytesRecorded * .55)];
37 for (int i = 0 ; i < e.BytesRecorded; i += 2)
38 waveValues[(i / 2) + ((waveValues.Length - e.BytesRecorded / 2) / 2)] = (short)(BitConverter.ToInt16(e.Buffer, i) / 50);
39 waveform.Invoke((MethodInvoker)(() => waveform.Series[0].Points.DataBindY(waveValues)));
40 UpdateVolumeMeter(Math.Abs(waveValues[waveValues.Length / 2]));
42 waveIn.StartRecording();
44 //Volume meter de-incrimenter
46 progressReset.Interval = 50;
47 progressReset.Elapsed += (o, arg) =>
49 if (progressBar.Value > 0)
50 progressBar.Invoke((MethodInvoker)(() => progressBar.Value--));
53 progressReset.Start();
56 wave.ChartType = SeriesChartType.Area;
57 wave.Color = Color.Blue;
60 private void UpdateVolumeMeter(int data)
62 if(data < progressBar.Maximum && data > progressBar.Value)
63 progressBar.Invoke((MethodInvoker)(() => progressBar.Value = data));
66 private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
68 progressReset.Dispose();