aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/sound
diff options
context:
space:
mode:
Diffstat (limited to 'engines/kyra/sound')
-rw-r--r--engines/kyra/sound/sound_intern.h31
-rw-r--r--engines/kyra/sound/sound_pc98_eob.cpp126
2 files changed, 157 insertions, 0 deletions
diff --git a/engines/kyra/sound/sound_intern.h b/engines/kyra/sound/sound_intern.h
index 29572f6fe2..44f7adbfe2 100644
--- a/engines/kyra/sound/sound_intern.h
+++ b/engines/kyra/sound/sound_intern.h
@@ -443,6 +443,37 @@ private:
bool _ready;
};
+class MLALF98;
+class SoundPC98_EoB : public Sound {
+public:
+ SoundPC98_EoB(KyraEngine_v1 *vm, Audio::Mixer *mixer);
+ virtual ~SoundPC98_EoB();
+
+ kType getMusicType() const;
+
+ bool init();
+ void initAudioResourceInfo(int set, void *info);
+ void selectAudioResourceSet(int set);
+ bool hasSoundFile(uint file) const { return false; }
+ void loadSoundFile(uint file);
+ void loadSoundFile(Common::String file) {}
+ void loadSfxFile(Common::String file);
+ void playTrack(uint8 track);
+ void haltTrack();
+ void playSoundEffect(uint8 track, uint8);
+ void beginFadeOut() {}
+ void updateVolumeSettings();
+
+private:
+ KyraEngine_v1 *_vm;
+ MLALF98 *_driver;
+
+ SoundResourceInfo_PC *_resInfo[3];
+ int _currentResourceSet;
+
+ bool _ready;
+};
+
#endif
} // End of namespace Kyra
diff --git a/engines/kyra/sound/sound_pc98_eob.cpp b/engines/kyra/sound/sound_pc98_eob.cpp
new file mode 100644
index 0000000000..13b7214d74
--- /dev/null
+++ b/engines/kyra/sound/sound_pc98_eob.cpp
@@ -0,0 +1,126 @@
+/* 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.
+ *
+ */
+
+#ifdef ENABLE_EOB
+
+#include "kyra/sound/sound_intern.h"
+#include "kyra/resource/resource.h"
+#include "kyra/sound/drivers/mlalf98.h"
+
+#include "common/config-manager.h"
+
+namespace Kyra {
+
+SoundPC98_EoB::SoundPC98_EoB(KyraEngine_v1 *vm, Audio::Mixer *mixer) : Sound(vm, mixer),
+ _vm(vm), _driver(0), _currentResourceSet(-1), _ready(false) {
+ memset(_resInfo, 0, sizeof(_resInfo));
+}
+
+SoundPC98_EoB::~SoundPC98_EoB() {
+ delete _driver;
+
+ for (int i = 0; i < 3; i++)
+ initAudioResourceInfo(i, 0);
+}
+
+Sound::kType SoundPC98_EoB::getMusicType() const {
+ return kPC98;
+}
+
+bool SoundPC98_EoB::init() {
+ _driver = new MLALF98(_mixer, MLALF98::kType9801_86);
+ _ready = true;
+ return true;
+}
+
+void SoundPC98_EoB::initAudioResourceInfo(int set, void *info) {
+ delete _resInfo[set];
+ _resInfo[set] = info ? new SoundResourceInfo_PC(*(SoundResourceInfo_PC*)info) : 0;
+}
+
+void SoundPC98_EoB::selectAudioResourceSet(int set) {
+ if (set == _currentResourceSet || !_ready)
+ return;
+
+ if (!_resInfo[set])
+ return;
+
+ _currentResourceSet = set;
+}
+
+void SoundPC98_EoB::loadSoundFile(uint file) {
+ if (!_ready)
+ return;
+
+ if (file >= _resInfo[_currentResourceSet]->fileListSize)
+ return;
+
+ Common::SeekableReadStream *s = _vm->resource()->createReadStream(_resInfo[_currentResourceSet]->fileList[file]);
+ _driver->loadMusicData(s);
+ delete s;
+}
+
+void SoundPC98_EoB::loadSfxFile(Common::String file) {
+ if (!_ready)
+ return;
+
+ Common::SeekableReadStream *s = _vm->resource()->createReadStream(file);
+ _driver->loadSoundEffectData(s);
+ delete s;
+}
+
+void SoundPC98_EoB::playTrack(uint8 track) {
+ if (!_musicEnabled || !_ready)
+ return;
+
+ _driver->allChannelsOff();
+ loadSoundFile(track);
+ _driver->startMusic(0);
+}
+
+void SoundPC98_EoB::haltTrack() {
+ if (!_musicEnabled || !_ready)
+ return;
+ playTrack(0);
+}
+
+void SoundPC98_EoB::playSoundEffect(uint8 track, uint8) {
+ if (_currentResourceSet != kMusicIngame || !_sfxEnabled || !_ready || track >= 120)
+ return;
+ _driver->startSoundEffect(track);
+}
+
+void SoundPC98_EoB::updateVolumeSettings() {
+ if (!_driver || !_ready)
+ return;
+
+ bool mute = false;
+ if (ConfMan.hasKey("mute"))
+ mute = ConfMan.getBool("mute");
+
+ _driver->setMusicVolume((mute ? 0 : ConfMan.getInt("music_volume")));
+ _driver->setSoundEffectVolume((mute ? 0 : ConfMan.getInt("sfx_volume")));
+}
+
+} // End of namespace Kyra
+
+#endif