aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/kyra/sound_digital.cpp1
-rw-r--r--sound/audiostream.cpp4
-rw-r--r--sound/audiostream.h7
-rw-r--r--sound/flac.cpp2
-rw-r--r--sound/mp3.cpp2
-rw-r--r--sound/vorbis.cpp8
6 files changed, 24 insertions, 0 deletions
diff --git a/engines/kyra/sound_digital.cpp b/engines/kyra/sound_digital.cpp
index 0687c06cc8..aaae5eaece 100644
--- a/engines/kyra/sound_digital.cpp
+++ b/engines/kyra/sound_digital.cpp
@@ -122,6 +122,7 @@ public:
// GROSS HACK, if anyone sees this, be aware that you should
// never copy this! This is just a temporary hack...
bool seek(const Audio::Timestamp &) { return false; }
+ Audio::Timestamp getLength() const { return Audio::Timestamp(0, getRate()); }
private:
Common::SeekableReadStream *_stream;
bool _loop;
diff --git a/sound/audiostream.cpp b/sound/audiostream.cpp
index 9453eb24da..4ecfbedada 100644
--- a/sound/audiostream.cpp
+++ b/sound/audiostream.cpp
@@ -175,6 +175,8 @@ public:
}
bool seek(const Timestamp &where);
+ // TODO: We can definitly increase the precision here, since we know the exact sample count
+ Timestamp getLength() const { return Timestamp(_playtime, getRate()); }
void setNumLoops(uint numLoops) {
_numLoops = numLoops;
@@ -334,6 +336,8 @@ public:
return kUnknownPlayTime;
return _playtime * _numLoops;
}
+ // TODO: We can definitly increase the precision here, since we know the exact sample count
+ Timestamp getLength() const { return Timestamp(_playtime, getRate()); }
bool seek(const Timestamp &where);
};
diff --git a/sound/audiostream.h b/sound/audiostream.h
index 15e7ea6d33..a3992ca94f 100644
--- a/sound/audiostream.h
+++ b/sound/audiostream.h
@@ -157,6 +157,13 @@ public:
* @return true on success, false on failure.
*/
virtual bool seek(const Timestamp &where) = 0;
+
+ /**
+ * Returns the length of the stream.
+ *
+ * @return length as Timestamp.
+ */
+ virtual Timestamp getLength() const = 0;
};
diff --git a/sound/flac.cpp b/sound/flac.cpp
index ddfd9bf329..b99f8bb484 100644
--- a/sound/flac.cpp
+++ b/sound/flac.cpp
@@ -150,6 +150,8 @@ public:
}
bool seek(const Timestamp &where);
+ // TODO: We can definitly increase the precision here, since FLAC allows us to catch the sample count
+ Timestamp getLength() const { return Timestamp(_totalPlayTime, getRate()); }
bool isStreamDecoderReady() const { return getStreamDecoderState() == FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC ; }
diff --git a/sound/mp3.cpp b/sound/mp3.cpp
index 72d4652789..332fe20d59 100644
--- a/sound/mp3.cpp
+++ b/sound/mp3.cpp
@@ -100,6 +100,8 @@ public:
}
bool seek(const Timestamp &where);
+ // TODO: Maybe we can have a more precise implementation of this
+ Timestamp getLength() const { return Timestamp(_totalPlayTime, getRate()); }
void setNumLoops(uint numLoops) {
_numLoops = numLoops;
diff --git a/sound/vorbis.cpp b/sound/vorbis.cpp
index eced67726a..a130ecc5ec 100644
--- a/sound/vorbis.cpp
+++ b/sound/vorbis.cpp
@@ -139,6 +139,14 @@ public:
}
bool seek(const Timestamp &where);
+ // TODO: Maybe we can have a more precise implementation of this
+ Timestamp getLength() const {
+#ifdef USE_TREMOR
+ return Timestamp(_endTime, getRate());
+#else
+ return Timestamp((uint32)(_endTime * 1000.0), getRate());
+#endif
+ }
protected:
bool refill();