aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorEinar Johan Trøan Sømåen2012-05-09 19:49:53 +0200
committerEinar Johan Trøan Sømåen2012-06-02 12:42:10 +0200
commit23dd928733340261aabe3a006e3b17010909d537 (patch)
treeea5ffa79a266319a392954f9d99fd19c81c74634 /engines
parent0b8ac2f3b44883875c9366cd965314257fc32ce7 (diff)
downloadscummvm-rg350-23dd928733340261aabe3a006e3b17010909d537.tar.gz
scummvm-rg350-23dd928733340261aabe3a006e3b17010909d537.tar.bz2
scummvm-rg350-23dd928733340261aabe3a006e3b17010909d537.zip
WINTERMUTE: Add in basic sound-support.
Right now, all that is supported is triggering OGG-files, the choice of codec is hardcoded, and stopping/pausing etc isn't added in.
Diffstat (limited to 'engines')
-rw-r--r--engines/wintermute/BSoundBuffer.cpp25
-rw-r--r--engines/wintermute/BSoundBuffer.h7
-rw-r--r--engines/wintermute/BSoundMgr.cpp29
3 files changed, 38 insertions, 23 deletions
diff --git a/engines/wintermute/BSoundBuffer.cpp b/engines/wintermute/BSoundBuffer.cpp
index 7de8aec436..a58f39c869 100644
--- a/engines/wintermute/BSoundBuffer.cpp
+++ b/engines/wintermute/BSoundBuffer.cpp
@@ -33,6 +33,10 @@
#include "BSoundBuffer.h"
#include "BFileManager.h"
#include "utils.h"
+#include "audio/audiostream.h"
+#include "audio/mixer.h"
+#include "audio/decoders/vorbis.h"
+#include "common/system.h"
namespace WinterMute {
@@ -44,9 +48,8 @@ namespace WinterMute {
//////////////////////////////////////////////////////////////////////////
CBSoundBuffer::CBSoundBuffer(CBGame *inGame): CBBase(inGame) {
-#if 0
_stream = NULL;
- _sync = NULL;
+// _sync = NULL;
_streamed = false;
_filename = NULL;
@@ -59,7 +62,6 @@ CBSoundBuffer::CBSoundBuffer(CBGame *inGame): CBBase(inGame) {
_type = SOUND_SFX;
_freezePaused = false;
-#endif
}
@@ -91,11 +93,15 @@ void CBSoundBuffer::SetStreaming(bool Streamed, uint32 NumBlocks, uint32 BlockSi
//////////////////////////////////////////////////////////////////////////
HRESULT CBSoundBuffer::LoadFromFile(const char *Filename, bool ForceReload) {
+ warning("BSoundBuffer::LoadFromFile(%s,%d)", Filename, ForceReload);
#if 0
if (_stream) {
BASS_StreamFree(_stream);
_stream = NULL;
}
+#endif
+ delete _stream;
+ _stream = NULL;
if (_file) Game->_fileManager->CloseFile(_file);
@@ -104,7 +110,12 @@ HRESULT CBSoundBuffer::LoadFromFile(const char *Filename, bool ForceReload) {
Game->LOG(0, "Error opening sound file '%s'", Filename);
return E_FAIL;
}
-
+
+ _stream = Audio::makeVorbisStream(_file->getMemStream(), DisposeAfterUse::YES);
+ CBUtils::SetString(&_filename, Filename);
+
+ return S_OK;
+#if 0
BASS_FILEPROCS fileProc;
fileProc.close = CBSoundBuffer::FileCloseProc;
fileProc.read = CBSoundBuffer::FileReadProc;
@@ -166,13 +177,13 @@ HRESULT CBSoundBuffer::LoadFromFile(const char *Filename, bool ForceReload) {
//////////////////////////////////////////////////////////////////////////
HRESULT CBSoundBuffer::Play(bool Looping, uint32 StartSample) {
-#if 0
+ warning("Play: %s", _filename);
if (_stream) {
SetLooping(Looping);
- BASS_ChannelPlay(_stream, TRUE);
+ g_system->getMixer()->playStream(Audio::Mixer::kPlainSoundType, _handle, _stream);
+ //BASS_ChannelPlay(_stream, TRUE);
}
return S_OK;
-#endif
}
//////////////////////////////////////////////////////////////////////////
diff --git a/engines/wintermute/BSoundBuffer.h b/engines/wintermute/BSoundBuffer.h
index 2a1016f7a9..e9ef8264f7 100644
--- a/engines/wintermute/BSoundBuffer.h
+++ b/engines/wintermute/BSoundBuffer.h
@@ -33,6 +33,11 @@
#include "BBase.h"
//#include "bass.h"
+namespace Audio {
+ class SeekableAudioStream;
+ class SoundHandle;
+}
+
namespace WinterMute {
class CBFile;
@@ -72,6 +77,8 @@ public:
//HSTREAM _stream;
//HSYNC _sync;
+ Audio::SeekableAudioStream *_stream;
+ Audio::SoundHandle *_handle;
bool _freezePaused;
uint32 _loopStart;
diff --git a/engines/wintermute/BSoundMgr.cpp b/engines/wintermute/BSoundMgr.cpp
index 469d601e46..17fd3c64b0 100644
--- a/engines/wintermute/BSoundMgr.cpp
+++ b/engines/wintermute/BSoundMgr.cpp
@@ -59,10 +59,9 @@ CBSoundMgr::~CBSoundMgr() {
//////////////////////////////////////////////////////////////////////////
HRESULT CBSoundMgr::Cleanup() {
-#if 0
for (int i = 0; i < _sounds.GetSize(); i++) delete _sounds[i];
_sounds.RemoveAll();
-
+#if 0
BASS_Free();
#endif
return S_OK;
@@ -107,10 +106,9 @@ HRESULT CBSoundMgr::Initialize() {
_volumeSpeech = Game->_registry->ReadInt("Audio", "SpeechVolume", 100);
_volumeMusic = Game->_registry->ReadInt("Audio", "MusicVolume", 100);
-#if 0
_soundAvailable = true;
SetMasterVolumePercent(_volumeMaster);
-#endif
+
return S_OK;
}
@@ -129,7 +127,6 @@ HRESULT CBSoundMgr::InitLoop() {
//////////////////////////////////////////////////////////////////////////
CBSoundBuffer *CBSoundMgr::AddSound(const char *Filename, TSoundType Type, bool Streamed) {
if (!_soundAvailable) return NULL;
-#if 0
CBSoundBuffer *sound;
@@ -178,14 +175,14 @@ CBSoundBuffer *CBSoundMgr::AddSound(const char *Filename, TSoundType Type, bool
_sounds.Add(sound);
return sound;
-#endif
+
return NULL;
}
//////////////////////////////////////////////////////////////////////////
HRESULT CBSoundMgr::AddSound(CBSoundBuffer *Sound, TSoundType Type) {
if (!Sound) return E_FAIL;
-#if 0
+
// set volume appropriately
switch (Type) {
case SOUND_SFX:
@@ -201,13 +198,13 @@ HRESULT CBSoundMgr::AddSound(CBSoundBuffer *Sound, TSoundType Type) {
// register sound
_sounds.Add(Sound);
-#endif
+
return S_OK;
}
//////////////////////////////////////////////////////////////////////////
HRESULT CBSoundMgr::RemoveSound(CBSoundBuffer *Sound) {
-#if 0
+
for (int i = 0; i < _sounds.GetSize(); i++) {
if (_sounds[i] == Sound) {
delete _sounds[i];
@@ -215,7 +212,7 @@ HRESULT CBSoundMgr::RemoveSound(CBSoundBuffer *Sound) {
return S_OK;
}
}
-#endif
+
return E_FAIL;
}
@@ -223,7 +220,7 @@ HRESULT CBSoundMgr::RemoveSound(CBSoundBuffer *Sound) {
//////////////////////////////////////////////////////////////////////////
HRESULT CBSoundMgr::SetVolume(TSoundType Type, int Volume) {
if (!_soundAvailable) return S_OK;
-#if 0
+
switch (Type) {
case SOUND_SFX:
_volumeSFX = Volume;
@@ -239,7 +236,7 @@ HRESULT CBSoundMgr::SetVolume(TSoundType Type, int Volume) {
for (int i = 0; i < _sounds.GetSize(); i++) {
if (_sounds[i]->_type == Type) _sounds[i]->SetVolume(Volume);
}
-#endif
+
return S_OK;
}
@@ -291,28 +288,28 @@ byte CBSoundMgr::GetMasterVolumePercent() {
//////////////////////////////////////////////////////////////////////////
HRESULT CBSoundMgr::PauseAll(bool IncludingMusic) {
-#if 0
+
for (int i = 0; i < _sounds.GetSize(); i++) {
if (_sounds[i]->IsPlaying() && (_sounds[i]->_type != SOUND_MUSIC || IncludingMusic)) {
_sounds[i]->Pause();
_sounds[i]->_freezePaused = true;
}
}
-#endif
+
return S_OK;
}
//////////////////////////////////////////////////////////////////////////
HRESULT CBSoundMgr::ResumeAll() {
-#if 0
+
for (int i = 0; i < _sounds.GetSize(); i++) {
if (_sounds[i]->_freezePaused) {
_sounds[i]->Resume();
_sounds[i]->_freezePaused = false;
}
}
-#endif
+
return S_OK;
}