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