微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 带均衡器的声音

几天后,我试图用C#创建一个均衡器.
看过NAudio很多时间,但我找不到任何适用于naudio的均衡器.
现在几天之后,我终于在@stackoverflow,希望你知道一种使用c#创建均衡器的方法.

PS:我也尝试过System.Media.soundplayer.但Soundplayer甚至不支持任何与dsp有关的东西.那么还有另一个音频库可以在外面使用“纯”音频吗?

解决方法

So is there another audio library which works with “pure” audio outside?

是的,有一个https://cscore.codeplex.com

根据EqualizerSample,你可以像这样使用均衡器:

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);
    }
}

您可以将均衡器配置为您想要的.由于它实时运行100%,因此所有更改都会立即应用.如果需要,还可以单独访问修改每个通道.

原文地址:https://www.jb51.cc/csharp/97389.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐