Skip to content

Commit aab1ea3

Browse files
committed
Added feedback control to AudioEffects Delay
1 parent bf1f2c1 commit aab1ea3

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

src/AudioEffects/AudioEffect.h

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -282,8 +282,9 @@ class Tremolo : public AudioEffect {
282282
class Delay : public AudioEffect {
283283
public:
284284
/// e.g. depthPercent=50, ms=1000, sampleRate=44100
285-
Delay(uint16_t duration_ms=1000, float depthPercent=50, uint32_t sampleRate=44100) {
285+
Delay(uint16_t duration_ms=1000, float depthPercent=50, float feedbackAmount=0.3, uint32_t sampleRate=44100) {
286286
this->sampleRate = sampleRate;
287+
p_feedback = feedbackAmount;
287288
p_percent = depthPercent;
288289
p_ms = duration_ms;
289290
}
@@ -306,16 +307,26 @@ class Delay : public AudioEffect {
306307
return p_percent;
307308
}
308309

310+
void setFeedback(float feedback){
311+
p_feedback = feedback;
312+
}
313+
314+
uint8_t feedback() {
315+
return p_feedback;
316+
}
317+
309318
effect_t process(effect_t input) {
310319
if (!active()) return input;
311320

312321
updateBufferSize();
313322
// get value from buffer
314323
int32_t value = (p_history->available()<sampleCount) ? input : p_history->read();
315-
// add actual input value
316-
p_history->write(input);
324+
// add feedback decay
325+
int32_t delayValue = (value*p_feedback);
326+
// add input and delay to the buffer
327+
p_history->write(input+delayValue);
317328
// mix input with result
318-
return (value * p_percent) + (input * (1.0 - p_percent));
329+
return (delayValue * p_percent) + (input * (1.0 - p_percent));
319330
}
320331

321332
Delay *clone() {
@@ -325,6 +336,7 @@ class Delay : public AudioEffect {
325336
protected:
326337
RingBuffer<effect_t>* p_history=nullptr;
327338
float p_percent;
339+
float p_feedback;
328340
uint16_t p_ms;
329341
uint16_t sampleCount=0;
330342
uint32_t sampleRate;

0 commit comments

Comments
 (0)