MOHAWK: Add an isPlaying() and stopSound(id) function to Sound (for LB and others)

svn-id: r54514
This commit is contained in:
Matthew Hoops 2010-11-27 21:36:04 +00:00
parent c76422412d
commit 3d4ca8e405
2 changed files with 24 additions and 6 deletions

View File

@ -38,12 +38,6 @@ namespace Mohawk {
Sound::Sound(MohawkEngine* vm) : _vm(vm) {
_midiDriver = NULL;
_midiParser = NULL;
for (uint32 i = 0; i < _handles.size(); i++) {
_handles[i].handle = Audio::SoundHandle();
_handles[i].type = kFreeHandle;
}
initMidi();
}
@ -81,6 +75,7 @@ Audio::SoundHandle *Sound::playSound(uint16 id, byte volume, bool loop) {
SndHandle *handle = getHandle();
handle->type = kUsedHandle;
handle->id = id;
Audio::AudioStream *audStream = NULL;
@ -485,6 +480,7 @@ SndHandle *Sound::getHandle() {
if (!_vm->_mixer->isSoundHandleActive(_handles[i].handle)) {
_handles[i].type = kFreeHandle;
_handles[i].id = 0;
return &_handles[i];
}
}
@ -493,6 +489,7 @@ SndHandle *Sound::getHandle() {
SndHandle handle;
handle.handle = Audio::SoundHandle();
handle.type = kFreeHandle;
handle.id = 0;
_handles.push_back(handle);
return &_handles[_handles.size() - 1];
@ -503,6 +500,16 @@ void Sound::stopSound() {
if (_handles[i].type == kUsedHandle) {
_vm->_mixer->stopHandle(_handles[i].handle);
_handles[i].type = kFreeHandle;
_handles[i].id = 0;
}
}
void Sound::stopSound(uint16 id) {
for (uint32 i = 0; i < _handles.size(); i++)
if (_handles[i].type == kUsedHandle && _handles[i].id == id) {
_vm->_mixer->stopHandle(_handles[i].handle);
_handles[i].type = kFreeHandle;
_handles[i].id = 0;
}
}
@ -518,4 +525,12 @@ void Sound::resumeSound() {
_vm->_mixer->pauseHandle(_handles[i].handle, false);
}
bool Sound::isPlaying(uint16 id) {
for (uint32 i = 0; i < _handles.size(); i++)
if (_handles[i].type == kUsedHandle && _handles[i].id == id)
return _vm->_mixer->isSoundHandleActive(_handles[i].handle);
return false;
}
} // End of namespace Mohawk

View File

@ -65,6 +65,7 @@ enum SndHandleType {
struct SndHandle {
Audio::SoundHandle handle;
SndHandleType type;
uint16 id;
};
struct SLSTSndHandle {
@ -122,8 +123,10 @@ public:
void playSoundBlocking(uint16 id, byte volume = Audio::Mixer::kMaxChannelVolume);
void playMidi(uint16 id);
void stopSound();
void stopSound(uint16 id);
void pauseSound();
void resumeSound();
bool isPlaying(uint16 id);
// Riven-specific
void playSLST(uint16 index, uint16 card);