aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/sound_digital.cpp
diff options
context:
space:
mode:
authorJohannes Schickel2008-04-20 14:25:37 +0000
committerJohannes Schickel2008-04-20 14:25:37 +0000
commit96fd18a13bbe4def704e1f9b15100f3dc48aaf64 (patch)
tree53b8486bb24ef5131e26529dea0dce2984cf7996 /engines/kyra/sound_digital.cpp
parentcdfcab93153fd660e633a98e48a441cbf1cda4b9 (diff)
downloadscummvm-rg350-96fd18a13bbe4def704e1f9b15100f3dc48aaf64.tar.gz
scummvm-rg350-96fd18a13bbe4def704e1f9b15100f3dc48aaf64.tar.bz2
scummvm-rg350-96fd18a13bbe4def704e1f9b15100f3dc48aaf64.zip
Implemented sound priority handling.
svn-id: r31597
Diffstat (limited to 'engines/kyra/sound_digital.cpp')
-rw-r--r--engines/kyra/sound_digital.cpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/engines/kyra/sound_digital.cpp b/engines/kyra/sound_digital.cpp
index ca9f8ff58a..0f671ba38f 100644
--- a/engines/kyra/sound_digital.cpp
+++ b/engines/kyra/sound_digital.cpp
@@ -328,7 +328,7 @@ SoundDigital::~SoundDigital() {
stopSound(i);
}
-int SoundDigital::playSound(Common::SeekableReadStream *stream, kSoundTypes type, int volume, bool loop, int channel) {
+int SoundDigital::playSound(Common::SeekableReadStream *stream, uint8 priority, kSoundTypes type, int volume, bool loop, int channel) {
Sound *use = 0;
if (channel != -1 && channel < ARRAYSIZE(_sounds)) {
stopSound(channel);
@@ -343,12 +343,23 @@ int SoundDigital::playSound(Common::SeekableReadStream *stream, kSoundTypes type
}
if (!use) {
- warning("no free sound channel");
- delete stream;
- return -1;
+ for (channel = 0; channel < ARRAYSIZE(_sounds); ++channel) {
+ if (_sounds[channel].priority <= priority) {
+ stopSound(channel);
+ use = &_sounds[channel];
+ break;
+ }
+ }
+
+ if (!use) {
+ warning("no free sound channel");
+ delete stream;
+ return -1;
+ }
}
}
+ use->priority = priority;
use->stream = new AUDStream(stream, loop);
if (use->stream->endOfData()) {
delete use->stream;