about summary refs log tree commit homepage
path: root/lib/dtas/source
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dtas/source')
-rw-r--r--lib/dtas/source/av_ff_common.rb1
-rw-r--r--lib/dtas/source/sox.rb4
-rw-r--r--lib/dtas/source/splitfx.rb4
3 files changed, 9 insertions, 0 deletions
diff --git a/lib/dtas/source/av_ff_common.rb b/lib/dtas/source/av_ff_common.rb
index 0fb3ace..58d9f54 100644
--- a/lib/dtas/source/av_ff_common.rb
+++ b/lib/dtas/source/av_ff_common.rb
@@ -19,6 +19,7 @@ module DTAS::Source::AvFfCommon # :nodoc:
 
   attr_reader :precision # always 32
   attr_reader :format
+  attr_reader :duration
 
   def try(infile, offset = nil, trim = nil)
     rv = source_file_dup(infile, offset, trim)
diff --git a/lib/dtas/source/sox.rb b/lib/dtas/source/sox.rb
index 9d128a6..db1ace2 100644
--- a/lib/dtas/source/sox.rb
+++ b/lib/dtas/source/sox.rb
@@ -53,6 +53,10 @@ class DTAS::Source::Sox # :nodoc:
     @format ||= DTAS::Format.from_file(@env, @infile)
   end
 
+  def duration
+    samples / format.rate.to_f
+  end
+
   # This is the number of samples according to the samples in the source
   # file itself, not the decoded output
   def samples
diff --git a/lib/dtas/source/splitfx.rb b/lib/dtas/source/splitfx.rb
index d824959..f746bee 100644
--- a/lib/dtas/source/splitfx.rb
+++ b/lib/dtas/source/splitfx.rb
@@ -107,6 +107,10 @@ class DTAS::Source::SplitFX < DTAS::Source::Sox # :nodoc:
     @sox.samples
   end
 
+  def duration
+    @sox.duration
+  end
+
   def source_defaults
     SPLITFX_DEFAULTS
   end