/// <summary> /// Генерация новых выходных данных. /// </summary> /// <param name="left">Левый канал выходного сигнала.</param> /// <param name="right">Правый канал выходного сигнала.</param> public void Process(out float left, out float right) { // Сглаживание значений параметров. masterVolumeFilter.Process(); for (int i = 0; i < Downsampler.Order; ++i) { var voicesOutput = VoicesManager.Process(); var saturationOutput = DistortionManager.Process(voicesOutput); samplesForOversampling[i] = saturationOutput; } var output = (float)Downsampler.Process(samplesForOversampling); DelayManager.Process(output, output, out left, out right); left *= masterVolume; right *= masterVolume; }
/// <summary> /// Обработка новых входных данных. /// </summary> /// <param name="input">Входящий сигнал</param> /// <returns>Выходящий сигнал</returns> public float Process(float input) { ampFilter.Process(); mixFilter.Process(); asymmetryFilter.Process(); input *= amp; input = lowPass.Process(input); if (mode == DistortionMode.None) { return(dcBlocker.Process(input)); } else { var output = currentDistortion.Process(input + dcOffset); output = dcBlocker.Process(output); return(dryCoeff * input + wetCoeff * output); } }
/// <summary> /// Обработка новых входных данных. /// </summary> /// <param name="inputL">Левый канал входного сигнала</param> /// <param name="inputR">Правый канал входного сигнала</param> /// <param name="outputL">Левый канал выходного сигнала.</param> /// <param name="outputR">Правый канал выходного сигнала.</param> public void Process(float inputL, float inputR, out float outputL, out float outputR) { // Сглаживание значений параметров. timeFilter.Process(); mixFilter.Process(); stereoAmountFilter.Process(); if (mode == StereoMode.None) { outputL = inputL; outputR = inputR; } else { var lfoCoeff = 1 + MaxLfoDepth * lfoDepth * lfo.Process(); currentDelay.SetDelay(Math.Min(maxDelay, delay * lfoCoeff)); currentDelay.Process(inputL, inputR, out var wetL, out var wetR); outputL = dryCoeff * inputL + wetSign * wetCoeff * wetL; outputR = dryCoeff * inputL + wetSign * wetCoeff * wetR; } }
/// <summary> /// Метод, выполняющий обновление всех сглаживающих фильтров. /// </summary> public void Process() { cutoffMultiplierFilter.Process(); }
/// <summary> /// Метод, выполняющий обновление всех сглаживающих фильтров. /// </summary> public void Process() { pitchMultiplierFilter.Process(); }
/// <summary> /// Метод, выполняющий обновление всех сглаживающих фильтров. /// </summary> public void Process() { envelopeAmplitudeFilter.Process(); }