Class: DTAS::ReplayGain

Inherits:
Object
  • Object
show all
Defined in:
lib/dtas/replaygain.rb

Overview

Copyright © 2013, Eric Wong <[email protected]> License: GPLv3 or later (www.gnu.org/licenses/gpl-3.0.txt)

Represents ReplayGain metadata for a DTAS::Source cleanup/validate values to prevent malicious files from making us run arbitrary commands *_peak values are 0..inf (1.0 being full scale, but >1 is possible *_gain values are specified in dB

Constant Summary collapse

ATTRS =

:nodoc:

%w(reference_loudness track_gain album_gain track_peak album_peak)

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(comments) ⇒ ReplayGain

Returns a new instance of ReplayGain.



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/dtas/replaygain.rb', line 23

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"

  @track_gain = check_gain(comments["REPLAYGAIN_TRACK_GAIN"])
  @album_gain = check_gain(comments["REPLAYGAIN_ALBUM_GAIN"])
  @track_peak = check_float(comments["REPLAYGAIN_TRACK_PEAK"])
  @album_peak = check_float(comments["REPLAYGAIN_ALBUM_PEAK"])
end

Class Method Details

.new(comments) ⇒ Object



37
38
39
40
# File 'lib/dtas/replaygain.rb', line 37

def self.new(comments)
  tmp = super
  tmp.track_gain ? tmp : nil
end

Instance Method Details

#check_float(val) ⇒ Object



19
20
21
# File 'lib/dtas/replaygain.rb', line 19

def check_float(val)
  /(\d+(?:\.\d+)?)/ =~ val ? $1 : nil
end

#check_gain(val) ⇒ Object



15
16
17
# File 'lib/dtas/replaygain.rb', line 15

def check_gain(val)
  /([+-]?\d+(?:\.\d+)?)/ =~ val ? $1 : nil
end