lib/dtas/rg_state.rb in dtas-0.14.2 vs lib/dtas/rg_state.rb in dtas-0.15.0

- old
+ new

@@ -1,7 +1,7 @@ # Copyright (C) 2013-2016 all contributors <dtas-all@nongnu.org> -# License: GPL-3.0+ (https://www.gnu.org/licenses/gpl-3.0.txt) +# License: GPL-3.0+ <https://www.gnu.org/licenses/gpl-3.0.txt> # frozen_string_literal: true # # provides support for generating appropriate effects for ReplayGain # MAYBE: account for non-standard reference loudness (89.0 dB is standard) require_relative '../dtas' @@ -20,12 +20,10 @@ } 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 "mode" => nil, # nil: off "fallback_gain" => -6.0, # adjustment dB if necessary RG tag is missing @@ -71,36 +69,33 @@ def to_sox_gain(val) case val.infinite? 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 + DTAS.dedupe_str(sprintf('gain %0.8f', val)) 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 # The ReplayGain fallback adjustment value (in dB), in case a file is # missing ReplayGain tags. This is useful to avoid damage to speakers, # eardrums and amplifiers in case a file without then necessary ReplayGain # 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 # returns an array (for command-line argument) for the effect needed