Module: DTAS::Source::File
- 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
Constants included from Command
Instance Attribute Summary collapse
-
#infile ⇒ Object
readonly
Returns the value of attribute infile.
-
#offset ⇒ Object
readonly
Returns the value of attribute offset.
-
#tryorder ⇒ Object
Returns the value of attribute tryorder.
Attributes included from Common
#dst, #dst_zero_byte, #requeued
Attributes included from Command
#command, #env, #pid, #spawn_at, #to_io
Instance Method Summary collapse
- #__file_init(infile, offset) ⇒ Object
- #comments ⇒ Object
- #cuebreakpoints ⇒ Object
- #load!(src_hsh) ⇒ Object
-
#offset_samples ⇒ Object
returns any offset in samples (relative to the original source file), likely zero unless seek was used.
-
#offset_us ⇒ Object
this exists mainly to make the mpris interface easier, but it’s not necessary, the mpris interface also knows the sample rate.
- #replaygain ⇒ Object
-
#samples! ⇒ Object
A user may be downloading the file and start playing it before the download completes, this refreshes.
- #source_file_dup(infile, offset) ⇒ Object
- #to_hash ⇒ Object
- #to_source_cat ⇒ Object
- #to_state_hash ⇒ Object
Methods included from Mp3gain
#__mp3gain_peak, #mp3gain_comments
Methods included from Process
#dtas_spawn, #env_expand, #qx, reaper
Methods included from XS
Methods included from Common
Methods included from Command
#command_init, #command_string, #on_death
Methods included from DTAS::Serialize
Instance Attribute Details
#infile ⇒ Object (readonly)
Returns the value of attribute infile.
11 12 13 |
# File 'lib/dtas/source/file.rb', line 11 def infile @infile end |
#offset ⇒ Object (readonly)
Returns the value of attribute offset.
12 13 14 |
# File 'lib/dtas/source/file.rb', line 12 def offset @offset end |
#tryorder ⇒ Object
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 |
#comments ⇒ Object
66 67 68 |
# File 'lib/dtas/source/file.rb', line 66 def comments @comments ||= __load_comments end |
#cuebreakpoints ⇒ Object
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_samples ⇒ Object
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_us ⇒ Object
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 |
#replaygain ⇒ Object
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_hash ⇒ Object
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_cat ⇒ Object
81 82 83 |
# File 'lib/dtas/source/file.rb', line 81 def to_source_cat ivars_to_hash(SRC_SIVS) end |
#to_state_hash ⇒ Object
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 |