Sound mit Equalizer [geschlossen]
Frage
Seit ein paar Tagen versuche ich einen Equalizer mit C # zu erstellen.Ich habe NAudio ziemlich oft gesehen, aber ich konnte keinen funktionierenden Equalizer finden, der mit Naudio funktionieren würde.Jetzt, nach ein paar Tagen, bin ich endlich hier @stackoverflow und hoffentlich kennen Sie eine Möglichkeit, einen Equalizer mit c # zu erstellen.
PS:Ich habe das System auch ausprobiert.Medium.Tonabnehmer.Aber dieser SoundPlayer unterstützt nicht einmal etwas, was mit DSP zu tun hat.Gibt es also eine andere Audiobibliothek, die mit "reinem" Audio außerhalb funktioniert?
Lösung
Gibt es also eine andere Audiobibliothek, die mit "reinem" Audio außerhalb funktioniert?
Ja, da ist einer: https://cscore.codeplex.com
Nach dem EqualizerSample, Sie können den Equalizer so verwenden:
using CSCore;
using CSCore.Codecs;
using CSCore.SoundOut;
using CSCore.Streams;
using System;
using System.Threading;
...
private static void Main(string[] args)
{
const string filename = @"C:\Temp\test.mp3";
EventWaitHandle waitHandle = new AutoResetEvent(false);
try
{
//create a source which provides audio data
using(var source = CodecFactory.Instance.GetCodec(filename))
{
//create the equalizer.
//You can create a custom eq with any bands you want, or you can just use the default 10 band eq.
Equalizer equalizer = Equalizer.Create10BandEqualizer(source);
//create a soundout to play the source
ISoundOut soundOut;
if(WasapiOut.IsSupportedOnCurrentPlatform)
{
soundOut = new WasapiOut();
}
else
{
soundOut = new DirectSoundOut();
}
soundOut.Stopped += (s, e) => waitHandle.Set();
IWaveSource finalSource = equalizer.ToWaveSource(16); //since the equalizer is a samplesource, you have to convert it to a raw wavesource
soundOut.Initialize(finalSource); //initialize the soundOut with the previously created finalSource
soundOut.Play();
/*
* You can change the filter configuration of the equalizer at any time.
*/
equalizer.SampleFilters[0].SetGain(20); //eq set the gain of the first filter to 20dB (if needed, you can set the gain value for each channel of the source individually)
//wait until the playback finished
//of course that is optional
waitHandle.WaitOne();
//remember to dispose and the soundout and the source
soundOut.Dispose();
}
}
catch(NotSupportedException ex)
{
Console.WriteLine("Fileformat not supported: " + ex.Message);
}
catch(Exception ex)
{
Console.WriteLine("Unexpected exception: " + ex.Message);
}
}
Sie können den Equalizer nach Ihren Wünschen konfigurieren.Und da es zu 100% in Echtzeit läuft, werden alle Änderungen sofort übernommen.Bei Bedarf besteht auch die Möglichkeit, auf jeden Kanal separat zuzugreifen.