[Scummvm-cvs-logs] CVS: scummvm/sound audiocd.cpp,1.1,1.2 audiocd.h,1.1,1.2
Max Horn
fingolfin at users.sourceforge.net
Sat Nov 29 05:57:03 CET 2003
Update of /cvsroot/scummvm/scummvm/sound
In directory sc8-pr-cvs1:/tmp/cvs-serv21672
Modified Files:
audiocd.cpp audiocd.h
Log Message:
added API to query CD playback status; renamed AudioCDManager methods
Index: audiocd.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/audiocd.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- audiocd.cpp 29 Nov 2003 12:09:51 -0000 1.1
+++ audiocd.cpp 29 Nov 2003 13:56:32 -0000 1.2
@@ -33,19 +33,21 @@
_current_cache = 0;
}
-void AudioCDManager::playCDTrack(int track, int numLoops, int startFrame, int duration) {
+void AudioCDManager::play(int track, int numLoops, int startFrame, int duration) {
if (numLoops != 0 || startFrame != 0) {
// Try to load the track from a .mp3/.ogg file, and if found, use
// that. If not found, attempt to do regular Audio CD playback of
// the requested track.
int index = getCachedTrack(track);
+
+ _cd.track = track;
+ _cd.numLoops = numLoops;
+ _cd.start = startFrame;
+ _cd.duration = duration;
+
if (index >= 0) {
g_engine->_mixer->stopHandle(_cd.handle);
_cd.playing = true;
- _cd.track = track;
- _cd.numLoops = numLoops;
- _cd.start = startFrame;
- _cd.duration = duration;
_track_info[index]->play(g_engine->_mixer, &_cd.handle, _cd.start, _cd.duration);
} else {
g_system->play_cdrom(track, numLoops, startFrame, duration);
@@ -53,7 +55,7 @@
}
}
-void AudioCDManager::stopCD() {
+void AudioCDManager::stop() {
if (_cd.playing) {
g_engine->_mixer->stopHandle(_cd.handle);
_cd.playing = false;
@@ -62,7 +64,7 @@
}
}
-int AudioCDManager::pollCD() const {
+int AudioCDManager::isPlaying() const {
return _cd.playing || g_system->poll_cdrom();
}
@@ -74,12 +76,9 @@
// to be repeated, and if that's the case, play it again. Else, stop
// the CD explicitly.
if (_cd.numLoops == -1 || --_cd.numLoops > 0) {
-//FIXME _scumm->VAR(_scumm->VAR_MUSIC_TIMER) = 0;
-//FIXME if (!_soundsPaused) {
- int index = getCachedTrack(_cd.track);
- assert(index >= 0);
- _track_info[index]->play(g_engine->_mixer, &_cd.handle, _cd.start, _cd.duration);
-//FIXME }
+ int index = getCachedTrack(_cd.track);
+ assert(index >= 0);
+ _track_info[index]->play(g_engine->_mixer, &_cd.handle, _cd.start, _cd.duration);
} else {
g_engine->_mixer->stopHandle(_cd.handle);
_cd.playing = false;
@@ -88,6 +87,14 @@
} else {
g_system->update_cdrom();
}
+}
+
+AudioCDManager::Status AudioCDManager::getStatus() const {
+ // TODO: This could be improved for "real" CD playback.
+ // But to do that, we have to extend the OSystem interface.
+ Status info = _cd;
+ info.playing = isPlaying();
+ return info;
}
int AudioCDManager::getCachedTrack(int track) {
Index: audiocd.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/audiocd.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- audiocd.h 29 Nov 2003 12:09:51 -0000 1.1
+++ audiocd.h 29 Nov 2003 13:56:32 -0000 1.2
@@ -37,11 +37,22 @@
class AudioCDManager : public Common::Singleton<AudioCDManager> {
public:
- void playCDTrack(int track, int numLoops, int startFrame, int duration);
- void stopCD();
- int pollCD() const;
+ struct Status {
+ bool playing;
+ int track;
+ int start;
+ int duration;
+ int numLoops;
+ };
+
+ void play(int track, int numLoops, int startFrame, int duration);
+ void stop();
+ int isPlaying() const;
+
void updateCD();
+ Status getStatus() const;
+
private:
friend class Common::Singleton<AudioCDManager>;
AudioCDManager();
@@ -50,21 +61,17 @@
private:
/* used for emulated CD music */
+ struct ExtStatus : Status {
+ PlayingSoundHandle handle;
+ };
+ ExtStatus _cd;
+
enum {
CACHE_TRACKS = 10
};
int _cached_tracks[CACHE_TRACKS];
DigitalTrackInfo *_track_info[CACHE_TRACKS];
int _current_cache;
-
- struct {
- PlayingSoundHandle handle;
- int track;
- int start;
- int duration;
- int numLoops;
- bool playing;
- } _cd;
};
More information about the Scummvm-git-logs
mailing list