Class: Wavify::DSP::Effects::StereoWidener
- Inherits:
-
Object
- Object
- Wavify::DSP::Effects::StereoWidener
- Defined in:
- lib/wavify/dsp/effects/stereo_widener.rb,
sig/effects.rbs
Overview
Mid/side stereo width processor.
Instance Method Summary collapse
- #apply(buffer) ⇒ Core::SampleBuffer
- #build_runtime ⇒ StereoWidener
-
#initialize(width: 1.25) ⇒ StereoWidener
constructor
A new instance of StereoWidener.
- #latency ⇒ Float
- #lookahead ⇒ Float
-
#process(buffer) ⇒ Wavify::Core::SampleBuffer
Applies mid/side width adjustment to a stereo buffer.
-
#reset ⇒ StereoWidener
Stateless processor API compatibility.
- #tail_duration ⇒ Float
Constructor Details
#initialize(width: 1.25) ⇒ StereoWidener
Returns a new instance of StereoWidener.
8 9 10 |
# File 'lib/wavify/dsp/effects/stereo_widener.rb', line 8 def initialize(width: 1.25) @width = validate_width!(width) end |
Instance Method Details
#apply(buffer) ⇒ Core::SampleBuffer
31 32 33 |
# File 'lib/wavify/dsp/effects/stereo_widener.rb', line 31 def apply(buffer) DSP::Processor.render(self, buffer) end |
#build_runtime ⇒ StereoWidener
35 36 37 |
# File 'lib/wavify/dsp/effects/stereo_widener.rb', line 35 def build_runtime dup.reset end |
#latency ⇒ Float
47 48 49 |
# File 'lib/wavify/dsp/effects/stereo_widener.rb', line 47 def latency 0.0 end |
#lookahead ⇒ Float
52 53 54 |
# File 'lib/wavify/dsp/effects/stereo_widener.rb', line 52 def lookahead 0.0 end |
#process(buffer) ⇒ Wavify::Core::SampleBuffer
Applies mid/side width adjustment to a stereo buffer.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/wavify/dsp/effects/stereo_widener.rb', line 16 def process(buffer) raise InvalidParameterError, "buffer must be Core::SampleBuffer" unless buffer.is_a?(Core::SampleBuffer) raise InvalidParameterError, "StereoWidener requires stereo input" unless buffer.format.channels == 2 float_format = buffer.format.with(sample_format: :float, bit_depth: 32) float_buffer = buffer.convert(float_format) widened = float_buffer.samples.each_slice(2).flat_map do |left, right| mid = (left + right) / 2.0 side = ((left - right) / 2.0) * @width [mid + side, mid - side] end Wavify::Core::SampleBuffer.new(widened, float_format).convert(buffer.format) end |
#reset ⇒ StereoWidener
Stateless processor API compatibility.
42 43 44 |
# File 'lib/wavify/dsp/effects/stereo_widener.rb', line 42 def reset self end |
#tail_duration ⇒ Float
57 58 59 |
# File 'lib/wavify/dsp/effects/stereo_widener.rb', line 57 def tail_duration 0.0 end |