class SynthBlocks::Fx::Delay
Simple delay with mix and feedback parameters Currently doesn't really have a variable delay time, I'll tackle that when I need it. It uses a simple ring buffer implementation and delay time is only exact down to the sample.
Public Class Methods
new(sample_rate, time: 0.2, mix: 0.5, feedback: 0.4, &block)
click to toggle source
time is given in seconds
mix (0 = no delay, 1 = only delay)
feedback (0 = zero feedback, 1 = full feedback (not advised))
if given a block it will call the block from the run method to process the feedback signal
# File lib/synth_blocks/fx/delay.rb, line 20 def initialize(sample_rate, time: 0.2, mix: 0.5, feedback: 0.4, &block) @buffer = Array.new((sample_rate.to_f * time).floor) @block = block @pointer = 0 @mix = mix @feedback = feedback end
Public Instance Methods
run(input)
click to toggle source
run delay
# File lib/synth_blocks/fx/delay.rb, line 30 def run(input) old_pointer = @pointer @pointer = (@pointer + 1) % @buffer.length delayed = (@buffer[@pointer] || 0.0) if @block delayed = @block.call(delayed) end @buffer[old_pointer] = input + (feedback * delayed) input * (1.0 - mix) + delayed * mix end