| 14 | using Delay = signalsmith::delay::Delay<double, signalsmith::delay::InterpolatorNearest>; |
| 15 | |
| 16 | struct SingleChannelFeedback { |
| 17 | double delayMs = 80; |
| 18 | double decayGain = 0.85; |
| 19 | |
| 20 | int delaySamples; |
| 21 | Delay delay; |
| 22 | |
| 23 | void configure(double sampleRate) { |
| 24 | delaySamples = delayMs*0.001*sampleRate; |
| 25 | delay.resize(delaySamples + 1); |
| 26 | delay.reset(); // Start with all 0s |
| 27 | } |
| 28 | |
| 29 | double process(double input) { |
| 30 | double delayed = delay.read(delaySamples); |
| 31 | |
| 32 | double sum = input + delayed*decayGain; |
| 33 | delay.write(sum); |
| 34 | |
| 35 | return delayed; |
| 36 | } |
| 37 | }; |
| 38 | |
| 39 | |
| 40 | template<int channels=8> |