Hi,
Looking closely to the method set_echo(self, delay) I noticed that the echo is created by
adding the same signal within the sample data with a delay.
This will drive the sound effect to saturation as two signals are added together without being adjusted ( /2)
Kind Regards