]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - src/tim/prune/data/AudioClip.java
Moved source into separate src directory due to popular request
[GpsPrune.git] / src / tim / prune / data / AudioClip.java
diff --git a/src/tim/prune/data/AudioClip.java b/src/tim/prune/data/AudioClip.java
new file mode 100644 (file)
index 0000000..2e5f5ee
--- /dev/null
@@ -0,0 +1,61 @@
+package tim.prune.data;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import javax.sound.sampled.AudioFileFormat;
+import javax.sound.sampled.AudioSystem;
+
+/**
+ * Class to represent an audio clip for correlation
+ */
+public class AudioClip extends MediaObject
+{
+       /** length of current audio clip in seconds */
+       private int _lengthInSeconds = LENGTH_UNKNOWN;
+
+       private static final int LENGTH_UNKNOWN = -1;
+       private static final int LENGTH_NOT_AVAILABLE = -2;
+
+       /**
+        * Constructor
+        * @param inFile file object
+        */
+       public AudioClip(File inFile)
+       {
+               // Timestamp is always just taken from the file modification stamp
+               super(inFile, new TimestampUtc(inFile.lastModified()));
+       }
+
+       /**
+        * Constructor
+        * @param inData byte array of data
+        * @param inName name of source file
+        * @param inUrl url from which it came (or null)
+        */
+       public AudioClip(byte[] inData, String inName, String inUrl)
+       {
+               super(inData, inName, inUrl);
+       }
+
+       /**
+        * @return length of this audio clip in seconds
+        */
+       public int getLengthInSeconds()
+       {
+               if (_lengthInSeconds == LENGTH_UNKNOWN)
+               {
+                       try {
+                               AudioFileFormat format = null;
+                               if (getFile() != null)
+                                       format = AudioSystem.getAudioFileFormat(getFile());
+                               else
+                                       format = AudioSystem.getAudioFileFormat(new ByteArrayInputStream(_data));
+                               _lengthInSeconds = (int) (format.getFrameLength() / format.getFormat().getFrameRate());
+                       }
+                       catch (Exception e) {
+                               _lengthInSeconds = LENGTH_NOT_AVAILABLE;
+                       }
+               }
+               return _lengthInSeconds;
+       }
+}