Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /***********************************************************
- ***********************************************************
- ** **
- ** Codesnippets written by Madwin for MMP 2023 **
- ** **
- ** Not to be used freely. the code still has errors **
- ** It's intended to be used as starting point. **
- ** Code has not been checked and might still need **
- ** (a lot of) work. **
- ** **
- ** ℗ & © MadMedia Productions 2023 **
- ** **
- ***********************************************************
- ***********************************************************
- ** **
- ** -- Disclaimer: -- **
- ** **
- ** If code is used in private projects and/or for **
- ** study purposes please mention resource. Any other **
- ** use -whether commercial or non-commercial- is not **
- ** condoned by the author and violates his intent. **
- ** **
- ** [email protected] **
- ** **
- ***********************************************************
- ***********************************************************/
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using System.Windows.Forms;
- using CSCore;
- using CSCore.CoreAudioAPI;
- using CSCore.SoundOut;
- using CSCore.Streams.Effects;
- public class Equalizer
- {
- private const int BandCount = 12;
- private readonly ISoundOut _soundOut;
- private readonly IWaveSource _source;
- private readonly EqualizerEffect _equalizerEffect;
- public Equalizer(string audioFilePath)
- {
- _source = CodecFactory.Instance.GetCodec(audioFilePath)
- .ToSampleSource()
- .ToMono()
- .ToWaveSource();
- _equalizerEffect = new EqualizerEffect(_source, BandCount);
- _soundOut = new WasapiOut();
- _soundOut.Initialize(_equalizerEffect);
- }
- public void Play()
- {
- _soundOut.Play();
- }
- public void Stop()
- {
- _soundOut.Stop();
- }
- public Panel CreateEqualizerPanel()
- {
- var equalizerPanel = new Panel();
- equalizerPanel.BackColor = Color.Black;
- equalizerPanel.Dock = DockStyle.Fill;
- var levelMeterPanel = new Panel();
- levelMeterPanel.Dock = DockStyle.Left;
- levelMeterPanel.Width = 100;
- var slidersPanel = new Panel();
- slidersPanel.Dock = DockStyle.Fill;
- slidersPanel.Padding = new Padding(10);
- equalizerPanel.Controls.Add(levelMeterPanel);
- equalizerPanel.Controls.Add(slidersPanel);
- var levelMeters = new List<ProgressBar>();
- for (int i = 0; i < BandCount; i++)
- {
- var levelMeter = new ProgressBar();
- levelMeter.Orientation = Orientation.Vertical;
- levelMeter.Dock = DockStyle.Top;
- levelMeter.Height = 100;
- levelMeter.Width = 20;
- levelMeter.Style = ProgressBarStyle.Continuous;
- levelMeter.ForeColor = Color.LimeGreen;
- levelMeter.BackColor = Color.Black;
- levelMeter.Maximum = 100;
- levelMeter.Minimum = 0;
- levelMeter.Value = 0;
- levelMeterPanel.Controls.Add(levelMeter);
- levelMeters.Add(levelMeter);
- var slider = new TrackBar();
- slider.Orientation = Orientation.Vertical;
- slider.Dock = DockStyle.Left;
- slider.Width = 20;
- slider.Minimum = -20;
- slider.Maximum = 20;
- slider.Value = 0;
- slider.Scroll += (sender, e) =>
- {
- _equalizerEffect.SampleFilters[i].AverageGainDB = slider.Value;
- };
- slidersPanel.Controls.Add(slider);
- }
- _equalizerEffect.PropertyChanged += (sender, e) =>
- {
- if (e.PropertyName == nameof(EqualizerEffect.SampleFilters))
- {
- for (int i = 0; i < BandCount; i++)
- {
- slidersPanel.Controls[i].Enabled = _equalizerEffect.SampleFilters[i].IsAvailable;
- }
- }
- };
- _equalizerEffect.SampleFilters.PropertyChanged += (sender, e) =>
- {
- if (e.PropertyName == nameof(EqualizerFilter.IsAvailable))
- {
- for (int i = 0; i < BandCount; i++)
- {
- slidersPanel.Controls[i].Enabled = _equalizerEffect.SampleFilters[i].IsAvailable;
- }
- }
- };
- var levelMeterUpdateTimer = new Timer();
- levelMeterUpdateTimer.Interval = 100;
- levelMeterUpdateTimer.Tick += (sender, e) =>
- {
- for (int i = 0; i < BandCount; i++)
- {
- var level = _equalizerEffect.SampleFilters[i].AverageGainDB;
- levelMeters[i].Value = (int)Math.Max(0, Math.Min(level, 100));
- }
- };
- levelMeterUpdateTimer.Start();
- return equalizerPanel;
- }
- }
- /*
- To use this class, you can create an instance of the Equalizer class with the path to your audio file,
- call the Play method to start playback, and retrieve the Panel using the CreateEqualizerPanel method to
- display the equalizer UI in your application's form. Don't forget to reference CSCore in your project.
- */
Advertisement
Add Comment
Please, Sign In to add comment