diff options
author | Max Horn | 2003-12-21 16:01:36 +0000 |
---|---|---|
committer | Max Horn | 2003-12-21 16:01:36 +0000 |
commit | 5eef5d4e15ddd4c99ff1234a969651572c8e0812 (patch) | |
tree | b814022701442398f57e9b27e06b74e99e1c229f | |
parent | 71057255eac588e04fb611ecd423ceb9bc17d045 (diff) | |
download | scummvm-rg350-5eef5d4e15ddd4c99ff1234a969651572c8e0812.tar.gz scummvm-rg350-5eef5d4e15ddd4c99ff1234a969651572c8e0812.tar.bz2 scummvm-rg350-5eef5d4e15ddd4c99ff1234a969651572c8e0812.zip |
add purely experimental & untested Ogg Vorbis support to Simon
svn-id: r11816
-rw-r--r-- | simon/intern.h | 4 | ||||
-rw-r--r-- | simon/simon.cpp | 112 | ||||
-rw-r--r-- | simon/sound.cpp | 55 |
3 files changed, 115 insertions, 56 deletions
diff --git a/simon/intern.h b/simon/intern.h index 955bf331f2..52f28bc705 100644 --- a/simon/intern.h +++ b/simon/intern.h @@ -124,16 +124,20 @@ struct GameSpecificSettings { const char *wav_filename; const char *voc_filename; const char *mp3_filename; + const char *vorbis_filename; const char *voc_effects_filename; const char *mp3_effects_filename; + const char *vorbis_effects_filename; const char *gamepc_filename; #else const char gme_filename[12]; const char wav_filename[12]; const char voc_filename[12]; const char mp3_filename[12]; + const char vorbis_filename[12]; const char voc_effects_filename[12]; const char mp3_effects_filename[12]; + const char vorbis_effects_filename[12]; const char gamepc_filename[12]; #endif }; diff --git a/simon/simon.cpp b/simon/simon.cpp index cdfb09a83f..29aa790900 100644 --- a/simon/simon.cpp +++ b/simon/simon.cpp @@ -136,73 +136,87 @@ static const GameSpecificSettings *simon2dos_settings; #else #define PTR(a) &a static const GameSpecificSettings simon1_settings = { - "SIMON.GME", // gme_filename - "SIMON.WAV", // wav_filename - "SIMON.VOC", // voc_filename - "SIMON.MP3", // mp3_filename - "EFFECTS.VOC", // voc_effects_filename - "EFFECTS.MP3", // mp3_effects_filename - "GAMEPC", // gamepc_filename + "SIMON.GME", // gme_filename + "SIMON.WAV", // wav_filename + "SIMON.VOC", // voc_filename + "SIMON.MP3", // mp3_filename + "SIMON.OGG", // vorbis_filename + "EFFECTS.VOC", // voc_effects_filename + "EFFECTS.MP3", // mp3_effects_filename + "EFFECTS.OGG", // vorbis_effects_filename + "GAMEPC", // gamepc_filename }; static const GameSpecificSettings simon1acorn_settings = { - "DATA", // gme_filename - "", // wav_filename - "SIMON", // voc_filename - "SIMON.MP3", // mp3_filename - "EFFECTS", // voc_effects_filename - "EFFECTS.MP3", // mp3_effects_filename - "GAMEBASE", // gamepc_filename + "DATA", // gme_filename + "", // wav_filename + "SIMON", // voc_filename + "SIMON.MP3", // mp3_filename + "SIMON.OGG", // vorbis_filename + "EFFECTS", // voc_effects_filename + "EFFECTS.MP3", // mp3_effects_filename + "EFFECTS.OGG", // vorbis_effects_filename + "GAMEBASE", // gamepc_filename }; static const GameSpecificSettings simon1amiga_settings = { - "", // gme_filename - "", // wav_filename - "", // voc_filename - "SIMON.MP3", // mp3_filename - "", // voc_effects_filename - "", // mp3_effects_filename - "gameamiga", // gamepc_filename + "", // gme_filename + "", // wav_filename + "", // voc_filename + "SIMON.MP3", // mp3_filename + "SIMON.OGG", // vorbis_filename + "", // voc_effects_filename + "", // mp3_effects_filename + "", // vorbis_effects_filename + "gameamiga", // gamepc_filename }; static const GameSpecificSettings simon1demo_settings = { - "", // gme_filename - "", // wav_filename - "", // voc_filename - "", // mp3_filename - "", // voc_effects_filename - "", // mp3_effects_filename - "GDEMO", // gamepc_filename + "", // gme_filename + "", // wav_filename + "", // voc_filename + "", // mp3_filename + "", // vorbis_filename + "", // voc_effects_filename + "", // mp3_effects_filename + "", // vorbis_effects_filename + "GDEMO", // gamepc_filename }; static const GameSpecificSettings simon2win_settings = { - "SIMON2.GME", // gme_filename - "SIMON2.WAV", // wav_filename - "SIMON2.VOC", // voc_filename - "SIMON2.MP3", // mp3_filename - "", // voc_effects_filename - "", // mp3_effects_filename - "GSPTR30", // gamepc_filename + "SIMON2.GME", // gme_filename + "SIMON2.WAV", // wav_filename + "SIMON2.VOC", // voc_filename + "SIMON2.MP3", // mp3_filename + "SIMON2.OGG", // vorbis_filename + "", // voc_effects_filename + "", // mp3_effects_filename + "", // vorbis_effects_filename + "GSPTR30", // gamepc_filename }; static const GameSpecificSettings simon2mac_settings = { - "Simon2.gme", // gme_filename - "", // wav_filename - "", // voc_filename - "SIMON2.MP3", // mp3_filename - "", // voc_effects_filename - "", // mp3_effects_filename - "gsptr30", // gamepc_filename + "Simon2.gme", // gme_filename + "", // wav_filename + "", // voc_filename + "SIMON2.MP3", // mp3_filename + "SIMON2.OGG", // vorbis_filename + "", // voc_effects_filename + "", // mp3_effects_filename + "", // vorbis_effects_filename + "gsptr30", // gamepc_filename }; static const GameSpecificSettings simon2dos_settings = { - "SIMON2.GME", // gme_filename - "", // wav_filename - "", // voc_filename - "", // mp3_filename - "", // voc_effects_filename - "", // mp3_effects_filename - "GAME32", // gamepc_filename + "SIMON2.GME", // gme_filename + "", // wav_filename + "", // voc_filename + "", // mp3_filename + "", // vorbis_filename + "", // voc_effects_filename + "", // mp3_effects_filename + "", // vorbis_effects_filename + "GAME32", // gamepc_filename }; #endif diff --git a/simon/sound.cpp b/simon/sound.cpp index 27e8241120..d0f17b3f24 100644 --- a/simon/sound.cpp +++ b/simon/sound.cpp @@ -230,6 +230,26 @@ void MP3Sound::playSound(uint sound, PlayingSoundHandle *handle, byte flags) } #endif +#ifdef USE_VORBIS +class VorbisSound : public BaseSound { +public: + VorbisSound(SoundMixer *mixer, File *file, uint32 base = 0) : BaseSound(mixer, file, base) {}; + void playSound(uint sound, PlayingSoundHandle *handle, byte flags); +}; + +void VorbisSound::playSound(uint sound, PlayingSoundHandle *handle, byte flags) +{ + if (_offsets == NULL) + return; + + _file->seek(_offsets[sound], SEEK_SET); + + uint32 size = _offsets[sound+1] - _offsets[sound]; + + _mixer->playVorbis(handle, _file, size); +} +#endif + SimonSound::SimonSound(const byte game, const GameSpecificSettings *gss, const Common::String &gameDataPath, SoundMixer *mixer) : _game(game), _gameDataPath(gameDataPath), _mixer(mixer) { _voice = 0; @@ -253,10 +273,21 @@ SimonSound::SimonSound(const byte game, const GameSpecificSettings *gss, const C const char *s; #ifdef USE_MAD - file->open(gss->mp3_filename, gameDataPath); - if (file->isOpen()) { - _voice_file = true; - _voice = new MP3Sound(_mixer, file); + if (!_voice && gss->mp3_filename && gss->mp3_filename[0]) { + file->open(gss->mp3_filename, gameDataPath); + if (file->isOpen()) { + _voice_file = true; + _voice = new MP3Sound(_mixer, file); + } + } +#endif +#ifdef USE_VORBIS + if (!_voice && gss->vorbis_filename && gss->vorbis_filename[0]) { + file->open(gss->vorbis_filename, gameDataPath); + if (file->isOpen()) { + _voice_file = true; + _voice = new VorbisSound(_mixer, file); + } } #endif if (!_voice) { @@ -308,9 +339,19 @@ SimonSound::SimonSound(const byte game, const GameSpecificSettings *gss, const C if (_game == GAME_SIMON1ACORN || _game == GAME_SIMON1TALKIE) { file = new File(); #ifdef USE_MAD - file->open(gss->mp3_effects_filename, gameDataPath); - if (file->isOpen()) { - _effects = new MP3Sound(_mixer, file); + if (!_effects && gss->mp3_effects_filename && gss->mp3_effects_filename[0]) { + file->open(gss->mp3_effects_filename, gameDataPath); + if (file->isOpen()) { + _effects = new MP3Sound(_mixer, file); + } + } +#endif +#ifdef USE_VORBIS + if (!_effects && gss->vorbis_effects_filename && gss->vorbis_effects_filename[0]) { + file->open(gss->vorbis_effects_filename, gameDataPath); + if (file->isOpen()) { + _effects = new VorbisSound(_mixer, file); + } } #endif if (!_effects) { |