2014-02-25 11 views
6

Seit ein paar Tagen versuche ich einen Equalizer mit C# zu erstellen. sah NAudio ziemlich viel Zeit, 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 weißt du einen Weg einen Equalizer mit C# zu erstellen.Sound mit Equalizer

PS: Ich habe auch den System.Media.SoundPlayer ausprobiert. Aber der SoundPlayer unterstützt überhaupt nichts, was mit DSP zu tun hat. Gibt es also eine andere Audiobibliothek, die mit "reinem" Audio draußen arbeitet?

Antwort

12

So gibt es eine andere Audio-Bibliothek, die außen mit "reinem" Audio funktioniert?

Ja, es gibt ein: https://cscore.codeplex.com

Nach dem EqualizerSample, können Sie den Equalizer so verwenden können:

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 konfigurieren, was immer Sie wollen. Und da es zu 100% in Echtzeit läuft, werden alle Änderungen sofort angewendet. Bei Bedarf besteht auch die Möglichkeit, auf jeden Kanal separat zuzugreifen.

+1

Hallo! Heute habe ich den CSCORE aktualisiert, es hat ein Problem gelöst, aber ein anderes Problem gemacht! Jetzt ist das Problem, Equalizer zu verwenden, ist nicht das selbe wie vorher (dieser Code) und ich konnte nicht herausfinden, wie man es benutzt. kannst du mir bitte helfen? – ACE