[Scummvm-cvs-logs] CVS: scummvm/saga sound.cpp,1.33,1.34 sound.h,1.25,1.26
Eugene Sandulenko
sev at users.sourceforge.net
Mon Aug 15 16:27:27 CEST 2005
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/sword2/driver d_sound.cpp,1.155,1.156
- Next message: [Scummvm-cvs-logs] CVS: web/screenshots big_scummvm_109.png,NONE,1.1 big_scummvm_110.png,NONE,1.1 scummvm_109.jpg,NONE,1.1 scummvm_109.txt,NONE,1.1 scummvm_110.jpg,NONE,1.1 scummvm_110.txt,NONE,1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/scummvm/scummvm/saga
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11357
Modified Files:
sound.cpp sound.h
Log Message:
Fix prince room sound inconsistencies mentioned in bugreport #1258501
Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sound.cpp,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -d -r1.33 -r1.34
--- sound.cpp 13 Aug 2005 01:35:52 -0000 1.33
+++ sound.cpp 15 Aug 2005 23:26:50 -0000 1.34
@@ -32,12 +32,31 @@
Sound::Sound(SagaEngine *vm, Audio::Mixer *mixer, int enabled) :
_vm(vm), _mixer(mixer), _enabled(enabled), _voxStream(0) {
+
+ for (int i = 0; i < SOUND_HANDLES; i++)
+ _handles[i].type = kFreeHandle;
}
Sound::~Sound() {
delete _voxStream;
}
+SndHandle *Sound::getHandle() {
+ for (int i = 0; i < SOUND_HANDLES; i++) {
+ if (_handles[i].type == kFreeHandle)
+ return &_handles[i];
+
+ if (!_mixer->isSoundHandleActive(_handles[i].handle)) {
+ _handles[i].type = kFreeHandle;
+ return &_handles[i];
+ }
+ }
+
+ error("Sound::getHandle(): Too many sound handles");
+
+ return NULL;
+}
+
void Sound::playSoundBuffer(Audio::SoundHandle *handle, SoundBuffer &buffer, int volume, bool loop) {
byte flags;
@@ -61,39 +80,62 @@
}
void Sound::playSound(SoundBuffer &buffer, int volume, bool loop) {
- playSoundBuffer(&_effectHandle, buffer, 2 * volume, loop);
+ SndHandle *handle = getHandle();
+
+ handle->type = kEffectHandle;
+ playSoundBuffer(&handle->handle, buffer, 2 * volume, loop);
}
void Sound::pauseSound() {
- _mixer->pauseHandle(_effectHandle, true);
+ for (int i = 0; i < SOUND_HANDLES; i++)
+ if (_handles[i].type == kEffectHandle)
+ _mixer->pauseHandle(_handles[i].handle, true);
}
void Sound::resumeSound() {
- _mixer->pauseHandle(_effectHandle, false);
+ for (int i = 0; i < SOUND_HANDLES; i++)
+ if (_handles[i].type == kEffectHandle)
+ _mixer->pauseHandle(_handles[i].handle, false);
}
void Sound::stopSound() {
- _mixer->stopHandle(_effectHandle);
+ for (int i = 0; i < SOUND_HANDLES; i++)
+ if (_handles[i].type == kEffectHandle) {
+ _mixer->stopHandle(_handles[i].handle);
+ _handles[i].type = kFreeHandle;
+ }
}
void Sound::playVoice(SoundBuffer &buffer) {
- playSoundBuffer(&_voiceHandle, buffer, 255, false);
+ SndHandle *handle = getHandle();
+
+ handle->type = kVoiceHandle;
+ playSoundBuffer(&handle->handle, buffer, 255, false);
}
void Sound::pauseVoice() {
- _mixer->pauseHandle(_voiceHandle, true);
+ for (int i = 0; i < SOUND_HANDLES; i++)
+ if (_handles[i].type == kVoiceHandle)
+ _mixer->pauseHandle(_handles[i].handle, true);
}
void Sound::resumeVoice() {
- _mixer->pauseHandle(_voiceHandle, false);
+ for (int i = 0; i < SOUND_HANDLES; i++)
+ if (_handles[i].type == kVoiceHandle)
+ _mixer->pauseHandle(_handles[i].handle, false);
}
void Sound::stopVoice() {
- _mixer->stopHandle(_voiceHandle);
+ for (int i = 0; i < SOUND_HANDLES; i++)
+ if (_handles[i].type == kVoiceHandle) {
+ _mixer->stopHandle(_handles[i].handle);
+ _handles[i].type = kFreeHandle;
+ }
}
void Sound::stopAll() {
- _mixer->stopAll();
+ stopVoice();
+ stopSound();
}
} // End of namespace Saga
Index: sound.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sound.h,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -d -r1.25 -r1.26
--- sound.h 13 Aug 2005 01:35:52 -0000 1.25
+++ sound.h 15 Aug 2005 23:26:50 -0000 1.26
@@ -30,6 +30,8 @@
namespace Saga {
+#define SOUND_HANDLES 10
+
enum SOUND_FLAGS {
SOUND_LOOP = 1
};
@@ -45,6 +47,17 @@
bool isBigEndian;
};
+enum sndHandleType {
+ kFreeHandle,
+ kEffectHandle,
+ kVoiceHandle
+};
+
+struct SndHandle {
+ Audio::SoundHandle handle;
+ sndHandleType type;
+};
+
class Sound {
public:
@@ -66,15 +79,15 @@
private:
void playSoundBuffer(Audio::SoundHandle *handle, SoundBuffer &buffer, int volume, bool loop);
+
+ SndHandle *getHandle();
int _enabled;
SagaEngine *_vm;
Audio::Mixer *_mixer;
Common::MemoryReadStream *_voxStream;
- Audio::SoundHandle _effectHandle;
- Audio::SoundHandle _voiceHandle;
-
+ SndHandle _handles[SOUND_HANDLES];
};
} // End of namespace Saga
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/sword2/driver d_sound.cpp,1.155,1.156
- Next message: [Scummvm-cvs-logs] CVS: web/screenshots big_scummvm_109.png,NONE,1.1 big_scummvm_110.png,NONE,1.1 scummvm_109.jpg,NONE,1.1 scummvm_109.txt,NONE,1.1 scummvm_110.jpg,NONE,1.1 scummvm_110.txt,NONE,1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Scummvm-git-logs
mailing list