Module: DTAS::Source::Mp3gain

Includes:
Process
Included in:
File
Defined in:
lib/dtas/source/mp3gain.rb

Overview

:nodoc:

Constant Summary

Constants included from Process

Process::PIDS

Instance Method Summary collapse

Methods included from Process

#dtas_spawn, #env_expand, #qx, reaper

Methods included from XS

#xs

Instance Method Details

#__mp3gain_peak(str) ⇒ Object

we use dBFS = 1.0 as scale (not 32768)



8
9
10
# File 'lib/dtas/source/mp3gain.rb', line 8

def __mp3gain_peak(str)
  sprintf("%0.8g", str.to_f / 32768.0)
end

#mp3gain_commentsObject

massage mp3gain(1) output



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/dtas/source/mp3gain.rb', line 13

def mp3gain_comments
  tmp = {}
  case @infile
  when String
    @infile =~ /\.mp[g23]\z/in or return
    qx(%W(mp3gain -s c #@infile)).split(/\n/).each do |line|
      case line
      when /^Recommended "(Track|Album)" dB change:\s*(\S+)/
        tmp["REPLAYGAIN_#{$1.upcase}_GAIN"] = $2
      when /^Max PCM sample at current gain: (\S+)/
        tmp["REPLAYGAIN_TRACK_PEAK"] = __mp3gain_peak($1)
      when /^Max Album PCM sample at current gain: (\S+)/
        tmp["REPLAYGAIN_ALBUM_PEAK"] = __mp3gain_peak($1)
      end
    end
    tmp
  else
    raise TypeError, "unsupported type: #{@infile.inspect}"
  end
rescue => e
  $DEBUG and
      warn("mp3gain(#{@infile.inspect}) failed: #{e.message} (#{e.class})")
end