aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/ksound.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/engine/ksound.cpp')
-rw-r--r--engines/sci/engine/ksound.cpp57
1 files changed, 30 insertions, 27 deletions
diff --git a/engines/sci/engine/ksound.cpp b/engines/sci/engine/ksound.cpp
index f899fa9a84..b742c93a52 100644
--- a/engines/sci/engine/ksound.cpp
+++ b/engines/sci/engine/ksound.cpp
@@ -123,7 +123,7 @@ enum AudioSyncCommands {
static void script_set_priority(EngineState *s, reg_t obj, int priority) {
int song_nr = GET_SEL32V(obj, number);
- Resource *song = s->resmgr->findResource(kResourceTypeSound, song_nr, 0);
+ Resource *song = s->resmgr->findResource(ResourceId(kResourceTypeSound, song_nr), 0);
int flags = GET_SEL32V(obj, flags);
if (priority == -1) {
@@ -140,7 +140,7 @@ static void script_set_priority(EngineState *s, reg_t obj, int priority) {
}
SongIterator *build_iterator(EngineState *s, int song_nr, SongIteratorType type, songit_id_t id) {
- Resource *song = s->resmgr->findResource(kResourceTypeSound, song_nr, 0);
+ Resource *song = s->resmgr->findResource(ResourceId(kResourceTypeSound, song_nr), 0);
if (!song)
return NULL;
@@ -503,7 +503,7 @@ reg_t kDoSound_SCI01(EngineState *s, int funct_nr, int argc, reg_t *argv) {
//int vol = GET_SEL32V(obj, vol);
//int pri = GET_SEL32V(obj, pri);
- if (obj.segment && (s->resmgr->testResource(kResourceTypeSound, number))) {
+ if (obj.segment && (s->resmgr->testResource(ResourceId(kResourceTypeSound, number)))) {
sciprintf("Initializing song number %d\n", number);
s->_sound.sfx_add_song(build_iterator(s, number, SCI_SONG_ITERATOR_TYPE_SCI1,
handle), 0, handle, number);
@@ -807,7 +807,7 @@ reg_t kDoSound_SCI1(EngineState *s, int funct_nr, int argc, reg_t *argv) {
}
if (!GET_SEL32V(obj, nodePtr) && obj.segment) {
- if (!s->resmgr->testResource(kResourceTypeSound, number)) {
+ if (!s->resmgr->testResource(ResourceId(kResourceTypeSound, number))) {
sciprintf("Could not open song number %d\n", number);
return NULL_REG;
}
@@ -837,7 +837,7 @@ reg_t kDoSound_SCI1(EngineState *s, int funct_nr, int argc, reg_t *argv) {
s->_sound.sfx_remove_song(handle);
}
- if (obj.segment && (s->resmgr->testResource(kResourceTypeSound, number))) {
+ if (obj.segment && (s->resmgr->testResource(ResourceId(kResourceTypeSound, number)))) {
sciprintf("Initializing song number %d\n", number);
s->_sound.sfx_add_song(build_iterator(s, number, SCI_SONG_ITERATOR_TYPE_SCI1,
handle), 0, handle, number);
@@ -991,15 +991,12 @@ reg_t kDoAudio(EngineState *s, int funct_nr, int argc, reg_t *argv) {
if (audioStream)
mixer->playInputStream(Audio::Mixer::kSpeechSoundType, s->_sound._audioResource->getAudioHandle(), audioStream);
} else if (argc == 6) { // SQ4CD or newer
- //uint32 volume = argv[1].toUint16();
// Make a BE number
uint32 audioNumber = (((argv[2].toUint16() & 0xFF) << 24) & 0xFF000000) |
(((argv[3].toUint16() & 0xFF) << 16) & 0x00FF0000) |
(((argv[4].toUint16() & 0xFF) << 8) & 0x0000FF00) |
( (argv[5].toUint16() & 0xFF) & 0x000000FF);
- printf("%d %d %d %d -> %d\n", argv[2].toUint16(), argv[3].toUint16(), argv[4].toUint16(), argv[5].toUint16(), audioNumber); // debugging
-
Audio::AudioStream *audioStream = s->_sound._audioResource->getAudioStream(audioNumber, argv[1].toUint16(), &sampleLen);
if (audioStream)
@@ -1042,28 +1039,34 @@ reg_t kDoAudio(EngineState *s, int funct_nr, int argc, reg_t *argv) {
reg_t kDoSync(EngineState *s, int funct_nr, int argc, reg_t *argv) {
switch (argv[0].toUint16()) {
- case kSciAudioSyncStart:
- if (argc == 3) { // KQ5CD, KQ6 floppy
- if (s->_sound._soundSync) {
- s->resmgr->unlockResource(s->_sound._soundSync, s->_sound._soundSync->id.number, kResourceTypeSync);
- }
+ case kSciAudioSyncStart: {
+ ResourceId id;
+
+ if (s->_sound._soundSync)
+ s->resmgr->unlockResource(s->_sound._soundSync);
+
+ // Load sound sync resource and lock it
+ if (argc == 3) {
+ id = ResourceId(kResourceTypeSync, argv[2].toUint16());
+ } else if (argc == 7) {
+ id = ResourceId(kResourceTypeSync36, argv[2].toUint16(), argv[3].toUint16(), argv[4].toUint16(),
+ argv[5].toUint16(), argv[6].toUint16());
+ } else {
+ warning("kDoSync: Start called with an unknown number of parameters (%d)", argc);
+ return s->r_acc;
+ }
- // Load sound sync resource and lock it
- s->_sound._soundSync = (ResourceSync *)s->resmgr->findResource(kResourceTypeSync, argv[2].toUint16(), 1);
+ s->_sound._soundSync = (ResourceSync *)s->resmgr->findResource(id, 1);
- if (s->_sound._soundSync) {
- s->_sound._soundSync->startSync(s, argv[1]);
- } else {
- // Notify the scripts to stop sound sync
- PUT_SEL32V(argv[1], syncCue, -1);
- }
- } else if (argc == 7) { // SQ4CD or newer
- // TODO
- warning("kDoSync: Start called with new semantics - 6 parameters: %d %d %d %d %d %d", argv[1].toUint16(), argv[2].toUint16(), argv[3].toUint16(), argv[4].toUint16(), argv[5].toUint16(), argv[6].toUint16());
- } else { // Hopefully, this should never happen
- warning("kDoSync: Start called with an unknown number of parameters (%d)", argc);
+ if (s->_sound._soundSync) {
+ s->_sound._soundSync->startSync(s, argv[1]);
+ } else {
+ warning("DoSync: failed to find resource %s", id.toString().c_str());
+ // Notify the scripts to stop sound sync
+ PUT_SEL32V(argv[1], syncCue, -1);
}
break;
+ }
case kSciAudioSyncNext:
if (s->_sound._soundSync) {
s->_sound._soundSync->nextSync(s, argv[1]);
@@ -1072,7 +1075,7 @@ reg_t kDoSync(EngineState *s, int funct_nr, int argc, reg_t *argv) {
case kSciAudioSyncStop:
if (s->_sound._soundSync) {
s->_sound._soundSync->stopSync();
- s->resmgr->unlockResource(s->_sound._soundSync, s->_sound._soundSync->id.number, kResourceTypeSync);
+ s->resmgr->unlockResource(s->_sound._soundSync);
s->_sound._soundSync = NULL;
}
break;