Module: DTAS::Source::File

Includes:
Command, Process, Common, Mp3gain
Included in:
AvFfCommon, Sox
Defined in:
lib/dtas/source/file.rb

Overview

:nodoc:

Constant Summary collapse

FILE_SIVS =

for the “current” command

%w(infile comments command env)
SRC_SIVS =
%w(command env tryorder)

Constants included from Process

Process::PIDS

Constants included from Command

Command::COMMAND_DEFAULTS

Instance Attribute Summary collapse

Attributes included from Common

#dst, #dst_zero_byte, #requeued

Attributes included from Command

#command, #env, #pid, #spawn_at, #to_io

Instance Method Summary collapse

Methods included from Mp3gain

#__mp3gain_peak, #mp3gain_comments

Methods included from Process

#dtas_spawn, #env_expand, #qx, reaper

Methods included from XS

#xs

Methods included from Common

#dst_assoc

Methods included from Command

#command_init, #command_string, #on_death

Methods included from DTAS::Serialize

#ivars_to_hash

Instance Attribute Details

#infileObject (readonly)

Returns the value of attribute infile.



11
12
13
# File 'lib/dtas/source/file.rb', line 11

def infile
  @infile
end

#offsetObject (readonly)

Returns the value of attribute offset.



12
13
14
# File 'lib/dtas/source/file.rb', line 12

def offset
  @offset
end

#tryorderObject

Returns the value of attribute tryorder.



13
14
15
# File 'lib/dtas/source/file.rb', line 13

def tryorder
  @tryorder
end

Instance Method Details

#__file_init(infile, offset) ⇒ Object



30
31
32
33
34
35
36
37
38
39
# File 'lib/dtas/source/file.rb', line 30

def __file_init(infile, offset)
  @env = @env.dup
  @format = nil
  @infile = infile
  @offset = offset
  @comments = nil
  @samples = nil
  @cuebp = nil
  @rg = nil
end

#commentsObject



66
67
68
# File 'lib/dtas/source/file.rb', line 66

def comments
  @comments ||= __load_comments
end

#cuebreakpointsObject



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/dtas/source/file.rb', line 96

def cuebreakpoints
  rv = @cuebp and return rv
  rv = []
  begin
    str = qx(@env, %W(metaflac --export-cuesheet-to=- #@infile))
  rescue
    return rv
  end
  str.scan(/^    INDEX (\d+) (\S+)/) do |m|
    index = m[0]
    time = m[1].dup
    case time
    when /\A\d+\z/
      time << "s" # sample count (flac 1.3.0)
    else # HH:MM:SS:FF
      # FF/75 CDDA frames per second, convert to fractional seconds
      time.sub!(/:(\d+)\z/, "")
      frames = $1.to_f
      if frames > 0
        time = sprintf("#{time}.%0.6g", frames / 75.0)
      end
    end
    rv << DTAS::CueIndex.new(index, time)
  end
  @cuebp = rv
end

#load!(src_hsh) ⇒ Object



85
86
87
88
89
# File 'lib/dtas/source/file.rb', line 85

def load!(src_hsh)
  SRC_SIVS.each do |field|
    val = src_hsh[field] and instance_variable_set("@#{field}", val)
  end
end

#offset_samplesObject

returns any offset in samples (relative to the original source file), likely zero unless seek was used



49
50
51
52
53
54
55
56
57
# File 'lib/dtas/source/file.rb', line 49

def offset_samples
  return 0 unless @offset
  case @offset
  when /\A\d+s\z/
    @offset.to_i
  else
    format.hhmmss_to_samples(@offset)
  end
end

#offset_usObject

this exists mainly to make the mpris interface easier, but it’s not necessary, the mpris interface also knows the sample rate



43
44
45
# File 'lib/dtas/source/file.rb', line 43

def offset_us
  (offset_samples / format.rate.to_f) * 1000000
end

#replaygainObject



76
77
78
79
# File 'lib/dtas/source/file.rb', line 76

def replaygain
  @rg ||= DTAS::ReplayGain.new(comments) ||
          DTAS::ReplayGain.new(mp3gain_comments)
end

#samples!Object

A user may be downloading the file and start playing it before the download completes, this refreshes



61
62
63
64
# File 'lib/dtas/source/file.rb', line 61

def samples!
  @samples = nil
  samples
end

#source_file_dup(infile, offset) ⇒ Object



24
25
26
27
28
# File 'lib/dtas/source/file.rb', line 24

def source_file_dup(infile, offset)
  rv = dup
  rv.__file_init(infile, offset)
  rv
end

#to_hashObject



70
71
72
73
74
# File 'lib/dtas/source/file.rb', line 70

def to_hash
  rv = ivars_to_hash(FILE_SIVS)
  rv["samples"] = samples
  rv
end

#to_source_catObject



81
82
83
# File 'lib/dtas/source/file.rb', line 81

def to_source_cat
  ivars_to_hash(SRC_SIVS)
end

#to_state_hashObject



91
92
93
94
# File 'lib/dtas/source/file.rb', line 91

def to_state_hash
  defaults = source_defaults # see dtas/source/{av,sox}.rb
  to_source_cat.delete_if { |k,v| v == defaults[k] }
end