Class: Deftones::DSP::DelayLine
- Inherits:
-
Object
- Object
- Deftones::DSP::DelayLine
- Defined in:
- lib/deftones/dsp/delay_line.rb
Instance Method Summary collapse
- #fractional_read(delay_samples) ⇒ Object private
-
#initialize(max_delay_samples) ⇒ DelayLine
constructor
A new instance of DelayLine.
- #read(delay_samples) ⇒ Object
- #tap(delay_samples, input_sample: 0.0, feedback: 0.0) ⇒ Object
- #write(sample) ⇒ Object
Constructor Details
#initialize(max_delay_samples) ⇒ DelayLine
Returns a new instance of DelayLine.
6 7 8 9 |
# File 'lib/deftones/dsp/delay_line.rb', line 6 def initialize(max_delay_samples) @buffer = Array.new([max_delay_samples.to_i + 2, 2].max, 0.0) @write_index = 0 end |
Instance Method Details
#fractional_read(delay_samples) ⇒ Object (private)
29 30 31 32 33 34 35 36 37 38 |
# File 'lib/deftones/dsp/delay_line.rb', line 29 def fractional_read(delay_samples) read_position = @write_index - delay_samples read_position += @buffer.length while read_position.negative? base_index = read_position.floor % @buffer.length next_index = (base_index + 1) % @buffer.length fraction = read_position - read_position.floor Helpers.flush_denormal(Helpers.lerp(@buffer[base_index], @buffer[next_index], fraction)) end |
#read(delay_samples) ⇒ Object
11 12 13 |
# File 'lib/deftones/dsp/delay_line.rb', line 11 def read(delay_samples) fractional_read(delay_samples.to_f) end |
#tap(delay_samples, input_sample: 0.0, feedback: 0.0) ⇒ Object
21 22 23 24 25 |
# File 'lib/deftones/dsp/delay_line.rb', line 21 def tap(delay_samples, input_sample: 0.0, feedback: 0.0) delayed_sample = read(delay_samples) write(input_sample + (delayed_sample * feedback)) delayed_sample end |
#write(sample) ⇒ Object
15 16 17 18 19 |
# File 'lib/deftones/dsp/delay_line.rb', line 15 def write(sample) @buffer[@write_index] = Helpers.flush_denormal(sample) @write_index = (@write_index + 1) % @buffer.length sample end |