class AudioStream::Fx::LowShelfFilter
Public Class Methods
create(soundinfo, freq:, q: DEFAULT_Q, gain: 1.0)
click to toggle source
@param soundinfo [AudioStream::SoundInfo] @param freq [Float] Cutoff frequency @param q [Float] Quality factor @param gain [AudioStream::Decibel] Amplification level at cutoff frequency
# File lib/audio_stream/fx/low_shelf_filter.rb, line 32 def self.create(soundinfo, freq:, q: DEFAULT_Q, gain: 1.0) filter = new(soundinfo) filter.update_coef(freq: freq, q: q, gain: gain) filter end
Public Instance Methods
update_coef(freq:, q:, gain:)
click to toggle source
# File lib/audio_stream/fx/low_shelf_filter.rb, line 5 def update_coef(freq:, q:, gain:) if Decibel===gain gain = gain.db end omega = 2.0 * Math::PI * freq / @samplerate alpha = Math.sin(omega) / (2.0 * q) a = 10.0 ** (gain / 40.0) beta = Math.sqrt(a) / q a0 = (a+1) + (a-1) * Math.cos(omega) + beta * Math.sin(omega) a1 = -2.0 * ((a-1) + (a+1) * Math.cos(omega)) a2 = (a+1) + (a-1) * Math.cos(omega) - beta * Math.sin(omega) b0 = a * ((a+1) - (a-1) * Math.cos(omega) + beta * Math.sin(omega)) b1 = 2.0 * a * ((a-1) - (a+1) * Math.cos(omega)) b2 = a * ((a+1) - (a-1) * Math.cos(omega) - beta * Math.sin(omega)) @coef = Vdsp::Biquad::Coefficient.new(b0/a0, b1/a0, b2/a0, a1/a0, a2/a0) @biquads.each {|biquad| biquad.coefficients = @coef } end