DecayDelay.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. namespace Ryujinx.Audio.Renderer.Dsp.Effect
  2. {
  3. public class DecayDelay : IDelayLine
  4. {
  5. private readonly IDelayLine _delayLine;
  6. public uint CurrentSampleCount => _delayLine.CurrentSampleCount;
  7. public uint SampleCountMax => _delayLine.SampleCountMax;
  8. private float _decayRate;
  9. public DecayDelay(IDelayLine delayLine)
  10. {
  11. _decayRate = 0.0f;
  12. _delayLine = delayLine;
  13. }
  14. public void SetDecayRate(float decayRate)
  15. {
  16. _decayRate = decayRate;
  17. }
  18. public float Update(float value)
  19. {
  20. float delayLineValue = _delayLine.Read();
  21. float processedValue = value - (_decayRate * delayLineValue);
  22. return _delayLine.Update(processedValue) + processedValue * _decayRate;
  23. }
  24. public void SetDelay(float delayTime)
  25. {
  26. _delayLine.SetDelay(delayTime);
  27. }
  28. public float Read()
  29. {
  30. return _delayLine.Read();
  31. }
  32. public float TapUnsafe(uint sampleIndex, int offset)
  33. {
  34. return _delayLine.TapUnsafe(sampleIndex, offset);
  35. }
  36. public float Tap(uint sampleIndex)
  37. {
  38. return _delayLine.Tap(sampleIndex);
  39. }
  40. }
  41. }