aboutsummaryrefslogtreecommitdiff
path: root/sound/audiocd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sound/audiocd.cpp')
-rw-r--r--sound/audiocd.cpp136
1 files changed, 0 insertions, 136 deletions
diff --git a/sound/audiocd.cpp b/sound/audiocd.cpp
deleted file mode 100644
index 7afbd12d03..0000000000
--- a/sound/audiocd.cpp
+++ /dev/null
@@ -1,136 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-#include "sound/audiocd.h"
-#include "sound/audiostream.h"
-#include "sound/decoders/mp3.h"
-#include "sound/decoders/vorbis.h"
-#include "sound/decoders/flac.h"
-#include "engines/engine.h"
-#include "common/util.h"
-#include "common/system.h"
-
-DECLARE_SINGLETON(Audio::AudioCDManager)
-
-namespace Audio {
-
-AudioCDManager::AudioCDManager() {
- _cd.playing = false;
- _cd.track = 0;
- _cd.start = 0;
- _cd.duration = 0;
- _cd.numLoops = 0;
- _mixer = g_system->getMixer();
- _emulating = false;
- assert(_mixer);
-}
-
-void AudioCDManager::play(int track, int numLoops, int startFrame, int duration, bool only_emulate) {
- if (numLoops != 0 || startFrame != 0) {
- _cd.track = track;
- _cd.numLoops = numLoops;
- _cd.start = startFrame;
- _cd.duration = duration;
-
- // Try to load the track from a compressed data file, and if found, use
- // that. If not found, attempt to start regular Audio CD playback of
- // the requested track.
- char trackName[2][16];
- sprintf(trackName[0], "track%d", track);
- sprintf(trackName[1], "track%02d", track);
- Audio::SeekableAudioStream *stream = 0;
-
- for (int i = 0; !stream && i < 2; ++i)
- stream = SeekableAudioStream::openStreamFile(trackName[i]);
-
- // Stop any currently playing emulated track
- _mixer->stopHandle(_handle);
-
- if (stream != 0) {
- Timestamp start = Timestamp(0, startFrame, 75);
- Timestamp end = duration ? Timestamp(0, startFrame + duration, 75) : stream->getLength();
-
- /*
- FIXME: Seems numLoops == 0 and numLoops == 1 both indicate a single repetition,
- while all other positive numbers indicate precisely the number of desired
- repetitions. Finally, -1 means infinitely many
- */
- _emulating = true;
- _mixer->playStream(Mixer::kMusicSoundType, &_handle,
- makeLoopingAudioStream(stream, start, end, (numLoops < 1) ? numLoops + 1 : numLoops));
- } else {
- _emulating = false;
- if (!only_emulate)
- g_system->playCD(track, numLoops, startFrame, duration);
- }
- }
-}
-
-void AudioCDManager::stop() {
- if (_emulating) {
- // Audio CD emulation
- _mixer->stopHandle(_handle);
- _emulating = false;
- } else {
- // Real Audio CD
- g_system->stopCD();
- }
-}
-
-bool AudioCDManager::isPlaying() const {
- if (_emulating) {
- // Audio CD emulation
- return _mixer->isSoundHandleActive(_handle);
- } else {
- // Real Audio CD
- return g_system->pollCD();
- }
-}
-
-void AudioCDManager::updateCD() {
- if (_emulating) {
- // Check whether the audio track stopped playback
- if (!_mixer->isSoundHandleActive(_handle)) {
- // FIXME: We do not update the numLoops parameter here (and in fact,
- // currently can't do that). Luckily, only one engine ever checks
- // this part of the AudioCD status, namely the SCUMM engine; and it
- // only checks whether the track is currently set to infinite looping
- // or not.
- _emulating = false;
- }
- } else {
- g_system->updateCD();
- }
-}
-
-AudioCDManager::Status AudioCDManager::getStatus() const {
- // TODO: This could be improved for "real" CD playback.
- // But to do that, we would have to extend the OSystem interface.
- Status info = _cd;
- info.playing = isPlaying();
- return info;
-}
-
-} // End of namespace Audio