예제 #1
0
 /// <summary>
 /// Изменяет текущий объект дилэя на новый.
 /// </summary>
 /// <param name="newDelay">Новый объект дилэя.</param>
 private void ChangeDelay(IDelay newDelay)
 {
     currentDelay = newDelay;
     currentDelay?.Reset();
     currentDelay?.SetFeedback(feedback);
     currentDelay?.SetStereo(stereoAmount);
 }
예제 #2
0
        /// <summary>
        /// Инициализирует параметры с помощью переданной фабрики параметров.
        /// </summary>
        /// <param name="factory">Фабрика параметров</param>
        protected override void InitializeParameters(ParameterFactory factory)
        {
            // Параметр типа дилэя.
            ModeManager = factory.CreateParameterManager(
                name: "MODE",
                valueChangedHandler: SetMode);

            // Параметр времени задержки.
            TimeManager = factory.CreateParameterManager(
                name: "TIME",
                defaultValue: 0.8f,
                valueChangedHandler: SetTimeTarget);
            timeFilter = new ParameterFilter(UpdateTime, 0, 100);
            TimeManager.PropertyChanged += (sender, e) =>
            {
                if (e.PropertyName == "ActiveParameter")
                {
                    currentDelay?.Reset();
                }
            };

            // Параметр коэффициента обратной связи.
            FeedbackManager = factory.CreateParameterManager(
                name: "FB",
                defaultValue: 0.5f,
                valueChangedHandler: SetFeedback);

            // Параметр стерео-эффекта.
            StereoAmountManager = factory.CreateParameterManager(
                name: "STER",
                defaultValue: 0.5f,
                valueChangedHandler: SetStereoAmountTarget);
            stereoAmountFilter = new ParameterFilter(UpdateStereoAmount, 0, 100);

            // Параметр количества выходного и входного сигналов.
            MixManager = factory.CreateParameterManager(
                name: "MIX",
                defaultValue: 0.5f,
                valueChangedHandler: SetMixTarget);
            mixFilter = new ParameterFilter(UpdateMix, 0);

            // Параметр инвертирования выходного сигнала.
            InvertManager = factory.CreateParameterManager(
                name: "INV",
                valueChangedHandler: SetInvert);

            // Параметр частоты генератора низких частот.
            LfoRateManager = factory.CreateParameterManager(
                name: "RATE",
                valueChangedHandler: SetLfoRate);

            // Параметр амплитуды генератора низких частот.
            LfoDepthManager = factory.CreateParameterManager(
                name: "DEPTH",
                valueChangedHandler: SetLfoDepth);
        }
예제 #3
0
        private void Run()
        {
            while (_status)
            {
                List <T> items = Poll();

                if (items.Count == 0)
                {
                    _delay.Wait();
                }
                else
                {
                    _callback(items);
                    _delay.Reset();
                }
            }
        }