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