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; } }