| 12345678910111213141516171819202122232425262728293031323334353637 |
- using System;
- using System.Runtime.CompilerServices;
- namespace Ryujinx.Audio.Renderer.Dsp.Effect
- {
- public interface IDelayLine
- {
- uint CurrentSampleCount { get; }
- uint SampleCountMax { get; }
- void SetDelay(float delayTime);
- float Read();
- float Update(float value);
- float TapUnsafe(uint sampleIndex, int offset);
- float Tap(uint sampleIndex);
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static float Tap(Span<float> workBuffer, int baseIndex, int sampleIndex, int delaySampleCount)
- {
- int targetIndex = baseIndex - sampleIndex;
- if (targetIndex < 0)
- {
- targetIndex += delaySampleCount;
- }
- return workBuffer[targetIndex];
- }
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public static uint GetSampleCount(uint sampleRate, float delayTime)
- {
- return (uint)MathF.Round(sampleRate * delayTime);
- }
- }
- }
|