From be14891fd17aa9c4c8e8b18c6c761c79cac99b05 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 6 Jan 2017 10:48:39 +0000 Subject: rg_state: fix no-op gain detection Seeing tiny (or zero) values for the "gain" effect is an eyesore in process table output, and a waste of CPU cycles in sox. So stop using the "gain" effect for imperceptible changes in volume. While we're at it, remove the pointless knobs for setting this, too. They were never documented and I doubt anybody would want to tweak them at runtime. --- lib/dtas/player/client_handler.rb | 3 +-- lib/dtas/rg_state.rb | 11 +++-------- 2 files changed, 4 insertions(+), 10 deletions(-) (limited to 'lib/dtas') diff --git a/lib/dtas/player/client_handler.rb b/lib/dtas/player/client_handler.rb index 05704c0..b17e90b 100644 --- a/lib/dtas/player/client_handler.rb +++ b/lib/dtas/player/client_handler.rb @@ -274,8 +274,7 @@ module DTAS::Player::ClientHandler # :nodoc: when "fallback_track" rv = set_bool(io, kv, v) { |b| @rg.fallback_track = b } rv == true or return rv - when %r{(?:gain_threshold|norm_threshold| - preamp|norm_level|fallback_gain|volume)[+-]?\z}x + when %r{(?:preamp|norm_level|fallback_gain|volume)[+-]?\z}x rv = adjust_numeric(io, @rg, k, v) rv == true or return rv end diff --git a/lib/dtas/rg_state.rb b/lib/dtas/rg_state.rb index 1452158..7af67e1 100644 --- a/lib/dtas/rg_state.rb +++ b/lib/dtas/rg_state.rb @@ -22,8 +22,6 @@ class DTAS::RGState # :nodoc: RG_DEFAULT = { "volume" => 1.0, # skip the effect if the adjustment is too small to be noticeable - "gain_threshold" => 0.00000001, # in dB - "norm_threshold" => 0.00000001, "preamp" => 0, # no extra adjustment # "mode" => "album_gain", # nil: off @@ -73,23 +71,21 @@ class DTAS::RGState # :nodoc: when -1 then return 'gain -192' when 1 then return 'gain 192' else - sprintf('gain %0.8g', val).freeze + val.abs <= 0.00000001 and return + sprintf('gain %0.8f', val).freeze end end # returns a dB argument to the "gain" effect, nil if nothing found def rg_vol_gain(val) val = val.to_f + @preamp + vol_db - return if val.abs < @gain_threshold to_sox_gain(val) end # returns a DB argument to the "gain" effect def rg_vol_norm(val) n = @norm_level == 1.0 ? @volume : @norm_level - diff = n - val.to_f - return if (n - diff).abs < @norm_threshold - diff += n + diff = n * 2 - val.to_f to_sox_gain(linear_to_db(diff)) end @@ -99,7 +95,6 @@ class DTAS::RGState # :nodoc: # tag slips into the queue def rg_fallback_effect(reason) val = (@fallback_gain || 0) + @preamp + vol_db - return if val.abs < @gain_threshold warn(reason) if $DEBUG to_sox_gain(val) end -- cgit v1.2.3-24-ge0c7