diff options
author | Eric Wong <normalperson@yhbt.net> | 2013-08-25 06:14:08 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2013-08-25 06:14:08 +0000 |
commit | 3fb233fd768f3dbce2a3073ba596458871cec93e (patch) | |
tree | b113aba02bbf187a170f07a74259fe0f6f61bdd6 /lib/dtas | |
parent | 93a6944e23e30b3940c7fa8d7c0c9a042036ec05 (diff) | |
download | dtas-3fb233fd768f3dbce2a3073ba596458871cec93e.tar.gz |
We documented this behavior in dtas-player.txt but failed to implement it. Now our behavior matches the documentation!
Diffstat (limited to 'lib/dtas')
-rw-r--r-- | lib/dtas/replaygain.rb | 22 | ||||
-rw-r--r-- | lib/dtas/source.rb | 5 |
2 files changed, 23 insertions, 4 deletions
diff --git a/lib/dtas/replaygain.rb b/lib/dtas/replaygain.rb index cf397a3..cbe7b57 100644 --- a/lib/dtas/replaygain.rb +++ b/lib/dtas/replaygain.rb @@ -10,7 +10,11 @@ class DTAS::ReplayGain # :nodoc: ATTRS = %w(reference_loudness track_gain album_gain track_peak album_peak) - ATTRS.each { |a| attr_reader a } + ENV_ATTRS = {} + ATTRS.each do |a| + attr_reader a + ENV_ATTRS["REPLAYGAIN_#{a.upcase}"] = a + end def check_gain(val) /([+-]?\d+(?:\.\d+)?)/ =~ val ? $1 : nil @@ -20,13 +24,25 @@ class DTAS::ReplayGain # :nodoc: /(\d+(?:\.\d+)?)/ =~ val ? $1 : nil end + # note: this strips the "dB" suffix, but that should be easier for apps + # to deal with anyways... + def to_env + rv = {} + # this will cause nil to be set if some envs are missing, this causes + # Process.spawn to unset the environment if it was previously set + # (leaked from some other process) + ENV_ATTRS.each do |env_name, attr_name| + rv[env_name] = __send__(attr_name) + end + rv + end + def initialize(comments) comments or return # the replaygain standard specifies 89.0 dB, but maybe some apps are # different... - @reference_loudness = - check_gain(comments["REPLAYGAIN_REFERENCE_LOUDNESS"]) || "89.0" + @reference_loudness = check_gain(comments["REPLAYGAIN_REFERENCE_LOUDNESS"]) @track_gain = check_gain(comments["REPLAYGAIN_TRACK_GAIN"]) @album_gain = check_gain(comments["REPLAYGAIN_ALBUM_GAIN"]) diff --git a/lib/dtas/source.rb b/lib/dtas/source.rb index 404d2b0..747fa9f 100644 --- a/lib/dtas/source.rb +++ b/lib/dtas/source.rb @@ -34,6 +34,7 @@ class DTAS::Source # :nodoc: @offset = offset @comments = nil @samples = nil + @rg = nil end # this exists mainly to make the mpris interface easier, but it's not @@ -120,7 +121,8 @@ class DTAS::Source # :nodoc: end def replaygain - DTAS::ReplayGain.new(comments) || DTAS::ReplayGain.new(mp3gain_comments) + @rg = DTAS::ReplayGain.new(comments) || + DTAS::ReplayGain.new(mp3gain_comments) end def spawn(format, rg_state, opts) @@ -131,6 +133,7 @@ class DTAS::Source # :nodoc: # make sure these are visible to the "current" command... @env["TRIMFX"] = @offset ? "trim #@offset" : nil @env["RGFX"] = rg_state.effect(self) || nil + e.merge!(@rg.to_env) if @rg @pid = dtas_spawn(e.merge!(@env), command_string, opts) end |