/// <summary> /// Изменяет текущий объект дилэя на новый. /// </summary> /// <param name="newDelay">Новый объект дилэя.</param> private void ChangeDelay(IDelay newDelay) { currentDelay = newDelay; currentDelay?.Reset(); currentDelay?.SetFeedback(feedback); currentDelay?.SetStereo(stereoAmount); }
/// <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); }
private void Run() { while (_status) { List <T> items = Poll(); if (items.Count == 0) { _delay.Wait(); } else { _callback(items); _delay.Reset(); } } }