aboutsummaryrefslogtreecommitdiff
path: root/scumm
diff options
context:
space:
mode:
authorPaweł Kołodziejski2004-05-02 12:20:55 +0000
committerPaweł Kołodziejski2004-05-02 12:20:55 +0000
commit054acfbbd38771fb78f58754d6c7ee593a910cbf (patch)
tree3872b865ef4a4694569f361f6e8fa7481c89c26e /scumm
parent24ccdb85e945463eeb29940c55b3c28094c35a7c (diff)
downloadscummvm-rg350-054acfbbd38771fb78f58754d6c7ee593a910cbf.tar.gz
scummvm-rg350-054acfbbd38771fb78f58754d6c7ee593a910cbf.tar.bz2
scummvm-rg350-054acfbbd38771fb78f58754d6c7ee593a910cbf.zip
added rest of save/load code
svn-id: r13737
Diffstat (limited to 'scumm')
-rw-r--r--scumm/imuse_digi/dimuse.cpp22
-rw-r--r--scumm/imuse_digi/dimuse.h3
-rw-r--r--scumm/imuse_digi/dimuse_track.cpp7
3 files changed, 30 insertions, 2 deletions
diff --git a/scumm/imuse_digi/dimuse.cpp b/scumm/imuse_digi/dimuse.cpp
index 74a60fda5f..1c8e611250 100644
--- a/scumm/imuse_digi/dimuse.cpp
+++ b/scumm/imuse_digi/dimuse.cpp
@@ -102,8 +102,10 @@ void IMuseDigital::saveOrLoad(Serializer *ser) {
MKLINE(Track, volFadeDelay, sleInt32, VER(31)),
MKLINE(Track, volFadeUsed, sleByte, VER(31)),
MKLINE(Track, soundId, sleInt32, VER(31)),
+ MKARRAY(Track, soundName, sleByte, 15, VER(31)),
MKLINE(Track, used, sleByte, VER(31)),
MKLINE(Track, toBeRemoved, sleByte, VER(31)),
+ MKLINE(Track, souStream, sleByte, VER(31)),
MKLINE(Track, started, sleByte, VER(31)),
MKLINE(Track, priority, sleInt32, VER(31)),
MKLINE(Track, regionOffset, sleInt32, VER(31)),
@@ -112,6 +114,7 @@ void IMuseDigital::saveOrLoad(Serializer *ser) {
MKLINE(Track, curRegion, sleInt32, VER(31)),
MKLINE(Track, curHookId, sleInt32, VER(31)),
MKLINE(Track, volGroupId, sleInt32, VER(31)),
+ MKLINE(Track, soundType, sleInt32, VER(31)),
MKLINE(Track, iteration, sleInt32, VER(31)),
MKLINE(Track, mod, sleInt32, VER(31)),
MKLINE(Track, mixerFlags, sleInt32, VER(31)),
@@ -124,8 +127,25 @@ void IMuseDigital::saveOrLoad(Serializer *ser) {
ser->_ref_me = this;
ser->saveLoadEntries(this, mainEntries);
- for (i = 0; i < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; i++)
+ for (i = 0; i < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; i++) {
ser->saveLoadEntries(_track[i], trackEntries);
+ if (!ser->isSaving()) {
+ if (_track[i]->souStream) {
+ _track[i]->stream2 = NULL;
+ _track[i]->stream = NULL;
+ _track[i]->used = false;
+ } else {
+ _track[i]->soundHandle = _sound->openSound(_track[i]->soundId,
+ _track[i]->soundName, _track[i]->soundType,
+ _track[i]->volGroupId);
+ int32 streamBufferSize = _track[i]->iteration;
+ int freq = _sound->getFreq(_track[i]->soundHandle);
+ _track[i]->stream2 = NULL;
+ _track[i]->stream = makeAppendableAudioStream(freq, _track[i]->mixerFlags, streamBufferSize);
+ _vm->_mixer->playInputStream(&_track[i]->handle, _track[i]->stream, false, _track[i]->vol / 1000, _track[i]->pan, -1);
+ }
+ }
+ }
}
void IMuseDigital::callback() {
diff --git a/scumm/imuse_digi/dimuse.h b/scumm/imuse_digi/dimuse.h
index 7229a790c4..0a341e9eda 100644
--- a/scumm/imuse_digi/dimuse.h
+++ b/scumm/imuse_digi/dimuse.h
@@ -52,9 +52,11 @@ private:
bool volFadeUsed; //
int soundId;
+ char soundName[15];
bool used;
bool toBeRemoved;
bool started;
+ bool souStream;
int priority;
int32 regionOffset;
int32 trackOffset;
@@ -62,6 +64,7 @@ private:
int curRegion;
int curHookId;
int volGroupId;
+ int soundType;
int iteration;
int mod;
int32 mixerFlags;
diff --git a/scumm/imuse_digi/dimuse_track.cpp b/scumm/imuse_digi/dimuse_track.cpp
index 7b7ba91746..649c29e792 100644
--- a/scumm/imuse_digi/dimuse_track.cpp
+++ b/scumm/imuse_digi/dimuse_track.cpp
@@ -107,13 +107,18 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType,
_track[l]->mixerPan = 0;
_track[l]->mixerVol = volume;
_track[l]->toBeRemoved = false;
+ _track[l]->soundType = soundType;
int bits = 0, freq = 0, channels = 0;
if (input) {
_track[l]->iteration = 0;
+ _track[l]->souStream = true;
+ _track[l]->soundName[0] = 0;
// Do nothing here, we already have an audio stream
} else {
+ _track[l]->souStream = false;
+ strcpy(_track[l]->soundName, soundName);
_track[l]->soundHandle = _sound->openSound(soundId, soundName, soundType, volGroupId);
if (_track[l]->soundHandle == NULL)
@@ -150,7 +155,7 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType,
}
if (input) {
- _track[l]->stream2 = input;
+ _track[l]->stream2 = NULL;
_track[l]->stream = NULL;
_track[l]->started = false;
} else {