/**
* Creates a feedback delay line.
* @param {Object} [options={}]
* @param {Number} [options.delay=0.5]
* @param {Number} [options.dry=1]
* @param {Number} [options.feedback=0.5]
* @param {Number} [options.maxDelayTime=1]
* @param {Number} [options.wet=0.5]
* @returns {syngen.synth~Plugin}
* @static
*/
syngen.effect.feedbackDelay = ({
delay: delayAmount = 0.5,
dry: dryAmount = 1,
feedback: feedbackAmount = 0.5,
maxDelayTime = 1,
wet: wetAmount = 0.5,
} = {}) => {
const context = syngen.context()
const delay = context.createDelay(maxDelayTime),
dry = context.createGain(),
feedback = context.createGain(),
input = context.createGain(),
output = context.createGain(),
wet = context.createGain()
input.connect(delay)
input.connect(dry)
delay.connect(feedback)
delay.connect(wet)
feedback.connect(delay)
dry.connect(output)
wet.connect(output)
delay.delayTime.value = delayAmount
dry.gain.value = dryAmount
feedback.gain.value = feedbackAmount
input.gain.value = 1
output.gain.value = 1
wet.gain.value = wetAmount
return {
input,
output,
param: {
dry: dry.gain,
delay: delay.delayTime,
feedback: feedback.gain,
gain: output.gain,
wet: wet.gain,
},
}
}