【问题标题】:How can I use a decay envelope with nAudio signal generator?如何将衰减包络与 nAudio 信号发生器一起使用?
【发布时间】:2020-07-22 12:43:41
【问题描述】:

我正在学习 c# 和 NAudio。在我的项目中,我需要使用衰减包络播放一系列短音。看起来 ADSR Envelope 样本提供程序会执行此操作,但我似乎无法使其与信号发生器一起使用。当我设置释放时间时,我只是得到一个恒定的音调。 谁能告诉我我做错了什么? 这是一个非常简单的控制台应用程序,我正在尝试使用它来测试它:

    class Program
    {
        public SignalGenerator wg;
        public IWavePlayer driverOut;
        static void Main(string[] args)
        {
            // Init Audio
            var driverOut = new WaveOutEvent();
            var wg = new SignalGenerator();
            var adsr = new AdsrSampleProvider(wg.ToMono());
            wg.Type = SignalGeneratorType.Sin;
            adsr.AttackSeconds = 0;
            adsr.ReleaseSeconds = (float)1;
            wg.Take(TimeSpan.FromMilliseconds(500));
            driverOut.Init(wg);
            wg.Frequency = 500  ;
            wg.Gain = 0.1;  
            
            driverOut.Play();
            Thread.Sleep(3000);
        }
    }

【问题讨论】:

    标签: c# naudio


    【解决方案1】:

    因此您可以通过调用adsr.Stop() 来触发发布阶段。这是有道理的,因为键盘上的释放阶段发生在您释放键之后,但它并不是特别直观。

    class Program
    {
        static void Main(string[] args)
        {
            var wg = new SignalGenerator
            {
                Type = SignalGeneratorType.Sin,
                Frequency = 500,
                Gain = 0.1
            };
    
            var adsr = new AdsrSampleProvider(wg.ToMono())
            {
                AttackSeconds = 0.3f,
                ReleaseSeconds = 0.3f
            };
                
            using (var driverOut = new WaveOutEvent())
            {
                driverOut.Init(adsr);
                driverOut.Play();
    
                Thread.Sleep(500);
    
                adsr.Stop();
    
                while (driverOut.PlaybackState == PlaybackState.Playing) { }
            }
        }
    }
    

    【讨论】:

    • 谢谢!不幸的是,这正是我之前看到的。我可以让攻击淡入信号,但释放不会淡出它。我将 Take 值设置为 5 秒,并将 ADSR 释放设置为 1 秒,声音在最后就中断了。它不会淡出。
    • 是的,我明白你的意思
    • 看一下NAudio源代码,这行看起来有点奇怪-github.com/naudio/NAudio/blob/master/NAudio/Wave/…
    猜你喜欢
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 2018-10-27
    • 1970-01-01
    • 2020-04-13
    相关资源
    最近更新 更多