Class: Wavify::DSP::Effects::StereoWidener

Inherits:
Object
  • Object
show all
Defined in:
lib/wavify/dsp/effects/stereo_widener.rb,
sig/effects.rbs

Overview

Mid/side stereo width processor.

Instance Method Summary collapse

Constructor Details

#initialize(width: 1.25) ⇒ StereoWidener

Returns a new instance of StereoWidener.

Parameters:

  • width: (Numeric) (defaults to: 1.25)


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

Parameters:

Returns:



31
32
33
# File 'lib/wavify/dsp/effects/stereo_widener.rb', line 31

def apply(buffer)
  DSP::Processor.render(self, buffer)
end

#build_runtimeStereoWidener

Returns:



35
36
37
# File 'lib/wavify/dsp/effects/stereo_widener.rb', line 35

def build_runtime
  dup.reset
end

#latencyFloat

Returns:

  • (Float)


47
48
49
# File 'lib/wavify/dsp/effects/stereo_widener.rb', line 47

def latency
  0.0
end

#lookaheadFloat

Returns:

  • (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

#resetStereoWidener

Stateless processor API compatibility.

Returns:



42
43
44
# File 'lib/wavify/dsp/effects/stereo_widener.rb', line 42

def reset
  self
end

#tail_durationFloat

Returns:

  • (Float)


57
58
59
# File 'lib/wavify/dsp/effects/stereo_widener.rb', line 57

def tail_duration
  0.0
end