Class: Deftones::Effects::FeedbackDelay
- Inherits:
-
Core::Effect
- Object
- Core::Effect
- Deftones::Effects::FeedbackDelay
- Defined in:
- lib/deftones/effect/feedback_delay.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#delay_time ⇒ Object
readonly
Returns the value of attribute delay_time.
-
#feedback ⇒ Object
readonly
Returns the value of attribute feedback.
Attributes inherited from Core::Effect
Instance Method Summary collapse
- #ensure_delay_line(channel_index) ⇒ Object private
-
#initialize(delay_time: "8n", feedback: 0.3, max_delay: 2.0, context: Deftones.context, **options) ⇒ FeedbackDelay
constructor
A new instance of FeedbackDelay.
- #process_effect(input_buffer, num_frames, start_frame, _cache, channel_index: 0) ⇒ Object private
Methods inherited from Core::Effect
#multichannel_process?, #normalize_channel_output, #process, #process_effect_block
Constructor Details
#initialize(delay_time: "8n", feedback: 0.3, max_delay: 2.0, context: Deftones.context, **options) ⇒ FeedbackDelay
Returns a new instance of FeedbackDelay.
8 9 10 11 12 13 14 |
# File 'lib/deftones/effect/feedback_delay.rb', line 8 def initialize(delay_time: "8n", feedback: 0.3, max_delay: 2.0, context: Deftones.context, **) super(context: context, **) @delay_time = Core::Signal.new(value: delay_time, units: :time, context: context) @feedback = Core::Signal.new(value: feedback, units: :number, context: context) @max_delay_samples = (max_delay * context.sample_rate).ceil @delay_lines = [] end |
Instance Attribute Details
#delay_time ⇒ Object (readonly)
Returns the value of attribute delay_time.
6 7 8 |
# File 'lib/deftones/effect/feedback_delay.rb', line 6 def delay_time @delay_time end |
#feedback ⇒ Object (readonly)
Returns the value of attribute feedback.
6 7 8 |
# File 'lib/deftones/effect/feedback_delay.rb', line 6 def feedback @feedback end |
Instance Method Details
#ensure_delay_line(channel_index) ⇒ Object (private)
30 31 32 33 34 35 36 |
# File 'lib/deftones/effect/feedback_delay.rb', line 30 def ensure_delay_line(channel_index) required = [channel_index.to_i, 0].max while @delay_lines.length <= required @delay_lines << DSP::DelayLine.new(@max_delay_samples) end @delay_lines[required] end |
#process_effect(input_buffer, num_frames, start_frame, _cache, channel_index: 0) ⇒ Object (private)
18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/deftones/effect/feedback_delay.rb', line 18 def process_effect(input_buffer, num_frames, start_frame, _cache, channel_index: 0) delays = @delay_time.process(num_frames, start_frame) feedbacks = @feedback.process(num_frames, start_frame) delay_line = ensure_delay_line(channel_index) Array.new(num_frames) do |index| delay_samples = delays[index] * context.sample_rate feedback = feedbacks[index].to_f.clamp(-0.999, 0.999) delay_line.tap(delay_samples, input_sample: input_buffer[index], feedback: feedback) end end |