aboutsummaryrefslogtreecommitdiff
path: root/sound/audiocd.h
diff options
context:
space:
mode:
authorMax Horn2003-11-29 12:11:01 +0000
committerMax Horn2003-11-29 12:11:01 +0000
commitf00cd05b331cb5db1dfee140608d6189385950a4 (patch)
treedb1e0105eb9ef2cd266620357c551c5a058f4d37 /sound/audiocd.h
parent493d64d91b9944cd91da6539cb41ee561ddafd92 (diff)
downloadscummvm-rg350-f00cd05b331cb5db1dfee140608d6189385950a4.tar.gz
scummvm-rg350-f00cd05b331cb5db1dfee140608d6189385950a4.tar.bz2
scummvm-rg350-f00cd05b331cb5db1dfee140608d6189385950a4.zip
moved Audio CD (emulation) code from scumm/sound.cpp to sound/, so that it may be reused by other engines in the future
svn-id: r11421
Diffstat (limited to 'sound/audiocd.h')
-rw-r--r--sound/audiocd.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/sound/audiocd.h b/sound/audiocd.h
new file mode 100644
index 0000000000..c02e50f4f6
--- /dev/null
+++ b/sound/audiocd.h
@@ -0,0 +1,74 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2003 The ScummVM project
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * $Header$
+ *
+ */
+
+#ifndef SOUND_AUDIOCD_H
+#define SOUND_AUDIOCD_H
+
+#include "stdafx.h"
+#include "common/scummsys.h"
+#include "common/singleton.h"
+#include "sound/mixer.h"
+
+class DigitalTrackInfo {
+public:
+ virtual bool error() = 0;
+ virtual int play(SoundMixer *mixer, PlayingSoundHandle *handle, int startFrame, int duration) = 0;
+ virtual ~DigitalTrackInfo() { }
+};
+
+
+class AudioCDManager : public Common::Singleton<AudioCDManager> {
+public:
+ void playCDTrack(int track, int numLoops, int startFrame, int duration);
+ void stopCD();
+ int pollCD() const;
+ void updateCD();
+
+private:
+ friend class Common::Singleton<AudioCDManager>;
+ AudioCDManager();
+
+ int getCachedTrack(int track);
+
+private:
+ /* used for emulated CD music */
+ 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;
+
+};
+
+/** Shortcut for accessing the audio CD manager. */
+#define AudioCD AudioCDManager::instance()
+
+#endif